Criando um cluster de servidor de aplicativos estável e com dimensionamento automático

4

Eu tenho dois servidores, cada um rodando de 50 a 100 webapps legados diferentes, escritos em linguagens que variam de PHP a Python, a Ruby-on-rails a NodeJS.

Estamos querendo matar essas máquinas, pois elas são antigas, inseguras e mal organizadas, não têm lógica de configuração consistente e também executam duas instâncias de mysqld cada (não pergunte).

Para isso, quero fazer o seguinte:

  • Excluir todos os projetos legados que foram depreciados no momento
  • Crie um sandbox para cada aplicativo de alguma forma, possivelmente em seu próprio contêiner Docker ou Passenger
  • Crie os novos servidores como um cluster sem estado com dimensionamento automático, movendo cada banco de dados MySQL para sua própria instância do RDS
  • Possivelmente até conseguir dimensionar automaticamente aplicativos inativos de uma maneira semelhante à que o Heroku faz

Por fim, estou querendo fazer algo semelhante ao que Deis ou Flynn , embora nenhum desses esteja pronto para produção no momento.

Estou sinceramente um pouco confuso com tudo isso e não sei por onde começar. Alguma sugestão? Passenger é algo que eu deveria estar considerando? Docker?

Obrigado!

    
por aendrew 05.09.2014 / 11:46

1 resposta

5

Não sei bem quais são as suas perguntas reais. Sua pergunta geral é bastante vaga. Você tem três perguntas principais aqui a partir do que eu posso reunir:

  1. Onde devo começar a obter minha própria infraestrutura de PaaS escalável?
  2. O Passenger é algo que eu deveria estar considerando?
  3. O Docker é algo que eu deveria estar considerando?

Respondo primeiro ao número 3, já que é mais fácil. A resposta é sim. Se você vai construir algo novo, o Docker ajudará você a entrar em um mundo mais portátil, o que, por sua vez, o ajudará a alcançar um ponto mais escalável. Seus webapps herdados seriam executados como seus próprios contêineres, com seus próprios conjuntos de dependências e, portanto, se tornariam mais portáveis.

A resposta para o número 2 soa mais dependente do Ruby e dos aplicativos Ruby em geral. Você pode executar o passageiro? Talvez ... Isso parece mais dependente de como o aplicativo foi escrito e com quais servidores ele pode ser compatível. No entanto, parece que o Phusion está fazendo avanços para ser muito amigável ao Docker. As imagens do Docker têm especificamente em torno da execução de aplicativos Ruby, Python e Node.js, pelo menos - link .

Minha resposta para o número 1 seria começar colocando em containers aplicativos legados. Torne os aplicativos mais compatíveis com fator doze ( link ) se eles ainda não estiverem. Torne-os mais orientados para o serviço. Em vez de executar coisas como MySQL, Redis, Apache, PHP-FPM, etc. em um contêiner, separe-os em diferentes serviços que se conectam entre TCP e HTTP (os links do Docker seriam um ótimo ponto de partida para isso - link ).

Ao levar seus aplicativos a um ponto em que eles são executados em seu próprio contêiner, usam serviços externos que podem ser executados em qualquer lugar e podem ser versionados com uma configuração de trabalho padrão (uma versão), você está se aproximando de um mundo onde pode então começar a escrever agendamento, descoberta de serviço e implantação de scripts.

Se você ainda não o fez, confira coisas que surgem um pouco antes de um Docker PaaS completo, como link ou link . Algo parecido com isso lhe dá um agendamento em torno de seus próprios contêineres / unidades, em vez de realmente construir seus contêineres de aplicativos para você. Para aprender no desenvolvimento, você pode usar algo como link ou link . Ótimo para testar seus novos contêineres orientados a serviços localmente.

Para mais ferramentas em torno do Docker, fique de olho no link . A resposta principal tem uma boa visão geral do que está atualmente fora deles e o autor o mantém atualizado razoavelmente bem.

    
por 07.09.2014 / 04:33