Amazon DynamoDB: 可扩展、性能可预测、完全托管的 NoSQL 数据库服务
https://www.usenix.org/conference/atc22/presentation/elhemali
A Scalable, Predictably Performant, and Fully Managed NoSQL Database Service
Amazon DynamoDB is a NoSQL cloud database service that supports fast and predictable performance at any scale.
DynamoDB 提供了
- 普通表的可用性服务等级协议(SLA)为99.99%,不可用时间约为 52.6 分钟。
全球表的 SLA 则高达99.999%(5.26 分钟)。
- 全球表允许跨多个AWS区域在多张表之间进行复制,从而实现了更高级别的数据可靠性与可用性保障。
- 1年 = 365天 = 8760小时
- 99.9 = 8760 * 0.1% = 8760 * 0.001 = 8.76小时
- 99.99 = 8760 * 0.0001 = 0.876小时 = 0.876 * 60 = 52.6分钟
- 99.999 = 8760 * 0.00001 = 0.0876小时 = 0.0876 * 60 = 5.26分钟
架构
- 采用表模型,每行有一个主键,由分区键 + 排序键,同时支持二级索引。
- 为了处理表的吞吐量和存储需求,DynamoDB表被划分为多个分区。每一分区承载着表中键范围的一个不相交且连续的部分。 通过将表分割成多个分区,可以更高效地管理资源,每个分区能够独立处理其部分数据。这种划分有助于在负载高峰期分散请求,并提高系统的整体性能和可靠性。各分区负责存储和访问特定的键范围内的数据,这样可以在读取和写入操作时并行处理这些数据段,从而优化了查询速度和系统响应时间。
在全局表的吞吐量改变或其分区被拆分为子分区时,会调整分配给分区的吞吐量。
- 当一个分区因大小原因被拆分时,父分区已分配的吞吐量会均匀地分配到子分区中。
如果一个分区是因吞吐量的原因而被拆分,则新的子分区将根据表预先配置的吞吐量进行分配。
举例来说,假设一个分区能够容纳最大为1000个WCUs(Write Capacity Units)或Read Capacity Units)。
- 当一个表在创建时分配了3200 WCUs时,DynamoDB会创建四个分区,每个分区将被分配800 WCUs。
- 如果表的预配置吞吐量增加到3600 WCUs,则每个分区的能力将会增加至900 WCUs。
- 若表的预配置吞吐量增加到了6000 WCUs,则原来的分区会被拆分为八个子分区,每个子分区将分配750 WCUs。
- 相反,如果表的容量被降低到5000 WCUs,则每个分区的能力会相应减少至675 WCUs。
吞吐量在分区间均匀分布依赖于这样的假设:应用能够等概率地访问表中的键,并且对大小的切分能将性能平均分配到各个分区上。然而我们发现,实际应用工作负载通常在其随时间变化的行为以及对于不同键范围的访问模式方面是不均匀的。怎么解决?
- Bursting
- Adaptive capacity