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

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

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

有一个部署了模块#1的Tomcat实例。

我想水平缩放并在第二台机器上运行第二个Tomcat。 在负载平衡/集群方面,我是一个完全的新手,这就是为什么我需要帮助。 不需要会话复制和故障转移。

我该如何处理呢?

我做了一个研究,这些是我看到的可能的方法:

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

我在第二台机器上运行第二个Tomcat。 既然我可以控制客户端和服务器,我可以在客户端提供一个非常基本的algorithm,随机select一个主机,这个主机将在API调用之前被select。 不需要configuration群集,也不需要提供第三方代理。 有没有潜在的陷阱? 这是一个正确的方法吗?

2. Tomcat集群

说到Tomcat集群configuration,是不是意味着在单独的机器上运行两个Tomcat并且它们的configuration说明它们是集群? 我需要一个单独的库,工具吗? Tomcat足够了吗? 我将有两个进程像第一种方法一样运行吗?

3. Tomcat负载均衡

Tomcat集群和Tomcat负载平衡器之间有什么区别? 再次,我需要一个单独的库,工具吗? Tomcat足够了吗?

4.第三方代理

我发现了一些关于HAProxy的信息。 这是否意味着所有的呼叫都经过了,代理决定select哪个主机? 这是否意味着除了两个Tomcat进程之外,还有第三个将分别运行? 假设我在两台独立的机器上有2个Tomcat,这个代理运行在哪台机器上?

我应该select哪一个? 我误解了什么? 文章,赞赏的答案。

首先,您已经看到两种选项负载均衡 (无群集)和具有复制的群集之间的区别。

聚类具有正式的含义。 一个集群是一组试图达到共同目标的资源,并且彼此都知道。 集群通常包括设置资源(通常是服务器)在特定的通道(端口)上交换细节并不断交换状态,这样资源的状态也会在其他地方复制。 它通常还包括负载均衡,其中根据负载平衡策略将请求路由到群集中的其中一个资源。

集群体系结构用于解决以下一个或多个问题:

  • 单个服务器无法高效地处理大量的传入请求
  • 有状态的应用程序需要一种保存会话数据的方式,如果服务器失败的话
  • 开发人员需要能够进行configuration更改或将更新部署到其应用程序,而不中断服务。

集群体系结构使用负载均衡,多服务器处理均衡负载和会话复制的组合来解决这些问题。
在你的情况是没有必要的会话复制,为此,我认为集群configuration不是你需要的方法。

文档 : Apache Tomcat – 集群/会话复制如何操作

当我们有多个具有相同设置的独立服务器,但是除此之外,彼此不知道的情况下, 负载平衡也可以在没有集群的情况下发生。 然后,我们可以使用负载平衡器将请求转发给一个服务器或其他服务器,但是一个服务器不使用其他服务器的资源。 另外,一个资源不会与其他资源共享状态。

负载平衡器的基本特征是能够根据调度algorithm将input请求分布到集群中的多个后端服务器上。

在这两种体系结构中,都需要一些实现负载平衡器的东西,因为这个选项是使用Apache HTTP Server

tomcat负载均衡器

为了在Apache Http Server中实现一个负载均衡器,你可以使用如下的选项:

  • 使用JK native connector
  • 使用Apache HTTP mod_proxy

参考:

  • Apache Tomcat连接器 – 通用的HowTo
  • 使用代理使用ApacheconfigurationTomcat
  • 如何configurationTomcat / JBoss和Apache HTTPD以实现负载平衡和故障转移
  • Tomcat集群 – 一步一步指南