可预测性优先于绝对效率
DynamoDB采用元数据缓存降低延迟,但原始设计中路由缓存存在双峰问题:99.75%命中率下,0.25%的缓存失效会导致元数据表瞬时流量激增400倍。团队通过两项改进实现行为可预测性:
- 构建MemDS内存数据库,集中存储压缩版路由元数据并水平扩展
- 改造本地缓存机制,所有请求(包括命中)均异步转发至MemDS,保持后端负载恒定
基于流量模式的分区优化
早期版本按数据量均匀分配计算资源导致两大问题:
- 热点分区:非均匀访问使部分分区过载
- 吞吐量稀释:分裂后的分区因键值过少迅速耗尽容量
解决方案演进:
- 临时突发容量:利用节点闲置吞吐吸收短期流量峰值
- 自适应容量:监控流量并动态重组分区布局
- 全局准入控制(GAC):采用令牌桶算法,请求路由器定期补充令牌,分区级额外防护
持续验证机制
为确保数据持久性,系统实施多层验证:
- 擦除过程(scrub):对比在线副本与离线参考副本的校验和
- 日志复制:节点故障时快速添加仅含最新日志的轻量副本(数秒完成),相比完整B树复制(数分钟)大幅缩短恢复时间
高可用性实践
- 多维度测试:包括节点断电模拟、机架级故障演练
- 双轨监控:
- 服务端指标跟踪
- 客户端视角测量(内部服务指标+跨可用区哨兵应用)
- 读写差异处理:
- 写操作依赖Paxos协议保障三副本一致性
- 读操作允许最终一致性副本响应
架构图中关键组件:
- 请求路由器集群
- 分区元数据系统
- 跨可用区存储节点部署
- MemDS服务层