Primeiras coisas primeiro, AWS e Heroku são coisas diferentes. A AWS oferece infraestrutura como serviço ( IaaS ), enquanto o Heroku oferece plataforma como serviço ( PaaS) ).
Qual é a diferença? Aproximadamente, o IaaS fornece os componentes necessários para criar coisas sobre ele; O PaaS oferece um ambiente em que você apenas envia código e algumas configurações básicas e obtém um aplicativo em execução. O IaaS pode oferecer mais poder e flexibilidade, com o custo de ter que criar e manter mais você mesmo.
Para que seu código seja executado na AWS e parecido com uma implantação Heroku, você precisará de algumas instâncias do EC2 - uma camada de balanceador de carga / cache instalada (por exemplo, verniz ), e instâncias executando algo como Passageiro e nginx para veicular seu código, convém implantar e configurar uma instância de banco de dados em cluster de algo como PostgreSQL . Você quer um sistema de implantação com algo como o Capistrano e algo que agregue logs.
Isso não é uma quantidade insignificante de trabalho para configurar e manter. Com o Heroku, o esforço necessário para chegar a esse tipo de estágio talvez seja algumas linhas de código do aplicativo e umgit push
.
Então você está tão longe e deseja ampliar. Ótimo. Você está usando o Puppet para sua implantação do EC2, certo? Portanto, agora você configura seus arquivos Capistrano para ativar / desativar instâncias, conforme necessário; você reajusta sua configuração do Puppet para que o Varnish esteja ciente das instâncias de trabalho na Web e se agrupe automaticamente entre elas. Ou vocêheroku scale web:+5
.
Espero que isso lhe dê uma idéia da comparação entre os dois. Agora, para abordar seus pontos específicos:
Rapidez
Atualmente, o Heroku é executado apenas nas instâncias da AWS nos us-east
eeu-west
. Para você, isso soa como o que você deseja. Para outros, é potencialmente mais uma consideração.
Segurança
Eu já vi muitos servidores de produção mantidos internamente que estão muito atrasados em atualizações de segurança ou geralmente mal montados. Com o Heroku, você tem outra pessoa gerenciando esse tipo de coisa, que é uma bênção ou uma maldição, dependendo de como você olha para isso!
Ao implantar, você está efetivamente entregando seu código diretamente ao Heroku. Isso pode ser um problema para você. O artigo deles sobre Dyno Isolation detalha suas tecnologias de isolamento (parece que vários dynos são executados em instâncias individuais do EC2). Vários colegas expressaram problemas com essas tecnologias e a força de seu isolamento; Infelizmente, não estou em posição de conhecimento / experiência suficiente para comentar, mas minhas implantações atuais do Heroku consideram isso "bom o suficiente". Pode ser um problema para você, eu não sei.
Dimensionamento
Eu toquei em como alguém pode implementar isso na comparação IaaS vs PaaS acima. Aproximadamente, seu aplicativo possui um Procfile
, que possui linhas do formulário dyno_type: command_to_run
, portanto, por exemplo (extraído de http://devcenter.heroku.com/articles/process-model ):
web: bundle exec rails server
worker: bundle exec rake jobs:work
Isto, com um:
heroku scale web:2 worker:10
resultará em você tendo 2 web
dynos e 10worker
dynos em execução. Bom, simples, fácil. Observe que este web
é um tipo de dinamômetro especial, que tem acesso ao mundo exterior e está por trás de seu belo multiplexador de tráfego da Web (provavelmente algum tipo de combinação Varnish / nginx) que direcionará o tráfego de acordo. Seus funcionários provavelmente interagem com uma fila de mensagens para roteamento semelhante, a partir da qual obterão o local por meio de um URL no ambiente.
Eficiência de custos
Muitas pessoas têm muitas opiniões diferentes sobre isso. Atualmente, são US $ 0,05 / hora por uma hora do dinamômetro, em comparação com US $ 0,025 / hora para uma micro instância da AWS ou US $ 0,09 / hora para uma instância pequena da AWS.
A documentação do dyno do Heroku diz que você tem cerca de 512 MB de RAM, portanto, provavelmente não é irracional considerar um dyno como uma micro instância do EC2. Vale o dobro do preço? Quanto você valoriza o seu tempo? A quantidade de tempo e esforço necessários para desenvolver uma oferta de IaaS para chegar a esse padrão definitivamente não é barata. Realmente não posso responder a essa pergunta para você, mas não subestime os 'custos ocultos' de instalação e manutenção.
(Um pouco à parte, mas se eu me conectar a um dinamômetro daqui ( heroku run bash
), uma aparência superficial mostra 4 núcleos /proc/cpuinfo
e 36 GB de RAM - isso me leva a acreditar que estou em uma "Instância Extra Extra Grande de Alta Memória " . A documentação do Heroku dyno diz que cada dyno recebe 512 MB de RAM, então estou potencialmente compartilhando com até 71 outros dynos. (Não tenho dados suficientes sobre a homogeneidade das instâncias da AWS do Heroku, portanto, sua milhagem pode variar))
Como eles se saem contra seus concorrentes?
Receio que não possa realmente ajudá-lo. O único concorrente que realmente olhei foi o Google App Engine - no momento em que eu estava procurando implantar aplicativos Java, e a quantidade de restrições em estruturas e tecnologias utilizáveis era incrivelmente desanimadora. Isso é mais do que "apenas uma coisa de Java" - a quantidade de restrições gerais e considerações necessárias ( o FAQ sugere várias) parecia menos conveniente. Por outro lado, implantar no Heroku tem sido um sonho.
Conclusão
Espero que isso responda às suas perguntas (comente se houver lacunas / outras áreas que você gostaria de abordar). Sinto que devo oferecer minha posição pessoal. Eu amo o Heroku por "implementações rápidas". Quando estou iniciando um aplicativo, e quero uma hospedagem barata (o nível gratuito do Heroku é incrível - essencialmente, se você só precisa de um dinamômetro da web e 5 MB de PostgreSQL, é gratuito para hospedar um aplicativo), o Heroku é a minha posição preferencial . Para "Implantação de produção séria" com vários clientes pagantes, com um contrato de nível de serviço, com tempo dedicado para gastar em operações, etc., não consigo me dedicar tanto ao Heroku e depois à AWS ou nossos próprios servidores têm sido a plataforma de hospedagem de escolha.
Em última análise, é sobre o que funciona melhor para você. Você diz que é "um programador iniciante" - pode ser que o uso do Heroku permita que você se concentre em escrever Ruby, e não precise gastar tempo obtendo todas as outras infra-estruturas ao redor do seu código. Eu definitivamente daria uma chance.
Observe que a AWS realmente possui uma oferta PaaS, Elastic Beanstalk , que suporta Ruby, Node.js, PHP, Python, .NET e Java. Eu acho que geralmente a maioria das pessoas, quando vêem "AWS", pula para coisas como EC2 e S3 e EBS, que são definitivamente ofertas de IaaS