SDE3 / Database Infrastructure · Database Internals

Amazon 数据库引擎设计:写路径、放大与恢复预算

从用户写到日志、索引和持久数据,定义写放大并推导崩溃和扩容路径。

题目重点:从用户写到日志、索引和持久数据,定义写放大并推导崩溃和扩容路径。

题意与假设

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

  • 明确engine级拆存储、写路径、恢复、一致性,讨论写放大和云扩展。未给引擎算法,练习从单分片有序KV或事务页存储选择起点,不把二者混成具体Aurora实现。
  • 先定键/事务范围、写速率、数据量、durability和恢复目标,再选择页更新、日志、buffer与后台整理。所有量级例子是练习预算。

解题路线

  1. 画出接收→校验→冲突控制→记录日志→持久确认→更新可见数据→后台flush/整理。每条边说明失败后由谁恢复,不能只画组件名称。
  2. 写放大定义物理写字节/逻辑用户写字节,日志、索引更新、页重写、整理和复制是否计入需一致口径。读放大和空间放大另列;降低一项可能提高另外两项。
  3. 后台工作需要预算,否则持续写会让flush/整理积压并影响前台尾延迟。根据积压、可用空间和恢复时间给背压/节流,而不是仅加无限buffer。
  4. crash recovery验证已确认写可恢复、未确认写结果可查询、半记录可识别、重复replay不重复副作用。扩容时迁移一个明确key范围,版本/fencing保证旧新owner不同时写,切换前追平日志。

手动走一遍

逻辑100MB/s,若日志100、页/索引重写200、整理300MB/s,口径内物理600MB/s即6倍;再计三副本要按传输/物理写定义另列,不能重复算。恢复需要读取200GB日志时,以1GB/s纯顺序扫描的200s只是下界,页IO与重放还会增加。

规模与取舍

容量预算包含前台写和后台写;100MB/s逻辑不代表盘只需100MB/s。恢复时间约日志扫描+重放IO/CPU,在线扩容受迁移和追增量速率差限制。

易错点与追问

容易失分的边界

  • 不同指标混算得到虚假低写放大。
  • 后台积压无上限,磁盘最终用满。
  • 扩容copy结束即切主,未追平增量且未fence旧writer。

继续深挖

  • 若写入速度大于迁移追平速度,如何保证切换完成?
  • 怎么把RTO约束转为checkpoint频率及日志保留预算?
✓已复制微信号!