AWS Dynamodb 和可用区底层架构

Gan*_*ang 0 nosql amazon-dynamodb

我正在学习 AWS Dynamodb。根据AWS文档,它由AWS设置和配置为分布式数据库集群,并且数据库中的数据可以跨AWS区域中的可用区进行故障转移。

我真的很想了解 Dynamodb 和可用区的底层架构。

正如我所想,在可用区中有多个服务器实例(可能是 EC2 实例)作为 DynamoDB 的数据库集群;一个可用区中的 dynamodb 将被复制到一个区域中的所有可用区

欢迎任何想法、讨论或有用的链接。

Nad*_*'El 9

对我来说,你的实际问题是什么有点模糊,但我会尽力回答我认为你问题的核心——“可用区”的作用。我省略了有关 DynamoDB 领导者模型和一致性的大量细节,这与您有关可用区的问题并不真正相关。您可以在许多文档、演示文稿和视频中找到对这些问题和其他问题的解释 - 我最喜欢的之一是https://www.youtube.com/watch?v=yvBR71D0nAQ

不管怎样,DynamoDB 中的每条数据都被复制到三个物理节点(机器)上。DynamoDB 的集群实际上可能有数百个这样的节点(您无法分辨),但每项数据都恰好存储在其中三个节点上。您不知道哪个,但您确实知道的是,同一分区中的两个项目(即具有相同的分区键)保证位于相同的三个节点上 - 这允许操作(“查询”)读取整个分区是高效的,因为它可以从一个节点的磁盘连续读取。

无论如何,这种复制提供了两个主要保证:它提供了持久性- 这意味着如果一个副本丢失,我们仍然有其他副本。它提供高可用性- 这意味着如果一个副本暂时关闭(例如,断电、网络问题等),数据库仍然可以完全运行 - 读取和写入都可以继续进行,而无需等待丢失的副本重新出现。

问题是,如果所有三个副本都位于同一个数据中心内,则灾难可能会同时袭击这三个副本:数据中心发生火灾可能会导致耐久性损失从字面上看,所有三个副本都会化为灰烬)。该数据中心的断电或网络问题可能会导致高可用性丧失。为了解决这个问题,亚马逊在每个地理区域都有几个独立的数据中心,称为“可用区”。这些独立的数据中心位于物理上不同的建筑物中,连接到不同的电网、不同的互联网连接点等,以尽可能保证一场灾难不会影响多个数据中心。数据中心的物理位置使得它们彼此足够近,以便它们之间的网络延迟最小(例如,1ms),但又彼此足够远,以便单一灾难不太可能同时袭击两个数据中心。

DynamoDB 保证每项数据的三个副本不仅最终位于同一可用区(数据中心),而且会转到三个不同的可用区。至少在具有三个或更多可用区的区域中(大多数是这样)。

即使有不同的可用区,一些巨大的灾难仍然可能袭击其中的几个。你可以在电影中找到许多关于此类灾难的想法,包括全面的核战争、外星人入侵、小行星、摧毁整个东海岸的海啸;-)出于这些和其他不那么好莱坞式的原因,亚马逊还为你提供了选择多个地理区域,将您的数据副本放置在完全不同的国家和大陆。但由于这些副本之间的高延迟,复制的工作方式发生了很大变化(查看 DynamoDB 文档中的“全局表”),这确实是一个不同讨论的主题。