Production Multi Instance - Athenavi/chiron GitHub Wiki
生产使用:多实例(横向扩展)
权威来源:多实例部署(横向扩展) —— 其 §9 是对外承诺,也是差距分析里"可超越"的切口 #1。
为什么这是 Chiron 的独有面
单机 harness 不需要回答"两个副本同时改同一会话会怎样"。Chiron 必须回答, 而且答案要能对外核实(可复现命令 + 期望输出 + 反例)。
靠什么做到
| 机制 | 作用 |
|---|---|
| 每会话 Redis Stream | 事件流;Last-Event-ID 补发 ⇒ 客户端重连不丢不重 |
| 会话运行锁 + 心跳 | 一个会话的 run 归属一个实例;实例死了锁能过期 |
| 跨实例取消 | 广播前先校验会话属主,避免误杀 |
session → 实例归属路由(engine:run:*) |
请求被路由到持有该会话的实例 |
| 写者唯一 | 会话状态的写路径收敛在网关;引擎走 /v1/internal/* |
扩容怎么做
docker compose up -d --scale gateway=2 --scale python-engine=2
能水平扩,是因为上面那些机制都在 —— 不是"无状态所以随便扩": 有状态的部分(会话运行、锁、事件流)被显式放在 Redis 与 PostgreSQL 上。
上线前该验的三件事
- 双实例演练:两个副本同时跑,取消与恢复是否正确(集成用例里有"双进程跨实例演练")。
- kill → 重启演练:实例被杀后,锁过期与会话恢复是否按预期。
- 归属路由:请求是否真的落到持有会话的实例(而不是随机命中)。
还没做的部分
- 文件级回退(rewind):未实现,需迁移。
- 多实例下的子 Agent 归属:已有
affinity.py,但边界仍在收敛中(见 多智能体)。
延伸阅读
本页由仓库内 docs/wiki/ 同步生成(scripts/sync_github_wiki.py)。请不要直接编辑本 wiki —— 改动会下次同步时被覆盖;请改仓库里的对应文件。