Continuando o assunto do nosso texto anterior, que tal falarmos mais uma vez de nuvem? Dessa vez, as atenções vão para o modelo PaaS (Platform as a Service), em especial para os serviços Heroku e Elastic Beanstalk (EBS), da Amazon.
Visão Geral
É importante falar logo que ambos os serviços cumprem bem o seu papel e possuem características semelhantes. Talvez o principal ponto seja a arquitetura: o Heroku tem em sua base o Amazon Web Services (AWS), enquanto o Beanstalk faz parte do AWS.
Dessa forma, fazer um comparativo de poder computacional ou armazenamento é desnecessário, já que possuem bases semelhantes.
Nesse sentido, é bom frisar que o objetivo do Heroku não é fazer você se preocupar com infra, mas em trazer sua aplicação e coloca-la no ar de forma rápida e eficiente. Claro, o Beanstalk também tenta facilitar esse caminho, porém dá a flexibilidade de controle em IaaS que alguns projetos podem precisar.
Sobre o Heroku
O PaaS Heroku tem, como acabamos de falar, o principal foco em tornar o deploy da sua aplicação algo rápido e indolor, e isso afeta bastante sua popularidade. Embora não seja tão barato, o Heroku é amado por muitos desenvolvedores e empresas.
Várias características são apontadas para isso, mas a principal delas é a de facilidade de uso. O Heroku é bem intuitivo e tem uma curva de aprendizado pequena, desde o seu setup inicial até a distribuição do app.
Não há todo aquele trabalho árduo de instalar, configurar e monitorar os softwares necessários para seu projeto, especialmente no início. Um simples comando “git push” em seu CLI (Command Line Interface) é o suficiente para montar seu código em um dyno – como uma instância é chamada na plataforma.
Outra vantagem está na fácil integração com serviços de terceiros ofertados pelo Heroku e na variedade destes, como Redis ou MemCacheD. Com apenas um clique, é possível integrar serviços que geralmente demandariam tempo e conhecimento técnico sem dificuldade.
O Heroku também é extremamente escalável, mas isso pode ser visto como uma faca de dois gumes. Se, por um lado, é interessante ter a possibilidade de criar dynos em qualquer momento ou número, é preciso ter o dobro de cuidado ao gerenciá-los.
Esses dynos são “reciclados” constantemente, seja com mudanças de configuração de ambiente ou no próprio código. Não se pode confiar neles para persistência de dados, então o gasto extra com um banco de dados externo é necessário.
Para completar, o Heroku não possibilita acesso SSH a usuários single sign-on (cuja autenticação é necessária uma única vez), além de impor limites na customização dos serviços. Instalar uma versão específica de uma biblioteca ou um serviço como o Ventrilo, por exemplo, pode exigir um esforço muito grande de configuração – quando é possível fazê-lo.
Sobre o Elastic Beanstalk
Embora não seja considerado um “verdadeiro PaaS”, por sua flexibilidade de configurar todo tipo de serviços, o Beanstalk cumpre bem esse papel. A grande diferença é que, embora tenha o mesmo intuito de tirar a preocupação de montar e configurar uma infraestrutura, ele não impede que você brinque um pouco com isso.
Uma das principais vantagens da plataforma é a sua escalabilidade automática, graças ao uso de instâncias EC2 (Elastic Compute Cloud). Assim, sua aplicação pode aumentar ou diminuir o número de instâncias automaticamente, com base em tempo e métricas como uso de CPU ou da banda. O autoscaling também monitora as instâncias, de modo que ele executa uma EC2 substituta quando outra cai, por exemplo.
Outro ponto positivo é o alcance geográfico do serviço. Enquanto o Heroku tem datacenters disponíveis apenas nos Estados Unidos e Europa, os servidores da Amazon estão espalhados por diversas regiões do globo. Ou seja, sua aplicação se comportará da mesma forma em São Paulo ou em Pequim.
No entanto, assim como acontece com seu modelo IaaS, o EBS é simples para começar, mas difícil de dominar. Sua interface não é tão simples quanto a do Heroku e pode demorar um pouco até se acostumar com a arquitetura ou ter que recorrer a tutoriais ou documentação (que são bem completos, diga-se de passagem) para configurar alguns serviços, mas, uma vez familiarizado, não há grandes dificuldades.
A base de dados utilizada também é externa, porém a Amazon oferece como solução uma integração com instâncias do Relational Database Service (RDS). Com ele, é possível adicionar bancos MySQL ou SQL Server durante ou após a criação do ambiente e, uma vez feito isso, ele fica vinculado ao ciclo de vida do ambiente.
Comparação de preços
A diferença dos preços pode ser estranha à primeira vista. Acessar a página do Heroku e ver um custo que pode chegar a 500 dólares por dyno ao mês causa medo, realmente. Especialmente ao lermos que “não há custo adicional” para usar o EBS na página do serviço.
Considerando o valor de 25 dólares oferecido pelo Heroku, não é assim tão caro à primeira vista. Quando usamos a calculadora de preços da AWS, por exemplo, e colocamos a configuração padrão do Beanstalk, o custo mensal sai por US$35.
Por um lado, o pacote do EBS engloba todos os serviços listados anteriormente no preço. Já o Heroku deixa de lado gastos “extras”, como o banco de dados necessário para a persistência de arquivos. Em contrapartida, o Beanstalk pode exigir conhecimento ou experiência seu/de seus funcionários, um custo de tempo que acaba refletido no orçamento.
Ambos contam com um plano gratuito, em que é possível utilizar recursos básicos de cada plataforma sem muitas limitações. Porém, enquanto o Beanstalk oferece essa vantagem por um ano, o Heroku, embora coloque restrições como hibernação após 30 minutos de inatividade, não tem um limite de tempo. Então, se sua aplicação é simples e pouco exigente, vale a pena testar seu desempenho nesta oferta.
Conforme sua aplicação cresce e demanda recursos, é bom avaliar os custos a longo prazo, que tendem a ser menores com o Beanstalk.
Afinal, qual escolher?
Essa questão é difícil de ser respondida de antemão pois ambos os serviços cumprem muito bem o seu papel. Dessa forma, quem dará a resposta para isso será o seu projeto.
Um exemplo forte dessa questão está na linguagem de programação utilizada: ainda que as duas plataformas deem suporte para as principais do mundo web, o Heroku não engloba .NET, por exemplo. Assim, vamos dar recomendações para alguns casos de uso:
- Se a expectativa ou tendência de crescimento do seu app é grande, é uma boa ideia utilizar-se do autoscaling do EBS, assim como a flexibilidade de arquitetura do AWS ajuda a adequar seu bem projeto à infraestrutura. Gerenciar vários dynos pode ser mais complicado que o esperado, além de alguns recursos acabarem subutilizados.
- Para projetos pequenos e novos, ou se o aplicativo precisa ir ao ar o mais rápido possível, o Heroku é excelente. Sua facilidade de uso é essencial e realmente poupa tempo na hora de lançar o seu projeto.
- Apps baseados na metodologia de 12 fatores se encaixam perfeitamente no Heroku, que possui uma relação intrínseca com ela. Apps que exigem uma flexibilização fora desse padrão podem encontrar limitações na plataforma.
A partir disso, uma boa estratégia pode ser construir e manter seu app inicialmente no Heroku e, conforme sua aplicação cresce em escala e tamanho, e os custos começam a ser um problema, migrar para o Elastic Beanstalk. Provavelmente, seu orçamento vai agradecer.