ΓDocsInteractiveNet

Wire Protocol v1(M4a)

Coordinator ↔ worker。TCP 上的一行一个 JSON(NDJSON),一个连接一个请求。 这是 M4a 的批处理协议;remote wire / cell ownership 的协议在 M4b 另立。

1. 传输

  • TCP;coordinator 主动连接 worker。
  • 请求:一行 UTF-8 JSON + \n。
  • 响应:一行 UTF-8 JSON + \n;随后关闭连接。
  • 超时:coordinator 默认 30s(flow distribute)/ 5s(node ping)。
  • 无 TLS(M4a);生产需 mTLS + token。

2. Request

type Request =
  | { type: "ping"; token?: string }
  | { type: "run"; id: string; token?: string; spec: FlowSpec }
  | { type: "run_chunk"; id: string; token?: string; spec: FlowSpec;
      checkpoint?: Checkpoint; max_steps: u64 }
  | { type: "stats"; token?: string };
  • run.spec:FlowSpec v1(见 specs/flow-spec.md)。
  • id:调用方生成;原样回传,用于关联。

3. Response

type Response =
  | { type: "pong"; worker: string; version: 1 }
  | { type: "result"; id: string; worker: string; result: FlowResult }
  | { type: "chunk"; id: string; worker: string; result: FlowResult;
      checkpoint: Checkpoint; done: boolean }
  | { type: "error"; id?: string; worker: string; error: string }
  | { type: "stats"; worker: string; jobs: u64; failures: u64; uptime_secs: u64 };
  • result:FlowResult(含 steps/state_hash/outputs/ledger/log)。
  • error:鉴权失败、内部错误、非法 spec 等。
  • stats.jobs:已处理 run 请求数;failures:其中 error 数。

4. 鉴权

  • worker 配置 token 后,所有请求必须带相同 token。
  • 缺失/错误 → {"type":"error","error":"unauthorized: bad or missing token"}。
  • M4a 是共享 secret;M4b 换成 capability token + mTLS。

5. 放置与重试

  • coordinator 按 job index 轮询节点:node = nodes[(start + attempt) % len]。
  • 失败(连接错误、超时、remote error)→ 尝试下一个节点,最多 retries 次。
  • 结果按输入顺序返回;JobOutcome.attempts 记录尝试次数。
  • worker 端无状态:每个 run 从 FlowSpec 重新构建 runtime;幂等由调用方/FlowSpec 保证。

checkpointed chunks(M4b)

  • run_chunk:worker 构建 runtime;若有 checkpoint 则 restore_checkpoint,然后最多跑 max_steps 步。
  • 返回 chunk:result + 新 checkpoint + done。
  • coordinator 循环:把上一个 chunk 的 checkpoint 发给下一个 worker(round-robin),直到 done。
  • 失败重试:同一 checkpoint 在另一个 worker 上重跑;不需要从头开始。
  • coordinator 聚合各 chunk 的 result.log,最终 JobOutcome.result.log 是完整 trace。
  • Checkpoint 含 agents/inbox/outputs/ledger/state_hash;worker 恢复后校验 state hash。

6. 限制(M4a)

  • 静态成员:节点列表由 CLI/配置提供;无 gossip/心跳自动发现。
  • 无 remote wire / cell ownership;任务粒度为整个 flow。
  • 无迁移/检查点续跑;失败重试从头跑。
  • 无 TLS/mTLS;只有共享 token。
  • 无背压/租户配额;并发由 coordinator 线程数控制。

7. 版本

  • version: 1(pong.version)。
  • 新增可选字段 → minor;改变语义 → major。
  • 测试:crates/ain-sched/tests/distributed.rs。

在 GitHub 编辑本文