复制时EhCache脏更新

时间:2016-03-13 20:15:20

标签: java multithreading replication ehcache

我正在使用EhCache的RMI同步复制来跨4个托管服务器复制缓存。

我无法解决如何处理以下情况 - 假设我的节点1已收到缓存中存在的现有元素(google=$100)的更新(允许说google),因此它会更新服务器缓存中的元素并开始跨节点2,3和4进行复制。现在,在复制可以从节点3开始或到达之前,节点3接收到同一元素的另一个更新google=$103。因此,node3更新其服务器缓存并开始跨其他节点(node1,2和4)进行复制。现在,由于EhCache使用读写锁定,因此即使节点1(对于google=$100)启动的复制到达节点3 ,它将等待google=$103更新在node3完成,然后google=$100将在节点3复制。

因此,基本上节点3最终会出现脏更新,因为最新值为google=$103,但它将保留google=$100

我的猜测是这个问题只会出现在节点3(或任何已经收到同一元素的另一个更新的节点,然后才能在所有节点上复制最后一次更新),因为对于节点2和节点4,将复制第一个google=$100,然后复制google=$103,以便它们保存最新的值/更新。

我读过EhCache的BlockingCacheSelfPopulatingCache,但它也没有解决这个问题。

有人对此有任何想法或遇到过这个问题吗?

1 个答案:

答案 0 :(得分:0)

您面临的问题是分布式系统的一致性。

Ehcache复制完全没有回答这个问题,而且比你描述的情况更多的是情况。

如果您需要适当的一致性,则需要转移到群集,这可以通过Terracotta实现。

注意:我在Ehcache和Terracotta工作。