我们有多个Tomcats,每个Tomcats都部署了多个.war文件(= Spring Boot app)。 我们现在需要在tomcat1上的app1和tomcat2上的app1之间进行一些分布式缓存。 tomcat1上的app2(以及tomcat2上的app2)无法看到其他已部署应用程序的Hazelcast缓存,这一点至关重要。
下图显示了这种情况:
Tomcat 1 Tomcat 2
+-----------------------------------+ +-----------------------------------+
| | | |
| app1.war app2.war | | app1.war app2.war |
| +----------+ +----------+ | | +----------+ +----------+ |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| +----+-----+ +----+-----+ | | +----+-----+ +-----+----+ |
| | | | | ^ ^ |
+-----------------------------------+ +-----------------------------------+
| | | |
| | | |
| | | |
| | | |
+--------------------------------------+ |
Shared cache via Hazelcast | |
| |
+---------------------------------------+
Shared cache via Hazelcast
Hazelcast可以实现吗?如果是这样,怎么样? 现在我只通过Hazelcast找到解决共享网络会话的解决方案。但这对我来说似乎不是解决方案,或者我错了?
答案 0 :(得分:1)
如果您的应用程序必须严格隔离,那么您可能需要使用不同的cluster groups。群集组使不同群集可以在同一网络上共存,同时彼此完全无法访问(假设配置正确)。
但是,如果您只需要将应用程序数据分开,那么您可以确保app1
实例使用名称不与app2
缓存名称冲突的缓存。这是最简单的实现。
如果要部署一种多租户环境,在这两个环境中,您在两组应用程序之间具有安全边界,那么使用集群组选项会更好,因为您可以使用密码保护集群,并且应用程序将使用不同的端口进行通信这些群体中的彼此。
答案 1 :(得分:0)
是的,这是可能的。
您可以配置缓存名称。
应用程序app1
使用名为app1
的缓存。应用程序app2
使用名为app2
的缓存。
如果您正确配置它们,那么它们将不会看到每个其他数据。
如果“必需”他们不能表示您的要求比防止意外错误配置更强,那么您需要使用基于角色的安全性。