我们目前正在准备 hazelcast,以便在未来几周内上线。还有一个更大的问题困扰着我们的运营部门,如果我们无法解决它,可能会成为一个阻碍。
由于我们正在维护高可用性支付应用程序,因此我们必须在集群不可用的情况下生存。原因可能是:
- 有人弄乱了 hazelcast 配置,集群上的映射不断增加,直到出现 OOM(测试系统上有此情况)。
- 网卡/硬件存在一些问题,导致与集群的连接暂时中断
- OP 人员重新配置了防火墙,并意外阻止了一些必要的端口。
- 随便吧
我花了一些时间寻找好的现有解决方案,但到目前为止唯一的解决方案是增加备份服务器的数量,这当然不能解决问题。
在我当前的测试中,应用程序完全停止工作,因为在某些重试之后,客户端与集群断开连接,并且 hibernate 二级缓存不再工作。由于我们在整个生态系统中使用 hazelcast,这几乎会立即杀死 40 个 Java 客户端。
因此,我想知道当集群关闭时,我们如何才能实现应用程序仍然以较慢的方式运行。我们当前的方法是切换到 ehcache 本地缓存,但我认为应该有 hazelcast 解决方案来解决这个问题?
最佳答案
如果我是你,我会使用 LocalSessionFactoryBean并设置 cacheRegionFactory到一个 Spring Bean,它可以将调用委托(delegate)给 Hazelcast 或 NoCachingRegionFactory ,如果 Hazelcast 服务器关闭。
这是可取的,因为 Hibernate 假定 Cache 实现始终可用,因此您需要提供自己的 CacheRegion 代理来决定运行时的缓存区域路由。
关于java - 如何确保 java 客户端在整个 hazelcast 集群关闭的情况下继续运行 "working",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27857303/