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