Quais são os prós e contras do AWS Elastic Beanstalk em comparação com outras estratégias de implantação?

16

Sou muito novo em toda a pilha e implantações do Netflix OSS em geral. Como pano de fundo para meu atual nível de conhecimento, meu principal papel é como engenheiro de aplicativos front-end. No entanto, gosto do lado das operações, por isso estou tentando configurar uma nova estratégia de implantação e as ferramentas para um novo projeto.

Nossos objetivos

  • Implantações super fáceis (queremos pressionar um botão para atualizar a produção)
  • Implementações automatizadas para testar ambientes (usando o Jenkins)
  • Facilidade de manutenção (temos um aplicativo para escrever, não queremos gastar nosso tempo lidando com problemas de produção)
  • Capacidade de lidar com uma arquitetura orientada a serviços (muitos aplicativos pequenos, vários idiomas e armazenamentos de dados)
  • Suficiente flexibilidade para garantir que não teremos que alterar as estratégias em breve (já estamos tentando fugir do RightScale)

Estamos bem com um pouco mais de tempo de configuração inicial, se isso nos poupar algumas dores de cabeça no futuro.

Então, nesse sentido, eu tenho escutado podcasts, assistido a palestras de Ops, e lido toneladas de postagens de blog e baseado em nossos objetivos e o que eu tomei para formar algumas boas práticas, nós começamos a formar um plano usando Asgard, rolando nosso pacote em uma jarra e rolando isso em uma AMI.

Tivemos tudo isso planejado e gostamos das vantagens do processo versus usar um servidor Chef e instâncias convergentes na hora (achamos que isso era propenso a erros, devido à nossa timeline limitada e à falta de compreensão em torno do fluxo de trabalho do servidor Chef). No entanto, um colega de trabalho deu uma olhada ao redor e achou que o Elastic Beanstalk atendia às nossas necessidades.

Eu examinei e criei um ambiente de teste com um arquivo WAR e um banco de dados RDS anexado. As coisas parecem funcionar e acredito que podemos automatizar implantações em um ambiente de teste usando o Jenkins por meio da API da AWS. Parece bastante simples ... talvez simples demais.

O que eu estou querendo saber é, qual é o truque? Se o Elastic Beanstalk é tão simples e eficaz, por que não se fala mais sobre isso? Estou tendo dificuldades para encontrar opiniões e fatos objetivos suficientes sobre as duas diferentes estratégias de implantação, por isso pensei em perguntar por aí.

Você usa o Elastic Beanstalk? Se sim, por que e quais fatores levam a essa decisão? Do que você gosta e não gosta?

Se você não usa o Elastic Beanstalk, mas o considera, o que você usa e por que você não usa o Elastic Beanstalk?

Quais são as vantagens e desvantagens de uma estratégia de implantação baseada no Elastic Beanstalk para uma SOA? Ou seja, o Elastic Beanstalk funciona bem com muitas pequenas aplicações que dependem umas das outras para funcionar?

    
por James van Dyke 25.06.2013 / 17:28

2 respostas

11

Eu avaliei o Elastic Beanstalk além de outras ofertas da AWS enquanto tentava melhorar nossas instâncias AWS manuais. As razões pelas quais optei por não usá-lo foram devido a complicações que poderiam afetar a migração do meu aplicativo existente e não a própria oferta. O problema é que você não tem tanto controle sobre a implantação / configuração de aplicativos dos servidores. Se você está iniciando um novo aplicativo, pode ser útil não lidar com essas coisas agora, se você tiver um aplicativo existente, será mais difícil se encaixar no modelo do Beanstalk.

O Beanstalk oferece uma oferta semelhante ao Heroku e a outros fornecedores de PaaS, mas não é muito benéfico para aqueles que apenas querem se concentrar em fazer sua inscrição. Você pelo menos consegue determinar os recursos virtualizados em maior grau do que outros fornecedores de PaaS.

Problemas com os meus aplicativos:

  • Implantações baseadas em Git - adoro-as, mas nosso repo é de 1 GB ou mais. Bastante grande para empurrar em uma base regular. Este repositório também contém cerca de 40 aplicativos (que realmente devem ser divididos), mas isso levaria algum tempo. O upload de qualquer tipo de pacote poderia funcionar, mas a maioria dos nossos aplicativos levaria muito trabalho para transformá-lo em um pacote.

  • Integração com outros serviços - Pelo que vi, o Beanstalk presume que qualquer coisa que você esteja conectando é um único serviço. Isso funciona bem se seus serviços estiverem atrasados e ELB, mas nossos nós separados foram atingidos por meio do HAProxy em execução em cada servidor de aplicativos. Se você estiver executando seus datastores e outros serviços como um único endpoint, tudo bem.

Na minha avaliação, também incluí o OpsWorks e o CloudFormation. OpsWorks tem problemas de integração semelhantes com o funcionamento da automação existente para esses aplicativos. O CloudFormation não fez muito mais do que alguns scripts Python e Chef já estavam cuidando de nós.

Acabei optando por usar os Grupos de escalonamento automático da AWS com alguma automação fornecida por Asgard . Essa foi a menor alteração no código de configuração / aplicativo existente e nos forneceu os benefícios que estávamos procurando, o gerenciamento simples de vários servidores disponíveis por meio da API da AWS.

As restrições impostas pelo Elastic Beanstalk à sua inscrição são muito úteis. Você terá que certificar-se de que seu aplicativo é principalmente sem estado, fornece um ponto de extremidade para um serviço e depende de outros serviços para o estado. Se você está tentando fazer serviços autônomos reutilizáveis, vários aplicativos no Beanstalk são um ótimo começo.

Se / quando você chegar ao ponto de querer mais configurações, o OpsWorks será o próximo passo. As funções predefinidas devem facilitar a transição e fornecer uma estrutura de automação em torno do Chef para ajudar a coordenar o provisionamento de vários servidores.

    
por 26.06.2013 / 00:43
0

Eu vejo o ponto de perda de controle, mas não vejo necessariamente a apatridia obrigatória. Tudo o que o eb realmente faz é implementar a automação, que por sinal é incrível. Eu vejo o ponto de um grande repositório. Eu acho que, em geral, separar as funções lógicas do aplicativo em aplicativos de beans separados e, em seguida, ter os ambientes "staging" e "prod" por baixo, é muito bom. Temos módulos de ambientes como o uploader, ele não faz muito e, em teoria, adiciona muitos custos, mas você está usando apenas instâncias menores. Executamos um nginx centralizado e tivemos que gravar muitas alças de mensagens sns personalizadas para notificar o ngnix de alterações na diretiva de escala automática. Outra grande questão é a incapacidade de equilibrar os balanços de carga, já que usamos o ngnix, por quê? elb não suporta websocket.

    
por 22.07.2015 / 18:34