目前我们在 4 个不同的 tomcat 实例上部署了相同的 Web 应用程序,每个实例都在独立的机器上运行。负载均衡器将请求分发到这些服务器。我们的 Web 应用程序进行数据库调用,维护缓存(键值对)。所有 tomcat 实例都从同一数据源(另一台服务器)读取相同的数据(XML)并将其提供给客户端。将来,我们计划从请求中收集一些使用数据,将其处理并存储在数据库中。此功能应该在所有 tomcat 服务器之间通用(一个模块)。
现在想到用tomcat集群。我做了一些研究,但我无法弄清楚如何分离数据获取操作,即从相同的数据源(另一台服务器)读取相同的数据(XML)部分与所有使其通用的 tomcat Web 应用程序。因此,一旦一台服务器从服务器获取数据,它将对其进行维护(可能在缓存中),并且其他服务器可以使用相同的数据来为客户端提供服务。现在可以使用分布式缓存来实现此功能。但是还有其他模块可以在所有其他 tomcat 实例中通用。
所以基本上,使用 Tomcat 集群有什么优势吗?如果是,那么我如何实现所有 tomcat 服务器通用的模块。最佳答案
阅读 Tomcat configuration reference和 clustering guide .可用的聚类功能如下:
The tomcat cluster implementation provides session replication, context attribute replication and cluster wide WAR file deployment.
因此,通过聚类,您将获得:
- 高可用性:当一个节点出现故障时,另一个节点将能够接管而不会失去对数据的访问权限。例如,仍然可以在用户没有注意到错误的情况下处理 HTTP session 。
- 场部署:您可以将.war 部署到单个节点,其余的将自动同步。
成本主要在性能方面:
- 复制意味着节点之间的对象序列化。这在某些情况下可能是不希望的,但也有可能 fine tune .
如果您只想在节点之间共享一些状态,那么您根本不需要集群(除非您要使用上下文或 session 复制)。只需使用数据库和/或分布式缓存模型,如 ehcache(或其他任何东西)。
关于java - Tomcat集群的优缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15484333/