问题描述
不同的微服务正在连接到单个hazelcast群集,因为如果缓存因任何一个微服务而损坏,则需要重新启动整个群集,从而影响其他服务,是否有办法防止这种情况发生?
解决方法
如果您具有多个服务的多个实例,则可以将它们设置为在群集中使用不同的存储容器。
即。
因此,数据隔离。每个服务都有自己的数据存储。
服务1实例使用映射“ A ”,并且如果它们以某种方式破坏了它,则使用映射“ B ”的服务B不会受到影响。
然后您可以执行hazelcast.getMap("A").clear()
删除服务A的所有数据,而不会影响服务B。或者,如果可以识别出不良记录,则可以选择删除。
为增强实力,(商业)安全模块增加了基于角色的授权。您可以对其进行设置,以使服务A无法访问服务B的数据(用于读取或读取/写入),从而服务A不会破坏服务方B的数据。
,如果您的微服务主要对地图执行READ操作,则可以考虑使用Near Cache功能。
https://docs.hazelcast.org/docs/4.0.2/manual/html-single/index.html#near-cache
近缓存将为您带来两个好处。
- 由于从客户端的本地内存中提取数据,因此“获取地图上的数据”将更快得多,如果密钥的数据在群集中发生了突变,则本地近缓存无效。
- 如果群集由于某种原因而关闭,客户端将继续从本地内存中获取数据。为了确保即使群集关闭,客户端也能始终响应近缓存的获取,您需要按照此处... https://docs.hazelcast.org/docs/latest-dev/manual/html-single/index.html#non-stop-client 在客户端连接上配置ASYNC模式
除此之外,我将考虑更改您对集群的访问模式,并尽可能尝试使每个微服务具有一个集群以提供真正的隔离。
通常称为“每个服务的数据库” ... https://microservices.io/patterns/data/database-per-service.html
这是Hazelcast在微服务中如此受欢迎的原因之一,与为数据库或NoSQL相比,为每个微服务创建许多集群要容易得多。