Senior Principal Engineer · Onsite System Design

Capital One 跨 Region 事件处理平台:顺序、重放与故障切换

Senior Principal SD 题目明确跨 Region 事件处理平台;给出事件契约、分区顺序、复制拓扑、消费幂等和故障演练。

题目重点:Senior Principal SD 题目明确跨 Region 事件处理平台;给出事件契约、分区顺序、复制拓扑、消费幂等和故障演练。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 训练版事件由业务主键分区,要求同一 key 内有序,不承诺全局全序。
  • 平台至少两个 Region;先定义写入归属和复制方式,不能假定异步复制满足零数据丢失。

解题路线

  1. 先确认事件生产者/消费者、峰值吞吐、消息大小、保留期、可接受延迟、RPO/RTO 和数据驻留要求,写明需要的顺序/投递语义。
  2. 定义 eventId、key、schemaVersion、occurredAt、producedAt 和幂等业务 ID;生产者持久化后回复,再异步或同步跨 Region 复制,分别说明延迟与故障下丢失界限。
  3. 按 key 分区以保持局部顺序,消费者记录 offset/checkpoint,用 eventId/业务键幂等应用;跨 Region 切换时执行 fencing/epoch,防两个 Region 同时作为主写入而产生冲突。
  4. 重放需要可追溯版本、幂等副作用和事件 schema 演进;死信队列记录不可处理事件,修复后可定点重试。
  5. 建立复制 lag、丢失/重复、消费滞后、分区热点、切换时间与端到端延迟指标,定期做 Region 失效演练。

手动走一遍

训练例:key=A 的事件 e1、e2 顺序写入 Region 1;e2 尚未复制时 Region 1 故障。若采用异步复制,Region 2 可能只见 e1,必须按事先 RPO 处理/恢复,不能声称自动零丢失。重放 e1 时消费者用 eventId 避免重复副作用。

规模与取舍

存储约事件速率×平均大小×保留期×副本数;跨 Region 同步复制增加跨区 RTT,异步复制降低写延迟但会产生复制落后窗口。题目无数值,先用变量估算。

易错点与追问

容易失分的边界

  • 把‘exactly once’当网络不可能重复投递的保证。
  • 未明确全局/每 key 顺序。
  • 故障切换没有 fencing,双主并写。
  • 回放时重复调用外部支付接口。
  • 忽略数据驻留和跨区传输边界。

继续深挖

  • RPO=0 时对延迟与可用性有什么代价?
  • 热点 key 如何扩容同时保序?
  • schema 不兼容如何重放旧事件?
  • 消费端外部副作用如何幂等?
✓已复制微信号!