发布于: Oct 28, 2022

在许多应用场景以及客户具体实践中,对数据跨区复制的需求是旺盛和迫切的,本文将介绍如何利用 Amazon DynamoDB 流进行跨区域复制。Amazon DynamoDB 流(以下简称流)是 Amazon DynamoDB 表(以下简称表)项目变更信息的有序记录。一条流记录则包含表的单个项目的数据变更信息。流是表的附加特性,可以开启和关闭。开启后,流会按序捕获表数据项的每一次变更。变更信息会储存在日志中最多二十四小时。对于每一次变更,都可以近乎实时地知晓变更前后的新旧数据内容。流有以下两个基本特性:

  • 每条流记录在流中出现且仅出现一次;
  • 对表项目的每一次变更,其对应的流记录出现的顺序与实际变更顺序一致。 

基于流的基本特性,可以搭建许多有趣的应用,例如:

  • 在社交场景下,一个好友发布朋友圈后,他的其他好友即时得到该发布对通知。
  • 表的跨区复制:应用一在甲区域更改某表,应用二在乙区域读取这些更改并写入另一个表。如此,即构建了一个跨区域表复制的机制。本文会就此在中国区域进行探索实践。

上述表的跨区复制技术,进一步推广,可以应用到更多实用场景。例如数据的实时备份。当数据在甲区域更改时,近乎实时地备份到乙区域,提高系统的容灾和高可用能力。譬如当甲区域隔离或降级的时候,方便快速切换到乙区域,确保系统服务不受干扰。
目前(2019年10月)Amazon DynamoDB 在中国区尚不支持全局表。故本文探索的跨区域表复制实践,可以在一定程度上,弥补不足。

本文主要使用 Java 进行跨区域复制的开发,用 Go 进行测试开发进行技术实践。但是其他语言和平台也可以搭建同样的实践,达到同样的效果。
本文探索的跨区域表复制实践仅用于中国境内北京区域和宁夏区域之间。如果用于境内区域和境外区域的数据复制,请确保满足网络安全法针对数据跨境传输的要求。

表和流有不同的终端节点,所以一个典型的复制场景大体上是这样的:
1. 产生数据的应用连接源表的节点,进行更改;
2. 复制器连接源表的流节点读取更改信息;
3. 复制器同时连接目的表的节点,进行更改。
当这两张表在不同的区域时,就可以进行跨区域的表复制了。当然,这两张表也可以位于同一个区域,进行同区域的表复制。需要注意的是,改复制是异步的。

在上面的架构图中,更改源表的数据产生应用即可以在云端,也可以在云下。进行数据复制的复制器,因为承担复制之责,故建议置于云端较好,以便降低网络延迟。此处,复制器即可以选择置于源表,也可以置于目的表的区域。这两种选择在性能上应该是差不多的。

相关文章