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 正常使用

  • 运维简单,问题少

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

相关推荐
城管不管15 小时前
重生——第九次面试2026.8.13某车一面
分布式·ai·面试·职场和发展·rabbitmq
ly768916 小时前
分布式一致性算法详解:从 2PC、3PC 到 Paxos、Raft、ZAB
分布式·算法
珠***格17 小时前
通信链路全打通:西格电力四可装置的 4G/5G + 加密认证技术详解
大数据·数据库·分布式·5g·架构·能源
ACP广源盛1392462567318 小时前
WAIC2026 国产算力浪潮@ACP#YLB3118 在算力矩阵中的存储定位与落地场景
大数据·人工智能·分布式·单片机·嵌入式硬件
蜀道山老天师21 小时前
ZABBIX分布式监控Proxy应用实践
分布式·zabbix
liudashuang201721 小时前
Kafka Producer 隐藏深坑:Sender 线程自阻塞(自死锁)导致 BufferExhaustedException 完整复盘
java·分布式·kafka·linq
rustfs1 天前
GitLab 如何与 RustFS 集成?
分布式·rust·gitlab
Francek Chen1 天前
【大数据处理与分析】数据仓库Hive:02 数据湖
大数据·数据仓库·hive·hadoop·分布式·数据分析
starzy19901 天前
Spark 核心之二次排序、分组取 TopN 优化分析
大数据·分布式·spark
AC赳赳老秦1 天前
官方技术文档聚合实践:用 OpenClaw 批量抓取开源项目文档,构建离线可检索技术知识库
java·运维·服务器·python·信息可视化·deepseek·openclaw