Cluster Standby 与多 AZ 高可用设计
备节点是高可用不再与延迟相互拉扯的关键所在。Aeron Premium 的 Cluster Standby 为你提供跨 AZ 韧性、亚分钟级恢复,以及永不阻塞订单簿的快照——而且这一切都无需把 Raft 共识拖拽到多个可用区之间。本页综合阐述其设计思路,并展示每一项特性如何映射到你的延迟与吞吐指标。
三大设计支柱
Section titled “三大设计支柱”Cluster Standby 建立在三项特性之上,每一项都对应解决一个具体的生产痛点。它们协同工作:快速快照让主集群不被阻塞,原地身份切换带来亚分钟级 RTO,跨 AZ 部署提供真正的高可用。
- 快(Fast) —— 快照在备节点上执行,主集群因此从不停止处理。
- 身份切换(Identity switch) —— 备节点原地转换为完整的 Raft 成员,大幅缩短恢复时间。
- 稳(Stable) —— 备节点可运行在不同的可用区,提供真正的跨 AZ 韧性,同时避免在热路径上承担跨 AZ Raft 复制的延迟代价。
备节点是温备(warm),而非冷备。它会处理每一条消息以维护状态——而不仅仅是存储数据。
快:快照只在备节点上执行
Section titled “快:快照只在备节点上执行”在 OSS Aeron 中,快照是热路径延迟的隐形杀手。Leader 必须暂停以序列化其全部内存状态,在此暂停期间订单处理速度跌至零——这是一次彻底的 stop-the-world 事件。
没有 Cluster Standby(OSS)
Section titled “没有 Cluster Standby(OSS)”订单处理速度 (Order Processing Speed) ████████████████░░░░░░████████████████ ↑ Snapshot window: Processing speed drops to ZERO while leader takes snapshot- Leader 节点必须暂停以序列化其全部内存状态。
- 在快照期间,订单处理速度 = 0 —— 一次彻底的 stop-the-world 事件。
- 集群运行 3 个节点,每个节点都有自己的 archive,全部参与 Raft。
有 Cluster Standby(Premium)
Section titled “有 Cluster Standby(Premium)”订单处理速度 (Order Processing Speed) ████████████████████████████████████████ (no interruption — snapshot happens on standby)- 快照在备节点上执行,而非 Leader。
- 主集群从不为快照而暂停。
- 备节点处理每一条消息以维护状态,然后独立地执行快照。
- 在备节点上执行的快照会回传给活跃集群。
身份切换:备节点原地转换为 Raft 成员
Section titled “身份切换:备节点原地转换为 Raft 成员”当某个节点发生故障时,备节点并不会启动一个新实例。它会从备节点原地转换为完整的 Raft 共识成员。由于它一直在处理每一条消息,状态早已驻留在内存中——这次切换本质上只是翻转一个标志位,而不是重建状态。
没有 Cluster Standby —— 恢复时间 > 5 分钟
Section titled “没有 Cluster Standby —— 恢复时间 > 5 分钟”在 OSS Aeron 中,当某个节点发生故障时:
- 开启新EC2 —— 启动一个新的 EC2 实例(取决于该 AZ 的库存)。
- 向新Leader拿最新Snapshot —— 从新 Leader 获取最新快照。
- 追最新的logs —— 重放日志以追平进度。
- 加入成为Member —— 作为集群成员加入。
恢复时间:> 5 分钟 —— 而且取决于该 AZ 是否有可用实例。
有 Cluster Standby —— 恢复时间 < 1 分钟
Section titled “有 Cluster Standby —— 恢复时间 < 1 分钟”在使用 Premium Standby 时,当某个节点发生故障时:
- 备节点通过指令成为新Member节点 —— 备节点收到指令以转为成员节点。
- 追最新的logs —— 追平最新日志(由于备节点已是温备,工作量极小)。
- 加入成为Member —— 作为成员加入。
- StandBy节点打快照 —— 备节点执行快照(后台进行,不阻塞)。
恢复时间:< 1 分钟。
稳:跨 AZ 热备
Section titled “稳:跨 AZ 热备”接下来这部分正是保护延迟的关键。备节点在不同的可用区中组成一个独立的备份集群,通过日志复制与主集群相连。你由此获得跨 AZ 高可用,却无需为每一次 Raft 提交支付跨 AZ 往返开销——因为 Raft 法定多数(quorum)始终保持在同一个 AZ 之内。
| 指标 | 数值 |
|---|---|
| RTO | < 60 秒 |
| RPO | < 跨 AZ / 跨区域延迟(通常为个位数毫秒) |
Cluster Standby 远不止是一个故障切换技巧。它的核心特性开启了多个截然不同的生产用例。
- 温备节点 —— 它们处理每一条消息,但不参与 Raft 共识。
- 无需同步复制 —— 因此备节点不会对 Leader 施加任何反压(back-pressure)。正是这一点,使得主集群的吞吐量与尾延迟不受备节点的影响。
跨数据中心复制
Section titled “跨数据中心复制”- 灾难恢复 —— 在另一个数据中心或区域运行一个备份集群。
- 可级联(Daisy chainable) —— 一个备节点可以继续向更远的备份集群复制:DC1 → DC2 → DC3。
- 快照在备节点上执行,并回传给活跃集群。
- 活跃集群从不为快照而暂停。
- 备节点可以承接读查询,而不增加 Leader 的负载。
- 状态接近实时,受复制延迟所限。
- 加入现有集群以替换故障节点 —— 一个命令行工具可将 Standby Node 转换为 Member Node。
- 滚动升级 —— 加入一个运行新软件版本的备节点,再下线旧节点。
这些旋钮如何改变你的指标
Section titled “这些旋钮如何改变你的指标”Cluster Standby 从根本上是一项延迟保护特性。这些收益可以直接映射:
- p99 / max 延迟 —— 把快照从 Leader 上移走,消除了那种本会让尾延迟飙升的周期性 stop-the-world 暂停。将 Raft 法定多数保留在同一个 AZ 内,避免了给每次提交叠加跨 AZ 往返。
- 吞吐量 —— 备节点复制是异步的,因此不会对 Leader 施加反压。主集群以其同 AZ 法定多数所允许的最快速度提交,无论备节点距离多远、级联链有多少跳。
- p50 —— 出于同样的原因保持紧凑:没有任何法定多数成员跨越 AZ 边界,因此中位提交路径走的就是快速的同 AZ 路径。
简而言之:你获得了跨 AZ 高可用、< 60 秒 RTO 以及个位数毫秒级 RPO,而你的热路径运行起来就仿佛根本不存在备节点一样。