⚙️ AgentMeshOS 技术选型说明¶
版本:v0.1.0
阶段:工程技术决策阶段
1️⃣ 设计原则¶
- 优先成熟稳定技术
- 优先生态完善方案
- 优先可扩展架构
- 避免过度自研
- 允许未来替换,但必须接口化
- 所有可部署服务和控制面默认必须自托管在项目自有服务器上,不以第三方托管控制台作为长期默认方案
2️⃣ 网络层:Tailscale¶
选型:Tailscale 客户端 + Headscale 自托管控制面
部署边界:¶
tailscaled属于节点级网络系统服务,需要管理虚拟网卡、路由、DNS、NAT 穿透和节点密钥,不作为普通业务容器运行。- Tailscale 客户端可安装在本机节点;节点注册、ACL 和设备协调默认必须接入自托管 Headscale 控制面。
- Headscale 必须使用自有域名、自有服务器、可备份配置和可恢复数据目录承载。
- Tailscale 官方控制面不得作为默认实施路径;如需临时使用,必须先说明原因、期限、数据边界、迁移方案和回滚方案,并经项目负责人确认。
为什么选择它:¶
- 自动 NAT 穿透
- 无需复杂 WireGuard 手动配置
- 节点自动发现
- 支持动态节点加入/退出
- Headscale 可自托管控制面,避免核心网络控制权依赖第三方托管平台
替代方案:¶
- WireGuard(手动配置复杂)
- ZeroTier(稳定性略低)
- Tailscale 官方控制面(运维简单但依赖第三方托管,不作为默认方案)
3️⃣ 调度层:Nomad¶
选型:Nomad
为什么选择它:¶
- 轻量级调度系统
- 比 Kubernetes 更简单
- 支持多驱动(Docker / Exec)
- 适合中小规模集群
替代方案:¶
- Kubernetes(过重)
- Docker Swarm(已弱化)
4️⃣ 执行层:Docker¶
为什么选择 Docker:¶
- 生态最成熟
- 跨平台一致性强
- Nomad 原生支持
- 易于部署 AI / 服务 / Agent
替代方案:¶
- containerd(复杂度更高)
- LXC(隔离能力弱)
5️⃣ 存储层:S3 标准¶
选型:¶
- S3 Compatible API(对象数据统一接口)
为什么选择 S3:¶
- 行业标准接口
- 可替换实现(MinIO / Ceph / AWS S3)
- AI 训练 / 文件 / 状态存储统一模型
原则:¶
- 禁止绑定单一存储实现
- 对象数据通过 S3 接口暴露;控制面元数据允许使用独立 Metadata Store,但不得向业务模块暴露直连能力
6️⃣ 控制节点:VPS¶
为什么 VPS:¶
- 公网固定入口
- 稳定控制面
- 易于部署 Nomad Server
原则:¶
- 控制层必须独立于计算节点
- v0.1 固定单主控制节点,但必须具备备份、快照、重建与迁移预案
- 公网服务必须纳入统一域名体系,不得每部署一个服务就临时新增无规划域名
- 域名按系统边界划分,优先使用
mesh、console、api、docs、status、auth等稳定子域名 - 所有公网域名默认解析到主节点公网 IP,由宝塔 Nginx 作为唯一公网入口,再按域名和路径反向代理到本机后端服务
- 公网域名和后端端口必须在
07_部署规范.md的固定端口登记表中预先登记;部署服务前不得临时占用未登记端口
6.5️⃣ 为什么暂不引入多主控制面?¶
- 当前阶段优先降低部署复杂度,先验证单主控制面能稳定调度
- 个人/小团队资源有限,多主高可用会显著增加学习和运维成本
- 通过快照、配置备份、自动化重建先覆盖 v0.1 容灾需求
7️⃣ 操作系统:Linux¶
- Ubuntu Server 优先
- Debian 可作为替代
原则:¶
- 禁止 Windows 作为 Worker Node(生产环境)
8️⃣ 为什么不选 Kubernetes?¶
- 过度复杂(Control Plane 太重)
- 学习成本高
- 不适合个人/轻量 AI Mesh
- 维护成本过高
9️⃣ 为什么不自研调度系统?¶
- 调度系统复杂度极高
- Nomad 已成熟稳定
- 避免重复造轮子
9.5️⃣ v0.1 技术决策记录¶
当前阶段的技术决策直接写入本技术选型文档,不单独新增 ADR 文件。
决策一:选择 Nomad 而不是 Kubernetes¶
- 原因:v0.1 目标是先跑通个人级资源池,Kubernetes 控制面过重,学习和维护成本高。
- 影响:Nomad 负责任务放置、节点调度、资源管理和生命周期管理。
- 重新评估条件:v1.0 后如果必须依赖 Kubernetes 生态或复杂多租户能力,再重新评估。
决策二:选择 Tailscale 作为私有网络¶
- 原因:节点可能分布在 VPS、家庭网络和本地机器后方,需要 NAT 穿透和动态加入。
- 影响:Tailscale 客户端负责节点互联、Tailnet IP 和接入简化,Headscale 负责自托管控制面、节点注册和网络协调。
- 安全边界:Tailnet 可达不等于已授权,内部 API 和节点注册仍必须认证。
- 自托管边界:默认禁止依赖 Tailscale 官方控制面;临时例外必须记录原因、期限和迁移路径。
决策三:S3 + Metadata Store 状态模型¶
- 原因:S3 适合对象数据,但任务、节点、租约、心跳、Token、审计事件和 AI 记忆索引需要结构化元数据。
- 影响:对象数据走 S3 Compatible API;控制面元数据允许进入 Metadata Store。
- 边界:Metadata Store 是控制面内部实现,Compute、Agent、Worker 不得直接访问。
🔟 技术替换原则¶
任何技术替换必须满足:
📌 当前技术栈总结¶
Network → Tailscale Client + Headscale
Scheduler → Nomad
Compute → Docker
Storage → S3 (MinIO)
OS → Linux (Ubuntu / Debian)
Control → VPS
🚀 下一步¶
下一份文档:
06_工程规范.md
- 代码规范
- 目录规范
- 命名规范
- 模块规范
- Agent 编码规范