Temos 3 aplicativos Ruby on Rails (A, B e C) instalados em vários servidores de aplicativos. Nosso front end é o HAProxy, o backend é o Apache + Phusion Passenger. Originalmente, tínhamos todos os 3 aplicativos Rails instalados em cada servidor de aplicativos, mas essa configuração era lenta porque o HAProxy "não sabe" se um determinado aplicativo Rails está "ativo" em um determinado servidor suportado.
Cadainstânciadepassageiroestáconfiguradaparaexecutaraté8instânciasdeaplicativosRails.
Considereoseguintecenário(simplificado):
- 8solicitaçõessimultâneasparaoaplicativoAentrareoHAProxyenviatodaselasparaoprimeiroservidordeaplicativos,porqueorestanteestá"muito ocupado" com outras solicitações.
- O passageiro inicia 8 instâncias do aplicativo A neste servidor.
- Outra solicitação é enviada para o aplicativo B, que também é enviado ao primeiro servidor de aplicativos, pois outros servidores de aplicativos ainda estão muito ocupados.
- Agora o Passenger precisa encerrar uma das instâncias do aplicativo A e criar uma instância do aplicativo B.
No grande esquema, quando há uma TON das solicitações por minuto, todos os três aplicativos Rails começam e param frequentemente em cada servidor de aplicativos, que é lento .
No mundo perfeito, os aplicativos são iniciados uma vez e processam vários pedidos sem precisar encerrar e relançar. É por isso que tivemos que dividir nossos servidores de aplicativos entre três aplicativos Rails:
- O App A é executado em 13 servidores.
- O aplicativo B é executado em cinco servidores.
- O aplicativo C é executado em dois servidores.
A pergunta: existe um software de balanceamento de carga que está "ciente" do back-end e que conhece e usa as seguintes informações para equilibrar a carga:
- Quantas instâncias de cada aplicativo cada servidor back-end está ativo / ativo?
- Quantas dessas instâncias estão processando solicitações atualmente?
- Qual é o número atual médio de solicitações para um determinado aplicativo por minuto / hora?
- Existe a necessidade de "reduzir" um aplicativo e "aumentar" outro?
A ideia é ter um número de servidores de aplicativos "homogêneos" (com o mesmo) com todos os aplicativos instalados, para que possamos adicionar novos servidores para aumentar a capacidade geral de todos os aplicativos, mas a capacidade de um determinado aplicativo para o balanceador de carga "muito inteligente", que pode controlar a capacidade por aplicativo sem precisar iniciar e parar aplicativos com muita frequência.