我正在使用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的BlockingCache
和SelfPopulatingCache
,但它也没有解决这个问题。
有人对此有任何想法或遇到过这个问题吗?
答案 0 :(得分:0)
您面临的问题是分布式系统的一致性。
Ehcache复制完全没有回答这个问题,而且比你描述的情况更多的是情况。
如果您需要适当的一致性,则需要转移到群集,这可以通过Terracotta实现。
注意:我在Ehcache和Terracotta工作。