两个tomcat共享缓存并在失败情况下相互支持

时间:2018-02-03 17:00:47

标签: java tomcat caching

请告知我,我对此以下情况感到困惑,可以说有一个客户端将请求发送到Apache服务器。

另一方面,有两个tomcat服务器在集群中的不同端口上并行运行,并且在两个tomcat服务器上都部署了相同的war文件。

现在的问题是,如果客户端将请求发送到apache服务器并且apache服务器将请求发送到第一个tomcat并且写入第一个tomcat缓存然后第一个tomcat在写入后关闭缓存。

然后来自客户端的第二个请求再次进入apache服务器,然后apache服务器将其重定向为两秒tomcat,因为第一个tomcat已关闭,它还将第一个tomcat的缓存发送到第二个tomcat请告知我们如何才能实现这种情况,

目的是即使第一个tomcat发生故障,我也不希望应用程序遭受损失。而且我正在寻找可以在tomcat中发生的最佳聚类,因为我期待来自终端客户端的大量流量

1 个答案:

答案 0 :(得分:0)

查看分布式缓存。他们解决了这种挑战。

选项包括:

  • 的Ehcache /赤土
  • Redis的
  • Memcached的
  • Hazelcast

Bozho's tech blog有一个很好的当前概述。你可能想读它。

<强>更新

您面临的挑战是,缓存数据需要对所有Tomcat实例可用,并且如果在多个Tomcat实例上修改和查询缓存数据,则需要保持一致。

这正是这些分布式缓存提供的内容:

  1. 他们将修改后的数据写入共享存储或将其发送到其他实例,以便在需要时可供其他实例使用。

  2. 它们保持分布式数据的一致性,以便没有Tomcat实例使用过时数据或以破坏一致性的方式修改它。

  3. 分布式缓存通常使用两阶段概念,其中一些数据保存在内存中,一切都保存在磁盘上。

    因此,通过使用分布式cahce,您的第二个Tomcat实例可以在实例发生故障时为第一个实例的客户端提供服务。