Dimensionando um aplicativo da web horizontalmente no Tomcat (balanceamento de carga / clustering)

2

Eu desenvolvo um aplicativo da Web simples no estilo REST que consiste em 2 módulos básicos.

Módulo nº 1 : servidor expondo os serviços web REST, sem estado, implantado no Tomcat
Módulo nº 2 : cliente REST

Há uma instância do Tomcat com o Módulo nº 1 implantado.

Eu gostaria de escalá-lo horizontalmente e executar o segundo Tomcat na segunda máquina. Eu sou um novato completo quando se trata de balanceamento de carga / cluster é por isso que eu preciso de ajuda. Não há necessidade de replicação de sessão e failover.

Como devo abordar isso?

Eu fiz uma pesquisa e estas são as possíveis abordagens que vejo:

1. Sem cluster, sem proxy de terceiros.

Eu corro o segundo Tomcat na segunda máquina. Como tenho controle sobre o cliente e o servidor, posso fornecer um algoritmo básico no lado do cliente e escolher aleatoriamente um host, que seria escolhido antes da chamada da API. Não haveria necessidade de configurar o cluster nem de fornecer um proxy de terceiros. Há alguma armadilha em potencial? É uma abordagem correta?

2. Cluster do Tomcat

Quando se trata da configuração do cluster do Tomcat, significa que há 2 Tomcats sendo executados em máquinas separadas e sua configuração diz que eles são um cluster? Preciso de uma biblioteca separada, ferramenta para isso? Tomcat é o suficiente? Terei 2 processos em execução como na primeira abordagem?

3. Balanceador de carga do Tomcat

Quais são as diferenças entre o cluster do Tomcat e o balanceador de carga do Tomcat? Mais uma vez, preciso de uma biblioteca separada, ferramenta para isso? Tomcat é suficiente?

4. Proxy de terceiros

Encontrei algumas informações sobre coisas como o HAProxy. Isso significa que todas as chamadas passam por ele e o proxy decide qual host escolher? Isso significa que, além dos dois processos do Tomcat, haverá um terceiro funcionando separadamente? Em qual máquina este proxy está rodando supondo que eu tenha 2 Tomcats em duas máquinas separadas?

Qual devo escolher? Eu estou entendendo mal alguma coisa? Artigos, respostas apreciadas.

    
por MrKiller21 15.10.2014 / 22:06

1 resposta

3

Primeiro, você verá as diferenças entre as duas opções balanceamento de carga (sem cluster) e Cluster com replicação .

Clustering has a formal meaning. A cluster is a group of resources that are trying to achieve a common objective, and are aware of one another. Clustering usually involves setting up the resources (servers usually) to exchange details on a particular channel (port) and keep exchanging their states, so a resource’s state is replicated at other places as well. It usually also includes load balancing, wherein, the request is routed to one of the resources in the cluster as per the load balancing policy.

Uma arquitetura em cluster é usada para resolver um ou mais dos seguintes problemas:

  • Um único servidor não pode lidar com o alto número de solicitações recebidas eficientemente
  • Um aplicativo com estado precisa de uma maneira de preservar os dados da sessão se servidor falha
  • Um desenvolvedor exige a capacidade de fazer alterações na configuração ou implantar atualizações em seus aplicativos sem descontinuar o serviço.

Uma arquitetura em cluster resolve esses problemas usando uma combinação de balanceamento de carga, vários servidores para processar a carga balanceada e replicação de sessão.
No seu caso, não é necessária replicação de sessão, por isso acho que uma configuração de cluster não é a abordagem que você precisa.

Documentação : Apache Tomcat - Clustering / Replicação de Sessão HOW TO

Load balancing can also happen without clustering when we have multiple independent servers that have same setup, but other than that, are unaware of each other. Then, we can use a load balancer to forward requests to either one server or other, but one server does not use the other server’s resources. Also, one resource does not share its state with other resources.

O recurso fundamental de um balanceador de carga é a capacidade de distribuir solicitações recebidas por vários servidores de back-end no cluster, de acordo com um algoritmo de planejamento.

Em ambas as arquiteturas, você precisa de algo que implemente o balanceador de carga. Para isso, a única opção é usar o Servidor HTTP Apache .

ParaimplementarumbalanceadordecarganoApacheHttpServer,vocêtemalgumasopçõescomo:

  • UsandooJKnativeconnector
  • UsandooApacheHTTPmod_proxy

Referência:

por 19.10.2014 / 03:25