zhizhi/brain/age-os-landing/dual-server-architecture.md

194 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 双机脑体分离架构评估 · Dual-Server Brain-Body Architecture
# 签发: 铸渊 · ICE-GL-ZY001 · 2026-04-05
# 触发: D53 冰朔指令 · 评估双4核8G替代单8核16G方案
# 版权: 国作登字-2026-A-00037559
---
## 结论
**双4核8G方案完全可行且优于单8核16G。**
不是"凑合用",是架构本身就应该脑体分离。
AGE OS的壳-核分离哲学,延伸到基础设施层就是这个形态。
---
## 当前资源消耗实测
基于PM2 ecosystem.config.js配置 + 服务清单:
| 进程 | 端口 | 内存上限 | 功能域 |
|------|------|----------|--------|
| zhuyuan-server | 3800 | 512MB | 主站·对外服务 |
| zhuyuan-preview | 3801 | 256MB | 预览站·冰朔验证 |
| age-os-mcp | 3100 | 256MB | MCP工具链·27工具 |
| age-os-agents | — | 256MB | Agent调度器·定时任务 |
| zy-proxy-sub | 3802 | 128MB | 铸渊专线·订阅 |
| zy-proxy-monitor | — | 64MB | 铸渊专线·监控 |
| zy-proxy-guardian | — | 128MB | 铸渊专线·守护 |
| PostgreSQL | 5432 | ~1GB | 数据库 |
| Nginx | 80/443 | ~64MB | 反向代理入口 |
| **合计** | | **~2.6GB** | |
系统预留 + 未来扩展Gitea/开发引擎需要额外4-5GB。
单台4核8G不够但两台4核8G绰绰有余。
---
## 方案:脑体分离架构
### 机器A · 铸渊大脑4核8G
**角色**:思考 + 存储 + 调度。不对外暴露。
| 组件 | CPU | 内存 | 说明 |
|------|-----|------|------|
| PostgreSQL | 1核 | 2GB | 5表·数据量小·仅内网访问 |
| age-os-mcp | 0.5核 | 256MB | 27工具·请求稀疏 |
| age-os-agents | 0.5核 | 256MB | 定时任务·间歇性 |
| Gitea (S9) | 1核 | 512MB | 单用户·轻量 |
| 开发引擎 (S13) | 1核 | 1GB | 预留 |
| OS + 缓冲 | — | 4GB | |
| **合计** | **4核** | **~8GB** | ✅ |
**网络**:低带宽(仅内网通信 + 外部API调用
**安全**无公网端口暴露DB在内网攻击面为零
### 机器B · 铸渊面孔4核8G
**角色**:对外服务 + 专线 + 团队通信。
| 组件 | CPU | 内存 | 说明 |
|------|-----|------|------|
| Nginx | 0.5核 | 64MB | 反向代理 |
| zhuyuan-server | 1核 | 512MB | 主站·用户访问 |
| zhuyuan-preview | 0.5核 | 256MB | 预览站·冰朔验证 |
| zy-proxy-* ×3 | 1核 | 320MB | 专线服务集群 |
| 未来扩展 | 1核 | 2GB | 预留 |
| OS + 缓冲 | — | 4.8GB | |
| **合计** | **4核** | **~8GB** | ✅ 富余 |
**网络**:高带宽(用户访问 + 专线流量)
**安全**:有公网端口,但无数据库,被攻破也无核心数据
---
## 串联技术方案
### 首选同VPC内网直连零成本·推荐
两台机器放同一腾讯云VPC区域新加坡
- 内网IP直连延迟 < 1ms
- MCP Server 3100端口监听内网IP
- PostgreSQL仅允许内网IP连接
- 成本0元
### 备选WireGuard点对点VPN跨区域时
两台跨区域部署时
- WireGuard隧道10.0.0.1 10.0.0.2
- 延迟增加5-20ms可接受
- 铸渊专线代码中已有类似逻辑
- 成本0元
---
## 代码改动量评估
**改动极小**只需修改3-5个配置值
### 1. MCP网关连接地址
```javascript
// server/app/server.js 中的MCP代理
// 改前: const mcpTarget = 'http://127.0.0.1:3100';
// 改后:
const mcpTarget = `http://${process.env.ZY_MCP_HOST || '127.0.0.1'}:3100`;
```
### 2. PM2配置拆分
```
机器A: server/age-os/ecosystem.config.js不变
机器B: server/ecosystem.config.js + server/proxy/ecosystem.proxy.config.js不变
```
### 3. Nginx反向代理
```nginx
# MCP相关请求代理到内网机器A
location /api/mcp/ {
proxy_pass http://10.0.0.1:3100; # 内网IP
}
```
### 4. 新增环境变量
```
ZY_MCP_HOST=10.0.0.1 # 大脑机内网IP面孔机使用
ZY_DB_HOST=10.0.0.1 # 数据库内网IP大脑机上
```
---
## 与单台8核16G对比
| 维度 | 单台8核16G | 双台4核8G |
|------|-----------|----------|
| 成本 | 海外600-800/ | 轻量×2 400-600/ |
| 故障隔离 | 一死全死 | 大脑死面孔显示维护页 |
| 安全 | DB暴露在公网机器 | DB在无公网内网机 |
| S9 Gitea | 和生产挤一起 | 大脑机独立跑 |
| S13 开发引擎 | 资源竞争 | 大脑机专注编译 |
| 扩展性 | 到顶 | 加第3台=零改动 |
| 带宽 | 全走一个出口 | 面孔高带宽·大脑低带宽 |
---
## 关键约束
1. **PostgreSQL不能走公网** 必须内网或VPN
2. **两台建议同区域**首选新加坡同VPC
3. **COS桶两台都能直接访问** 无需中转
4. **Notion/GitHub API两台都能直接调用** 无需中转
5. **团队服务器架构不变** 仍通过COS共享桶异步通信
---
## 实施阶段
### Phase 1 · 冰朔操作30分钟
1. 购买两台腾讯云轻量4核8G同VPC·新加坡
2. 记录两台内网IP
3. 配置安全组机器A仅开放内网端口机器B开放80/443
### Phase 2 · 铸渊部署1次会话
1. 机器A安装PostgreSQL + 部署MCP Server + Agent调度器
2. 机器B安装Nginx + 部署主站 + 预览站 + 专线服务
3. 配置内网互通
4. 修改3-5个配置值
5. 端到端验证
### Phase 3 · 数据迁移(如有现有数据)
1. PostgreSQL dump 内网传输 restore
2. PM2进程全部迁移
3. DNS切换
---
## 与AGE OS六层架构的映射
```
L1 地核(曜冥语言核) → 机器A · PostgreSQL
L2 地幔(母语词典) → 机器A · MCP工具链
L3 地表(人格体运行) → 机器A · Agent调度器
L4 大气层(信号总线) → 内网连接 · COS桶
L5 卫星层Agent执行 → 机器B · GitHub Actions
L6 太空层(外部交互) → 机器B · Nginx/主站/专线
```
脑体分离不是权宜之计是数字地球架构的自然映射
地核大脑不需要暴露在太空层公网大气层内网是天然隔离
---
*铸渊的判断:这个方案随时可以落地。代码改动极小,架构收益极大。*
*等待冰朔决策。*