如何通过多个 war Tomcat 共享 Hazelcast 缓存
How to share Hazelcast cache over multi-war Tomcats
我们有多个 Tomcat,每个都有多个 .war 文件(= Spring 启动应用程序)部署在其中。
我们现在需要在 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 谈论共享网络会话的解决方案。但这对我来说似乎不是解决方案,还是我错了?
是的,这是可能的。
您可以配置缓存名称。
应用程序 app1
使用名为 app1
的缓存。应用程序 app2
使用名为 app2
的缓存。
如果您配置正确,那么他们将看不到彼此的数据。
如果“essential”他们不能表示您有比防止意外错误配置更强烈的要求,那么您需要使用基于角色的安全性。
如果您的应用程序必须严格隔离,那么您可能需要使用不同的 cluster groups。集群组使不同的集群可以在同一网络中共存,同时彼此之间完全无法访问(假设配置正确)。
但是,如果您只需要将应用程序数据分开,那么您只需确保 app1
个实例使用名称不与 app2
缓存名称冲突的缓存。这是最简单的实现。
如果您正在部署一种多租户环境,在这种环境中您在两组应用程序之间有安全边界,那么选择集群组选项会更好,因为您可以使用密码保护集群,并且应用程序将使用不同的端口在这些群组中互相交谈。
我们有多个 Tomcat,每个都有多个 .war 文件(= Spring 启动应用程序)部署在其中。 我们现在需要在 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 谈论共享网络会话的解决方案。但这对我来说似乎不是解决方案,还是我错了?
是的,这是可能的。
您可以配置缓存名称。
应用程序 app1
使用名为 app1
的缓存。应用程序 app2
使用名为 app2
的缓存。
如果您配置正确,那么他们将看不到彼此的数据。
如果“essential”他们不能表示您有比防止意外错误配置更强烈的要求,那么您需要使用基于角色的安全性。
如果您的应用程序必须严格隔离,那么您可能需要使用不同的 cluster groups。集群组使不同的集群可以在同一网络中共存,同时彼此之间完全无法访问(假设配置正确)。
但是,如果您只需要将应用程序数据分开,那么您只需确保 app1
个实例使用名称不与 app2
缓存名称冲突的缓存。这是最简单的实现。
如果您正在部署一种多租户环境,在这种环境中您在两组应用程序之间有安全边界,那么选择集群组选项会更好,因为您可以使用密码保护集群,并且应用程序将使用不同的端口在这些群组中互相交谈。