java - AWS 多区域 ElastiCache 同步

标签 java amazon-web-services amazon-dynamodb amazon-elasticache

需要有关以下 AWS 特定用例的最佳实践的信息,

  1. 我们的 Java 网络应用部署在 us-east-1 和 us-west-2 区域。
  2. 它与 Dynamo DB 通信,基于 Memcached 的 ElastiCache 位于两个区域的 Dynamo DB 之上。
  3. 我们在 us-east-1 和 us-west-2 之间启用了 Dynamo DB 复制。
  4. Route 53 将 API 调用定向到适当的区域。

现在,问题是当我们在 Dynamo DB 中创建或更新记录时,它会插入到 Dynamo DB 中并缓存在该特定区域中。记录也被复制到 Dynamo DB 的其他区域,但缓存不会保持同步,因为 ElastiCache 之间没有复制。

我们如何以最佳方式解决这个问题?

最佳答案

DAX 不是这里的答案。我很惊讶没有人指出这一点。
Ivan 在这方面的看法是错误的。

DAX 确实是读写缓存,但它不会捕获通过直接访问 DynamoDB 发生的数据更改(很明显),也不会捕获通过“其他”DAX 集群发生的数据更改。

所以在这种情况下,
你有 2 个 DAX 集群,一个在 west-1,一个在 east-1,这两个集群是完全独立的。 因此,如果您通过 DAX 在 west-1 上进行数据更改,则该更改会在 DynamoDB 表级别而不是缓存 (DAX) 级别传播到 east-1 换句话说,如果您更新从两个区域访问过的记录(而不是缓存在两个 DAX 集群中),您仍然会遇到同样的问题。

从根本上说,这是跨区域同步缓存层的问题,这很难。如果你真的需要它,有一些方法可以通过制作你自己的 Kafka 或 Kinesis 流来保持缓存条目的变化并被多区域的缓存集群使用。现在单独使用 elasticache 是不可能的。 (但如果您仅为此任务设置 lambda 或 EC2 是可能的) 结帐case studies from Netflix

关于java - AWS 多区域 ElastiCache 同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45593650/

相关文章:

java - 在 Java 中处理重复的正则表达式组名称(C# 翻译)

java - 如何从代码中扩展 Java 类路径通配符?

amazon-web-services - 本地 DynamoDB

amazon-web-services - 如何处理关系数据库中的AWS IOT流数据

java - 在 GroupLayout 中填充多列

java - 从命令行中传递的文件名获取文件(String[] args)

javascript - RXJS ^5.3.0 与 AWS JS SDK

amazon-web-services - aws ApiGateway 部署到特定阶段

amazon-web-services - dynamoDB(Javascript sdk)的 batchWriteItem 是否已弃用?

node.js - 使用 dynamoose.js 时如何避免将 aws config 设置为外部环境变量