我们有多个 Tomcat,每个都有多个 .war 文件(= Spring Boot 应用程序)部署在其中。 我们现在需要在 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 谈论共享网络 session 的解决方案。但这似乎不是我的解决方案,还是我错了?
最佳答案
如果您的应用程序必须严格隔离,那么您可能需要使用不同的 cluster groups .集群组使不同的集群可以在同一网络中共存,同时彼此之间完全无法访问(假设配置正确)。
但是,如果您只需要将应用程序数据分开,那么您只需确保 app1
实例使用名称不与 app2
缓存冲突的缓存名字。这是最简单的实现。
如果您正在部署一种 Multi-Tenancy 环境,其中两组应用程序之间存在安全边界,那么选择集群组选项会更好,因为您可以使用密码保护集群,并且应用程序将使用不同的端口进行通信在这些组中彼此。
关于spring-boot - 如何在多战 Tomcat 上共享 Hazelcast 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50511049/