需要以下AWS特定用例的最佳实践信息,
现在的问题是,当我们在Dynamo中创建或更新一个记录时,它被插入到Dynamo中,而get的记录被缓存在这个特定的区域中。记录get也复制到其他区域Dynamo,但是由于ElastiCache之间没有复制,所以缓存不能保持同步。
我们如何以最好的方式处理这个问题?
发布于 2017-08-09 15:08:58
与其他建议一样,一个选项是使用DynamoDB DAX。这是一个贯穿式缓存,这意味着您不需要同步数据库数据和您的缓存。当您使用普通的DynamoDB API编写数据时,它会发生在窗帘后面。
但是,如果您想仍然使用ElastiCache,则可以使用DynamoDB流。您可以实现Lambda函数,该函数将在表中的每个DynamoDB更新中触发,并将新数据写入ElastiCache。
这的文章可能会给您一些关于如何做到这一点的想法。
发布于 2018-06-25 02:32:50
DAX不是这里的答案。我很惊讶没有人指出这一点。
伊凡对这件事错了。
DAX确实是读-写缓存,但它不捕获通过直接访问DynamoDB (显然)发生的数据更改,也不捕获通过“其他”DAX集群发生的数据更改。
所以在这种情况下,
你有两个DAX星系团,一个在西,一个在东,这两个簇是完全独立的。因此,如果通过DAX在west-1上进行数据更改,则该更改确实会传播到DynamoDB Table 上的east-1,而不是缓存( DAX )级--换句话说,如果您更新了从这两个区域访问的记录(这比在两个DAX集群中缓存的记录还要多),您仍然会遇到相同的问题。
从根本上讲,这就是跨不同区域同步缓存层的问题,这是相当困难的。如果你真的需要它,有一些方法可以通过创建你自己的卡夫卡或动态流来保持缓存条目的变化,并被多个区域中的缓存集群所消耗。这是不可能的,现在用它自己的弹力缓存。(但如果只为此任务设置lambda或EC2,则是可能的)签出Netflix的案例研究
https://stackoverflow.com/questions/45593650
复制相似问题