题目重点:Senior Principal SD 题目明确跨 Region 事件处理平台;给出事件契约、分区顺序、复制拓扑、消费幂等和故障演练。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 训练版事件由业务主键分区,要求同一 key 内有序,不承诺全局全序。
- 平台至少两个 Region;先定义写入归属和复制方式,不能假定异步复制满足零数据丢失。
解题路线
- 先确认事件生产者/消费者、峰值吞吐、消息大小、保留期、可接受延迟、RPO/RTO 和数据驻留要求,写明需要的顺序/投递语义。
- 定义 eventId、key、schemaVersion、occurredAt、producedAt 和幂等业务 ID;生产者持久化后回复,再异步或同步跨 Region 复制,分别说明延迟与故障下丢失界限。
- 按 key 分区以保持局部顺序,消费者记录 offset/checkpoint,用 eventId/业务键幂等应用;跨 Region 切换时执行 fencing/epoch,防两个 Region 同时作为主写入而产生冲突。
- 重放需要可追溯版本、幂等副作用和事件 schema 演进;死信队列记录不可处理事件,修复后可定点重试。
- 建立复制 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 不兼容如何重放旧事件?
- 消费端外部副作用如何幂等?
