Existe um balanceador de carga com suporte a back-end para Rails / Passenger?

6

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):

  1. 8solicitaçõessimultâneasparaoaplicativoAentrareoHAProxyenviatodaselasparaoprimeiroservidordeaplicativos,porqueorestanteestá"muito ocupado" com outras solicitações.
  2. O passageiro inicia 8 instâncias do aplicativo A neste servidor.
  3. 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.
  4. 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.

    
por Alex Kaushovik 12.06.2013 / 22:58

1 resposta

3

Eu não sei de um.

Estou enfrentando um problema semelhante. No momento, a melhor solução parece ser a criação de uma camada de gerenciamento capaz de rastrear o carregamento nos servidores de aplicativos e pode mexer na configuração do balanceador de carga com base no que está rastreando. No entanto, isso seria uma solução totalmente personalizada e ainda não começamos a escrevê-la.

    
por 12.06.2013 / 23:49