使用hazelcast缓存部署tomcat servlet

时间:2016-07-16 08:42:53

标签: tomcat servlets caching hazelcast

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

  • 两个VM。每个都有tomcat7设置。
  • 用于在每个VM上实例化hazelcast的java程序。分布式缓存是在两个VM上创建的,独立于tomcat上下文

servlet创建hazelcast客户端连接,并以hazelcast方式访问IMAP。

我在一些论坛中指出,要在tomcat中的contextInitialized()函数中实例化hazelcast。因此,每当tomcat上下文启动时,hazelcast就会启动; tomcat上下文被破坏,hazelcast也将被破坏。

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

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

谢谢! 莱恩

1 个答案:

答案 0 :(得分:1)

我的建议是利用Hazelcast客户端的NearCache功能,以便您可以从tomcat中分离Hazelcast节点。

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

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

要记住的事情

  1. HZ群集中的节点数取决于缓存的大小。建议将Max Heap大小保持在4GB左右,以避免GC Overheads并根据需要调整尽可能多的节点。
  2. NearCache将成为tomcat容器本身的一部分,因此在启动tomcat时分配适当的堆大小。
  3. 正确分区地图内容并保持小尺寸以避免I / O问题,因为在同步期间将在群集和tomcat容器之间进行数据传输。
  4. 请告诉我这是否适合您的架构并且有任何疑问。