如何确保 java 客户端在整个 hazelcast 集群关闭时继续 "working"

How to ensure java clients continue "working" in case whole hazelcast cluster is down

我们目前正在准备下周上线的 hazelcast。还有一个更大的问题,困扰着我们的 OPs 部门,如果我们无法修复它,它可能会成为阻碍。

由于我们维护的是高可用性支付应用程序,因此我们必须在集群不可用的情况下生存。原因可能是:

  1. 有人搞砸了 hazelcast 配置,集群上的映射增加,直到我们有 OOM(在测试系统上有这个)。
  2. 网络 cards/hardware 存在一些问题,导致与集群的连接暂时中断
  3. 运维人员重新配置了防火墙,不小心阻止了一些必要的端口,无论如何。
  4. 其他什么

我花了一些时间寻找现有的好的解决方案,但到目前为止唯一的解决方案是增加备份服务器的数量,这当然不能解决问题。

在我当前的测试中,应用程序完全停止工作,因为在某些重试之后,客户端与集群断开连接,休眠二级缓存不再工作。由于我们在整个生态系统中使用 hazelcast,这将几乎立即杀死 40 java 个客户端。

因此我想知道当集群关闭时,我们如何才能实现应用程序仍然以当然较慢的方式工作。我们目前的方法是切换到 ehcache 本地缓存,但我认为该问题也应该有 hazelcast 解决方案吗?

如果我是你,我会使用 LocalSessionFactoryBean and set the cacheRegionFactory to a Spring Bean that can delegate a call to either Hazelcast or a NoCachingRegionFactory,如果 Hazelcast 服务器出现故障。

这是可取的,因为 Hibernate 假定 Cache 实现始终可用,因此您需要提供自己的 CacheRegion 代理,它可以在运行时决定缓存区域路由。