spring-boot - 如何在多战 Tomcat 上共享 Hazelcast 缓存
问题描述
我们有多个 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 谈论共享网络会话的解决方案。但这似乎不是我的解决方案,还是我错了?
解决方案
如果您的应用程序必须严格隔离,那么您可能需要使用不同的集群组。集群组使得不同的集群可以在同一个网络上共存,而彼此之间完全无法访问(假设配置正确)。
但是,如果您只需要将应用程序数据分开,那么您只需确保app1
实例使用名称与缓存名称不冲突的缓存即可app2
。这是最简单的实现。
如果您正在部署一种多租户环境,其中两组应用程序之间存在安全边界,那么选择集群组选项会更好,因为您可以使用密码保护集群,并且应用程序将使用不同的端口相互通信在那些群体中。
推荐阅读
- r - 将数组算法包装到函数中的问题
- spring - 不匹配此类型名称
- android - 如何将我的 dialogFragment 显示为圆角?
- php - 如何在不知道键的情况下读取嵌套数组值?
- javascript - 通过将变量传递给jquery来获取数据而不重新加载
- html - 为什么我的组合框不显示任何内容?
- file - Xamarin.android - 将 .jpg 复制到共享文件夹
- azure - 如何使用 ARM 模板在 Linux 上创建 Azure Functions 使用计划?
- python - 根据最大值的长度从python列出的字典中查找项目?
- android - 是否可以检查(服务器端)是否占用了 laravel-websockets 通道?