【问题标题】:Get feedback on infinispan asynchronous replication errors获取有关 infinispan 异步复制错误的反馈
【发布时间】:2015-10-08 22:38:54
【问题描述】:

我们有一个 infinispan 设置,其中我们将一些缓存同步复制到集群中的其他节点。当其他节点之一崩溃或超时时,这有时会导致 putInCache 调用出现问题。

缓存更改确实到达其他节点对我们来说很重要,但如果缓存未到达其他节点则发生故障并不重要。

我们不能使用 putAsync,因为缓存 put 的顺序至关重要。

理想的做法是使用异步复制,但要反馈节点接收缓存操作的是哪个节点,以便我们采取行动(例如,刷新故障节点上的缓存)。

有什么方法可以实现吗?

【问题讨论】:

  • 不确定 putAsync 排序如何成为问题。即使你有两个并行的 put,你也不知道哪个会先应用。您想要的是,如果您有 2 个并行放置,例如 P1 和 P2,它们在本地容器中的应用顺序与远程应用的顺序相同。因此,如果 P1 在 P2 之前在本地应用,则可以保证集群范围内的顺序相同。
  • @GalderZamarreño 但是当你有两个顺序调用的 putAsync()s 时,它们可以按其他顺序应用
  • Indeed Flavious,但如果两个 putAsync 之间存在关系,则应将它们链接/流水线以表示该关系。使用 CompletableFutures,您将调用 thenCompose()。使用 NotifyingFutures 会涉及更多,但可以做到。

标签: java caching infinispan


【解决方案1】:

这在 Infinispan 中是不可能的,当一个键被锁定时没有确认,并且在没有先应用它的情况下发出另一个写入是安全的。您可以尝试使用 putIfAbsentAsync/replaceAsync 来保留较新的值,或者使用 8.0 中包含的新 functional API

异步复制(DIST_ASYNC、REPL_ASYNC)也不符合要求:原始节点没有收到来自其他节点的任何确认,因此无法知道写入何时真正完成。更重要的是,通过异步复制获得的顺序是不可靠的:来自不同节点的写入没有顺序,即使来自同一节点的写入也可以在密钥的“主要所有者”发生变化时重新排序。

【讨论】:

  • 不也是一个答案(不幸的是),感谢您的指点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-18
  • 1970-01-01
  • 2019-03-06
  • 2014-08-30
  • 1970-01-01
相关资源
最近更新 更多