ARC 6证明边界并完成毕业项目第 23–26 章

第 24 章 —— 跨集群传播的集合语义

本章目标: 本章完成后,开发者能够为 Register、Lease 和 CRDT 分别描述 federation 的传播、恢复与所有权边界,并拒绝「跨区域 DSM 自动成为全局强一致」的说法。

学习目标

  1. FederationTarget 明确 remote cluster、service 与 locator。
  2. 区分三类集合的 federation 语义。
  3. 理解 relay health 与 binding status。
  4. 识别 in-process baseline 与生产跨区域 transport 的差距。

前置条件

案例进度

履约团队在两个区域运行独立 cluster。route hint 需要跨区可见,shard owner 只能跨区观察,request counter 可以合并。团队不能用一套模糊的「同步策略」覆盖三种不变量。

三类集合穿过同一边界,语义不同

Register、Lease 与 CRDT 的 federation 语义

类型 初始状态 实时变化 补差路径 跨区边界
Register bootstrap 当前可见快照 forward put/remove 周期 digest repair;必要时重新 bootstrap 最终收敛,不是跨区事务
Lease 无 bootstrap forward LeaseSnapshot 无 anti-entropy sweep 远端只读观察,不能 acquire/renew
CRDT 无 bootstrap forward committed delta 无 federation sweep 依赖 delta 可合并、幂等与最终送达

Lease 尤其不能写成「跨区所有权」。owner 与 fencing 的权威域仍在原 cluster;远端 snapshot 适合路由或运维观察,不是外部副作用许可。

Target 是完整身份,不是一个 URL

FederationTargetremoteClusterIdremoteServiceIdremoteLocator 组成。relay 按 cluster/service 找 runtime,再按 locator 找 collection。任何一层配错都应显式失败,不能把同名 collection 当作同一状态。

Health 决定传播信心

binding 状态为 SYNCINGHEALTHYDEGRADEDDISCONNECTED。relay failure 时停止转发;恢复后 Register 触发 catch-up bootstrap。这个状态描述 relay/binding 健康,不代表两地业务事实已经完成全局确认。

当前实现最重要的边界

InMemoryFederationRelay 在一个进程内连接独立 Runtime。它能执行真实 bridge 语义并验证三类集合,却没有 gRPC/HTTP、跨主机链路、身份认证、重试预算或生产延迟。生产 relay 需要实现 bootstrap、put/remove、repair、Lease snapshot 与 CRDT delta,并单独验证第 20–22 章的安全和容量合同。

反例与故障注入

实验

cd submodule/dsm
mvn -q -pl dsm-federation,dsm-integration-test -am \
  -Dtest=InMemoryFederationBridgeTest,FederationIntegrationTest \
  -Dsurefire.failIfNoSpecifiedTests=false test

使用 federation-contract.json 核对每种集合的 bootstrap、live delivery、repair 与 ownership 边界。

实验验收卡

字段 内容
运行命令 federation unit + integration tests;书籍资产测试
输入或故障 bootstrap、live mutation、relay failure/recovery、Lease snapshot、CRDT delta
可观察结果 Register 补差;Lease 只读观察;CRDT 合并;status 随 relay 改变
证据等级 E2/E3:两个独立 Runtime + in-process relay
本实验未证明 真实跨区域 transport、安全、延迟、带宽、完整历史或全局事务

回顾

下一步

第 25 章反过来问:哪些状态不应进入 DSM,以及数据库、缓存、事件日志和共识服务何时更合适。

证据链接