DynamoDB 全局表工作原理
多账户全局表将 DynamoDB 全局表扩展为完全托管式、无服务器、多区域且具备多活功能的表,可以跨多个 Amazon 账户。多账户全局表跨 Amazon 区域和账户复制数据,提供与同账户全局表相同的双活功能。在您写入任一副本时,DynamoDB 会将数据复制到所有其他副本。
与同账户全局表的主要区别包括:
-
多区域最终一致性(MREC)全局表支持多账户复制。
-
您只能从单区域表开始添加副本。不支持将现有的同账户全局表转换为多账户设置。要进行迁移,您必须先删除现有副本以返回到单区域表,然后再创建新的多账户全局表。
-
每个副本必须位于一个单独的 Amazon 账户中。对于具有 N 个副本的多账户全局表,您必须有 N 个账户。
-
默认情况下,多账户全局表对所有副本使用统一的表设置。所有副本自动共享相同的配置(例如吞吐量模式、TTL 和 PITR),与同账户全局表不同的是,不能覆盖各个副本的这些设置。
-
客户必须在其资源策略中,向 DynamoDB 全局表服务主体提供复制权限。
多账户全局表使用与同账户全局表相同的底层复制技术。表设置会自动复制到所有区域副本,并且客户无法覆盖或自定义各个副本的设置。对于加入到同一个全局表的多个 Amazon 账户,这样可以确保在各个账户之间保持一致的配置和可预测的行为。
DynamoDB 全局表中的设置定义了表的行为方式以及如何跨区域复制数据。这些设置是在创建表或添加新的区域副本时,通过 DynamoDB 控制面板 API 进行配置。
创建多账户全局表时,客户必须为每个区域副本设置 GlobalTableSettingsReplicationMode = ENABLED。这样可以确保在一个区域中所做的配置更改,会自动传播到加入了全局表的所有其他区域。
您可以在表创建之后启用设置复制。这样便能支持如下场景:表最初创建作为单个区域表,后来升级为多账户全局表。
同步的设置
对于多账户全局表,以下表设置始终在所有副本之间同步:
注意
与同账户全局表不同,多账户全局表不允许在各个区域中覆盖这些设置。唯一的例外是,允许对读取自动扩缩策略(表和 GSI)进行覆盖,因为这些是独立的外部资源。
-
容量模式(预置容量或按需)
-
表的预调配读取和写入容量
-
表的读取和写入自动扩缩
-
本地二级索引(LSI)定义
-
全局二级索引(GSI)定义
-
GSI 的预调配读取和写入容量
-
GSI 的读取和写入自动扩缩
-
MREC 模式下的流定义
-
生存时间(TTL)
-
热吞吐量
-
按需最大读取和写入吞吐量
不同步的设置
以下设置不在副本之间同步,必须为每个区域中的每个副本表单独配置。
-
表类
-
服务器端加密(SSE)类型
-
服务器端加密(SSE)KMS 密钥 ID
-
删除保护
-
Kinesis Data Streams(KDSD)
-
标签
-
资源策略
-
表 Cloudwatch-Contributor Insights(CCI)
-
GSI Cloudwatch-Contributor Insights(CCI)
监控
配置为多区域最终一致性(MREC)的全局表会将 ReplicationLatency 指标发布到 CloudWatch。此指标跟踪从一个项目写入到副本表到该项目出现在全局表的另一个副本中之间经过的时间。ReplicationLatency 以毫秒表示,并针对全局表中的每个源区域和目标区域对发出。
典型的 ReplicationLatency 值取决于所选 Amazon 区域之间的距离以及工作负载类型和吞吐量等其它变量。例如,与非洲(开普敦)(af-south-1)区域相比,美国西部(北加利福尼亚)(us-west-1)区域的源副本到美国西部(俄勒冈州)(us-west-2)区域的 ReplicationLatency 更低。
ReplicationLatency 值不断增加可能表明来自一个副本的更新没有及时传播到其它副本表。在这种情况下,可以临时将应用程序的读取和写入活动重定向到不同的 Amazon 区域。
处理多账户全局表中的复制延迟问题
如果由于副本表上客户引发的问题导致 ReplicationLatency 超过 3 小时,DynamoDB 会发送通知,要求客户解决潜在问题。客户引发的可能会阻碍复制的常见问题包括:
-
从副本表的资源策略中移除了所需的权限
-
选择退出托管多账户全局表副本的 Amazon 区域
-
拒绝解密数据所需的表的 Amazon KMS 密钥权限
DynamoDB 会在 3 小时的延长复制延迟时间内发送初始通知,如果问题仍未解决,则会在 20 小时后发送第二份通知。如果问题未在要求的时间窗口内得到纠正,DynamoDB 将自动取消副本与全局表的关联。然后,受影响的副本将转换为区域表。