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 上。

上线前该验的三件事

  1. 双实例演练:两个副本同时跑,取消与恢复是否正确(集成用例里有"双进程跨实例演练")。
  2. kill → 重启演练:实例被杀后,锁过期与会话恢复是否按预期。
  3. 归属路由:请求是否真的落到持有会话的实例(而不是随机命中)。

还没做的部分

  • 文件级回退(rewind):未实现,需迁移。
  • 多实例下的子 Agent 归属:已有 affinity.py,但边界仍在收敛中(见 多智能体)。

延伸阅读


本页由仓库内 docs/wiki/ 同步生成(scripts/sync_github_wiki.py)。请不要直接编辑本 wiki —— 改动会下次同步时被覆盖;请改仓库里的对应文件。