Active-Active跨区域Redis复制

Active -Active Cross-Region Redis Replication

AWS 今年为主动 - 被动 设置(Global DataStore)引入了跨区域复制。这意味着有一个用于 Read/Write 的主 Redis 集群和一个用于读取的辅助集群。

在我的例子中,我们想在不同的地区使用Active - Active Redis。最初的想法是手动将 Redis 集群与 Kinesis 流同步,只要有写入和更新其他区域,就会触发 Lambda 函数,例如当在区域 A 中发生写入时,Lambda 会更新区域 B 中的 Redis,反之亦然。这允许在两个区域中写入。

是否可以让 Active Active 与 Global Datastore 一起工作?

或者当写入操作始终转到部署主 Redis 集群的同一区域时,全局数据存储是否会像手动解决方案一样工作(在延迟方面) ??

欢迎任何反馈

遗憾的是,目前 ElastiCache 中没有用于 master-master 的 AWS 解决方案

以下是您可以采取的一些解决方案:

  • 在您的应用程序中使用 Redis 的写入端点和读取端点,写入端点将以主要写入全局数据存储为目标,读取将以本地读取数据存储为目标
  • 写入本地区域资源(例如 DynamoDB),使用 Lambda 触发器并写入主要写入全局数据存储。
  • 写入本地区域 queue/stream,例如 SQS 或 Kinesis Data Streams(支持 Lambda 消费者)并让 Lambda 消费和写入。

任何解决方案之间都会有一定程度的延迟,选项 1 直接写入,而其他 2 允许进程在后台发生。这里的决定将基于您的应用程序(它可以等待写入完成,还是需要在流程中发生)。

此外,如果这是为了写入缓存,您可以只使用缓存启动吗?我的意思是通过脚本生成扁平缓存以确保您的 redis 集群始终是最新的。

如何连接同一个传输 VPC 中的不同区域,以便您可以从任何(连接的)区域访问 read/write 端点?

https://docs.aws.amazon.com/AmazonElastiCache/latest/mem-ug/elasticache-vpc-accessing.html#elasticache-vpc-accessing-different-vpc-different-region

尚未测试,我目前正在尝试实现此功能,但来自 AWS 控制台的相应 CloudFormation 模板已损坏。

然而,该解决方案仍然可以解决问题,当然有一个可以接受的滞后,但至少不应该有额外的工作来维护本地区域资源、Lambda 等

这听起来怎么样?