OpenClaw做分布式合适吗?

一句话总结

OpenClaw 的架构基因是单实例长驻进程,我们试图把它改造成分布式系统,投入了大量人力验证后发现:这条路能走通,但成本远超预期。


1. 背景与目标

1.1 为什么要搞分布式

OpenClaw 原生是单实例架构------一个进程对应一个用户/一个飞书机器人。在企业级场景下:

  • 多用户需要共享资源(skill、cron等)

  • 高可用需要故障转移(Pod 挂了用户无感)

1.2 目标形态

复制代码
用户 A ─┐ 用户 B ─┼─→ Load Balancer ─→ Pod A / Pod B(共享状态) 用户 C ─┘

任何 Pod 都能接续任何用户的对话,Pod 间状态完全对等。


2. 尝试改了什么(四个核心改造点)

2.1 源码二次开发:Session/Memory 存储上云

改造内容:

  • 将 session-store.json、会话缓存、memory 文件从本地文件系统迁移到云存储

问题:

  • OpenClaw 没有任何外部存储抽象层,所有状态都是 文件 + 进程内内存

  • 打包后的源码(混淆/压缩)可读性极差,改造成本高

2.2 关闭磁盘持久化,Skills 改自建技能市场

改造内容:

  • 关闭 K8s Pod 的磁盘持久化

  • 将原本本地安装的 skill 改为从自建技能市场按需拉取

  • 每次 Pod 重启/部署,从市场重新下载 skill 文件

丢失的能力:

  • ❌ 重启后 workspace 内所有文件丢失

  • ❌ 口头调整的 skill 无法持久化

  • ❌ 安装的 CLI 工具包每次要重装

  • ❌ 临时文件、下载缓存全部清空

问题:

  • 启动时间显著增加(拉取 skill + 安装依赖)

  • 离线/网络抖动场景下部署失败

  • 技能市场本身成为新的单点

2.3 关闭内置 Cron,定时信息外部存储

改造内容:

  • 禁用 OpenClaw 内置的 cron 调度器

  • 将定时任务定义存储到外部(moonserver)

  • 用外部调度器(如 K8s CronJob、外部定时服务)替代

问题:

  • 内置 cron 与 OpenClaw 的 session 上下文深度耦合(systemEvent 注入)

  • 外部调度器无法访问 OpenClaw 的内部会话状态\

2.4 其他文件状态丢失

已知受影响的状态:

  • 飞书 OAuth 授权 token(单实例存储,重启即失效)

  • 用户偏好设置

  • 工具调用结果缓存

  • 梦境/反思等 memory 系统数据

  • HEARTBEAT.md 等运行时状态文件


3. 核心发现:架构基因不匹配

3.1 OpenClaw 的设计假设

复制代码
1 个进程 = 1 个用户 = 1 个飞书机器人 = 1 个完整状态

所有状态都是本地文件 + 进程内内存 ,没有任何外部存储抽象。这不是"没做完",而是设计选择------OpenClaw 从一开始就是为单实例场景设计的。

3.2 我们想要的

复制代码
N 个进程 = N 个用户共享 = 任何 Pod 都能接手 = 状态外部化

这本质上是要把一个单机应用 改造成分布式系统

3.3 根本矛盾

维度 OpenClaw 设计 分布式需求 冲突
状态存储 本地文件系统 全局共享存储 架构层面困难
会话管理 进程内 Map 分布式会话 store 架构层面困难
定时调度 进程内 Timer 集中式调度器 能解但有代价
工具缓存 进程内 LRU 分布式缓存 能解但有代价
OAuth Token 本地加密文件 安全的秘密管理 架构层面困难
Skill 加载 本地文件系统 制品仓库 能解但有代价

4. 投入与产出

4.1 投入的人力/资源

  • 源码分析与逆向工程(打包 JS 的可读性极差)

  • 存储层抽象改造(session、memory、cron、token 多个模块)

  • 自建技能市场(前端 + 后端 + CLI)

  • 外部调度系统搭建

  • 反复的部署验证与问题排查

  • 大量的讨论和方案设计时间

4.2 实际效果

  • ✅ 验证了哪些能做、哪些不能做

  • ✅ 深度理解了 OpenClaw 的内部架构

  • ✅ 技能市场本身是有价值的基础设施

  • ❌ 分布式状态共享效果不理想

  • ❌ 重启后状态丢失问题未完全解决

  • ❌ 系统复杂度显著增加

  • ❌ 运维负担翻倍


5. 关键反思

5.1 分布式的代价被低估了

分布式不是"把文件放到共享存储"那么简单:

  • 一致性:多个 Pod 同时读写同一用户的状态,谁说了算?

  • 延迟:每次状态读写都多一次网络往返,LLM 推理本身已经很慢

  • 复杂度:故障模式指数级增长(网络分区、脑裂、部分失败)

  • 调试:单机调试 vs 分布式调试,完全是两个量级

5.2 验证本身是有价值的

虽然结果不理想,但这次验证明确了:

  1. OpenClaw 跑在 K8s 里,但不能以分布式模式跑

  2. 单实例 + 持久卷是目前最务实的部署方式

  3. 如果真要分布式,需要从 OpenClaw 的架构层开始改,不是应用层能解决的


6. 方向建议

回归单实例 + 持久卷

  • 恢复磁盘持久化,重启不丢状态

  • Skill 装在本地,启动快

  • 内置 cron 正常使用

  • 运维简单,问题少

  • 代价:弹性伸缩能力受限,但对当前规模够用

相关推荐
元拓数智12 小时前
智能分析落地卡壳?先补好「数据关系+语义治理」这层技术基建
大数据·分布式·ai·spark·数据关系·语义治理
GIS数据转换器17 小时前
农村生活污水治理智慧管控平台
大数据·人工智能·分布式·数据分析·生活·智慧城市
beyond阿亮18 小时前
Hermes Agent快速接入 QQ 完整教程|QQ聊天使用AI智能体
人工智能·windows·ai·openclaw·hermes agent
Trouvaille ~19 小时前
【Redis篇】初识 Redis:特性、应用场景与版本演进
数据结构·数据库·redis·分布式·缓存·中间件·持久化
米高梅狮子20 小时前
Ceph 分布式存储 部署
linux·运维·数据库·分布式·ceph·docker·华为云
郭龙_Jack20 小时前
跨境电商 平台 - ERP - 内部子系统 交互方式总图
分布式·教育电商
喝醉酒的小白20 小时前
Kafka 集群应急故障排查手册
分布式·kafka
无籽西瓜a20 小时前
【西瓜带你学Kafka | 第八期】 Kafka的主从同步、消息可靠性、流处理与顺序消费(文含图解)
java·分布式·后端·kafka·消息队列·mq
qqVHU20 小时前
kafka笔记
笔记·分布式·kafka