需要有关以下AWS特定用例的最佳做法的信息,
现在,问题是当我们在Dynamo DB中创建或更新记录时,它会被插入到Dynamo DB中并在特定区域中进行缓存。记录获取也被复制到其他区域Dynamo DB,但由于ElastiCache之间没有复制,因此缓存不会保持同步。
我们如何以最佳方式解决此问题?
答案 0 :(得分:2)
DAX在这里不是答案。我很惊讶没有人指出这一点。
伊万错了。
DAX确实是一种读写缓存,但是它不能捕获直接访问DynamoDB的数据更改(显然),也不会捕获通过“其他” DAX集群发生的数据更改。
在这种情况下,
您在西1有2个DAX集群,在东1有一个DAX集群,而这两个集群是完全独立的。
因此,如果您通过DAX在west-1上进行数据更改,则该更改确实会传播到 DynamoDB表级别,而不是 cache(DAX)级别
换句话说,如果更新从两个区域访问的记录(而不是在两个DAX群集中缓存的记录),您仍然会遇到相同的问题。
从根本上讲,这是跨不同区域同步缓存层的问题,这非常困难。如果您确实需要它,可以通过一些自己的Kafka或Kinesis流来实现,以保持Cache条目的更改并由多区域中的缓存集群使用。现在仅凭弹性疼痛是不可能的。 (但是,如果仅为此任务设置lambda或EC2,则可以这样做) 结帐case studies from Netflix
答案 1 :(得分:1)
其他建议的一个选项是使用DynamoDB DAX。它是一个直写缓存,这意味着您不需要将数据库数据与缓存同步。当您使用普通的DynamoDB API编写数据时,它会在窗帘后面发生。
但是如果您仍想使用ElastiCache,可以使用DynamoDB Streams。您可以实现一个Lambda函数,该函数将在表中的每个DynamoDB更新中触发,并将新数据写入ElastiCache。
This文章可能会为您提供有关如何执行此操作的一些建议。