第 24 章 —— 跨集群传播的集合语义
本章目标: 本章完成后,开发者能够为 Register、Lease 和 CRDT 分别描述 federation 的传播、恢复与所有权边界,并拒绝「跨区域 DSM 自动成为全局强一致」的说法。
学习目标
- 用
FederationTarget明确 remote cluster、service 与 locator。 - 区分三类集合的 federation 语义。
- 理解 relay health 与 binding status。
- 识别 in-process baseline 与生产跨区域 transport 的差距。
前置条件
- 已完成第 9 章集合选型、第 12 章 repair 和第 20 章安全门。
- 理解 cluster 内复制与 federation 是不同故障域。
- 已接受跨集群链路需要独立安全、容量和恢复验证。
案例进度
履约团队在两个区域运行独立 cluster。route hint 需要跨区可见,shard owner 只能跨区观察,request counter 可以合并。团队不能用一套模糊的「同步策略」覆盖三种不变量。
三类集合穿过同一边界,语义不同
| 类型 | 初始状态 | 实时变化 | 补差路径 | 跨区边界 |
|---|---|---|---|---|
| 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
FederationTarget 由
remoteClusterId、remoteServiceId 和
remoteLocator 组成。relay 按 cluster/service 找
runtime,再按 locator 找
collection。任何一层配错都应显式失败,不能把同名 collection
当作同一状态。
Health 决定传播信心
binding 状态为
SYNCING、HEALTHY、DEGRADED 或
DISCONNECTED。relay failure 时停止转发;恢复后 Register
触发 catch-up bootstrap。这个状态描述 relay/binding
健康,不代表两地业务事实已经完成全局确认。
当前实现最重要的边界
InMemoryFederationRelay 在一个进程内连接独立
Runtime。它能执行真实 bridge 语义并验证三类集合,却没有
gRPC/HTTP、跨主机链路、身份认证、重试预算或生产延迟。生产 relay 需要实现
bootstrap、put/remove、repair、Lease snapshot 与 CRDT
delta,并单独验证第 20–22 章的安全和容量合同。
反例与故障注入
- 将 target 的 serviceId 写错,确认找不到 remote runtime/collection。
- 在 relay failed 时写 Register,恢复后确认排队或 bootstrap 补齐。
- 尝试从远端 snapshot 推断 Lease acquire 权限,指出违反只读边界。
- 丢弃 CRDT delta,说明当前 federation 无 CRDT anti-entropy,不能假定自动补齐。
实验
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、安全、延迟、带宽、完整历史或全局事务 |
回顾
- Federation 是跨故障域复制合同,不是把 cluster 拉长。
- Register、Lease、CRDT 需要保留各自语义。
- remote target 身份包含 cluster、service 和 locator。
- 当前 relay 是可执行基线,不是生产网络实现。
下一步
第 25 章反过来问:哪些状态不应进入 DSM,以及数据库、缓存、事件日志和共识服务何时更合适。