在 Tomcat 中水平扩展 Web 应用程序(负载平衡/集群)

在 Tomcat 中水平扩展 Web 应用程序(负载平衡/集群)

我开发了一个由 2 个基本模块组成的简单 REST 风格的 Web 应用程序。

模块#1:服务器公开 REST Web 服务,无状态,部署在 Tomcat 中
模块#2:REST 客户端

有一个 Tomcat 实例,其中部署了 Module#1。

我想水平扩展它并在第二台机器上运行第二个 Tomcat。在负载平衡/集群方面,我完全是个新手,所以我需要帮助。不需要会话复制和故障转移。

我该如何处理它?

我进行了研究,发现以下可能的方法:

1. 没有集群,没有第三方代理。

我在第二台机器上运行第二个 Tomcat。由于我可以控制客户端和服务器,因此我可以在客户端提供一个非常基本的算法并随机选择一个主机,该主机将在 API 调用之前选择。无需配置集群,也无需提供第三方代理。是否存在任何潜在的陷阱?这是一种正确的方法吗?

2.Tomcat集群

说到 Tomcat 集群配置,这是否意味着有 2 个 Tomcat 在不同的机器上运行,并且它们的配置表明它们是一个集群?我是否需要一个单独的库或工具?Tomcat 够用吗?我会像第一种方法一样运行 2 个进程吗?

3. Tomcat 负载均衡器

Tomcat 集群和 Tomcat 负载均衡器之间有什么区别?同样,我是否需要一个单独的库和工具?Tomcat 就够了吗?

4. 第三方代理

我找到了一些关于 HAProxy 的信息。这是否意味着所有调用都通过它,代理决定选择哪个主机?这是否意味着除了两个 Tomcat 进程之外,还会有第三个进程单独运行?假设我在两台独立的机器上安装了 2 个 Tomcat,那么这个代理在哪台机器上运行?

我应该选择哪一个?我误解了什么吗?欢迎提供文章和答案。

答案1

首先,你必须看到这两个选项之间的区别负载均衡(无集群)和具有复制功能的集群

聚类具有正式含义。集群是一组试图实现共同目标并相互了解的资源。集群通常涉及设置资源(通常是服务器)以在特定通道(端口)上交换详细信息并不断交换其状态,因此资源的状态也会在其他地方复制。它通常还包括负载平衡,其中,根据负载平衡策略将请求路由到集群中的某个资源。

集群架构用于解决下列一个或多个问题:

  • 单个服务器无法有效处理大量传入请求
  • 如果服务器发生故障,有状态应用程序需要一种保存会话数据的方法
  • 开发人员需要能够在不停止服务的情况下更改配置或部署其应用程序的更新。

集群架构通过结合负载平衡、多台服务器来处理平衡负载和会话复制来解决这些问题。
您的情况不需要会话复制,因此我认为集群配置不是您需要的方法。

文档Apache Tomcat - 集群/会话复制方法

负载均衡如果我们有多个独立的服务器,这些服务器具有相同的设置,但除此之外,彼此之间并不了解,那么在没有集群的情况下,这种情况也可能发生。然后,我们可以使用负载平衡器将请求转发到一台服务器或其他服务器,但一台服务器不使用另一台服务器的资源。此外,一个资源不会与其他资源共享其状态。

负载均衡器的基本特性是能够根据调度算法将传入的请求分配到集群中的多个后端服务器上。

在这两种架构中,你都需要实现负载均衡器,为此,一个选项是使用Apache HTTP 服务器

tomcat 负载均衡器

要在 Apache Http Server 中实现负载均衡器,您有以下选择:

  • 使用JK native connector
  • 使用 Apache HTTPmod_proxy

参考:

相关内容