使用 hazelcast 缓存部署 tomcat servlet

deploy tomcat servlet with hazelcast caching

我想在使用 hazelcast 缓存的双节点 tomcat 集群上部署一个 servlet。设置如下:

servlet 创建 hazelcast 客户端连接,并访问 hazelcast 中的 IMAP。

我注意到,在某些论坛上,说要在 tomcat 的 contextInitialized() 函数中实例化 hazelcast。因此,只要 tomcat 上下文启动,hazelcast 就会启动; tomcat 上下文被破坏,hazelcast 也将被破坏。

我怀疑在 contextInitialized() 函数中实例化 hazelcast 是否会更有效并适合 tomcat-hazelcast 集成?或者如果使用我当前的 java 程序创建 hazelcast,独立于 tomcat 上下文生命周期,实际上没有太大区别?

我目前遇到多个用户访问serlvet网页时,servlet响应时间长的问题。我还使用 IMAP 锁来确保适当的并发过程。所以,想知道如何调整它以获得更好的性能。感谢您的任何建议。

谢谢! 瑞安

我的建议是利用 Hazelcast 客户端的 NearCache 功能,这样您就可以将 Hazelcast 节点与 tomcat 分离。

Hazelcast 集群: 使用 IMap 配置设置一个 Hazelcast 集群并实现一个 MapStore,它应该负责加载具有缓存合格段的 IMap。还可以使用事件处理程序来负责刷新缓存。

Tomcat Servlet 层:在每个 tomcat 服务器上启动 Hazelcast 客户端并在这些客户端上启用 NearCache。一旦 Hazelcast 客户端启动,NearCache 设置将负责从其集群同步内容。 tomcat 实例都将与缓存内容保持同步。

要记住的事情:

  1. HZ 集群中的节点数取决于缓存的大小。建议将最大堆大小保持在 4GB 左右,以避免 GC 开销并根据需要启动尽可能多的节点。
  2. NearCache 将成为 tomcat 容器本身的一部分,因此在启动时分配适当的堆大小 tomcat。
  3. 正确划分地图内容并保持较小的尺寸以避免 I/O 问题,因为在同步期间集群和 tomcat 容器之间会有数据传输。

让我知道这是否适合您的架构并有任何问题。