ruby-on-rails - ec2 - pay heroku




Por que as pessoas usam o Heroku quando a AWS está presente? O que distingue Heroku da AWS? (11)

Às vezes, me pergunto por que as pessoas comparam a AWS a Heroku. A AWS é uma IAAS (infraestrutura como serviço), ela fala claramente quão robusto e calculativo é o sistema. O Heroku, por outro lado, é apenas um SAAS, é basicamente apenas uma fração dos serviços da AWS. Então, por que lutar com a configuração da AWS quando você pode enviar seu primeiro produto para o primeiro usando o Heroku.

O Heroku é gratuito, simples e fácil de implantar quase todos os tipos de pilhas na web. O Heroku foi criado especificamente para contornar todas as dificuldades de enviar seu aplicativo para um servidor ativo em menos de um tempo.

No entanto, você pode querer implantar seu aplicativo usando qualquer um dos tutoriais de ambas as partes e comparar

AWS DOCS e Heroku Docs

Eu sou um programador de RoR iniciante que está planejando implantar meu aplicativo usando o Heroku. Palavra de meus outros amigos conselheiro diz que Heroku é realmente fácil, bom de usar. O único problema é que eu ainda não tenho ideia do que o Heroku faz ...

Eu olhei para o website deles e em poucas palavras, o que o Heroku faz é ajudar na escalação, mas ... por que isso importa? Como o Heroku ajuda com:

  1. Velocidade - Minha pesquisa sugeriu que a implantação da AWS na Costa Leste dos EUA seria a mais rápida se eu tivesse como alvo um público baseado nos EUA e na Ásia.

  2. Segurança - Quão seguras são elas?

  3. Escala - Como isso realmente funciona?

  4. Economia de custos - há algo como um dinamômetro que facilita a escalabilidade.

  5. Como eles se saem contra seus concorrentes? Por exemplo, Engine Yard e bluebox ?

Por favor, use termos leigos em inglês para explicar ... Sou um programador iniciante.


A Amazon Web Services (AWS) oferece muitos serviços de IaaS para PaaS com garantia de 99,9999999% de durabilidade e disponibilidade de dados e infraestrutura. A AWS oferece automação de infraestrutura junto com várias ferramentas para que os desenvolvedores enfileirem seu processo de implantação de aplicativos.

Por outro lado, Heroku é apenas PaaS, que oferece serviços para gerenciar sua plataforma em suas nuvens. Em nenhum lugar fica com a AWS se é infraestrutura ou segurança.


As respostas existentes são amplamente precisas:

  • O Heroku é muito fácil de usar e implementar, pode ser facilmente configurado para implementação automática de um repositório (por exemplo, GitHub), tem muitos add-ons de terceiros e cobra mais por instância.

  • A AWS tem uma gama mais ampla de serviços de primeira linha com preços competitivos, incluindo DNS, balanceamento de carga, armazenamento de arquivos barato e recursos empresariais como a capacidade de definir políticas de segurança.

Para o dr, pule para o final deste post.

O AWS ElasticBeanstalk é uma tentativa de fornecer uma plataforma de escalonamento automático e de fácil implementação do tipo Heroku. Como ele usa instâncias do EC2 (que ele cria automaticamente), os servidores EB podem fazer tudo o que qualquer outra instância do EC2 pode fazer e é barato executá-lo.

Implantação com EB é muito lenta; A implantação de uma atualização pode levar de 10 a 15 minutos por servidor e a implantação em um cluster maior pode levar a melhor parte de uma hora - em comparação com apenas alguns segundos para implantar uma atualização no Heroku. As implementações no EB não são tratadas de forma particularmente simples, o que pode impor restrições ao design do aplicativo.

Você pode usar todos os serviços que o ElasticBeanstalk usa nos bastidores para construir seu próprio sistema sob medida (com CodeDeploy, Elastic Load Balancer, Auto Scaling Groups - e CodeCommit, CodeBuild e CodePipeline se quiser ir all-in), mas você definitivamente pode gastar um bom Algumas semanas configurando a primeira vez, pois é bastante complicada e um pouco mais complicada do que apenas configurar coisas no EC2.

O AWS Lightsail oferece uma opção de hospedagem com preços competitivos, mas não ajuda na implantação ou no dimensionamento - é realmente apenas um invólucro para a oferta do EC2 (mas custa muito mais). Ele permite executar automaticamente um script bash na configuração inicial, o que é um toque agradável, mas é mais caro comparado ao custo de apenas configurar uma instância do EC2 (que você também pode fazer programaticamente).

Algumas reflexões sobre comparar (para tentar responder as perguntas, embora de forma indireta):

  1. Não subestime a quantidade de administração do sistema de trabalho, incluindo manter tudo o que você instalou atualizado com patches de segurança (e atualizações ocasionais do sistema operacional).

  2. Não subestime o quanto de uma implantação automática, dimensionamento automático e provisionamento e configuração SSL de benefícios.

    A implantação automática quando você atualiza seu repositório Git é fácil com o Heroku. É quase instantâneo, gracioso, portanto, não há interrupções para os usuários finais e pode ser definido para atualizar somente se os testes / Integração Contínua forem aprovados, para que você não quebre seu site se implantar um código corrompido.

    Você também pode usar o ElasticBeanstalk para implantação automática, mas esteja preparado para passar uma semana configurando isso pela primeira vez - você pode ter que mudar a forma de implantar e construir ativos (como CSS e JS) para trabalhar com o modo como o ElasticBeanstalk lida com implantações ou construir lógica em seu aplicativo para lidar com implantações.

    Esteja ciente na estimativa de custos que, para implantação uniforme sem interrupção no EB, você precisa executar várias instâncias - o EB distribui atualizações para cada servidor individualmente para que seu serviço não seja degradado - onde o Heroku gera um novo dinamômetro para você o serviço antigo até que todos os pedidos sejam realizados (então o apaga).

    Curiosamente, o custo de hospedagem da execução de vários servidores com o EB pode ser mais barato do que uma única instância do Heroku, especialmente quando você inclui o custo dos complementos.

Algumas outras questões não são perguntadas especificamente, mas levantadas por outras respostas:

  1. Usar um provedor diferente para produção e desenvolvimento é uma má ideia.

    Estou me encolhendo que as pessoas estão sugerindo isso. Embora o ideal seja que o código funcione bem em qualquer plataforma razoável para que seja o mais portátil possível, as versões do software em cada host variam muito e só porque o código é executado em teste não significa que ele será executado em produção (por exemplo, Node.js / As versões Ruby / Python / PHP / Perl podem diferir de formas que tornam o código incompatível, geralmente de formas silenciosas que podem não ser detectadas mesmo se você tiver uma cobertura de teste decente).

    O que é uma boa ideia é alavancar algo como Heroku para prototipagem, projetos menores e microsites - assim você pode construir e implantar coisas rapidamente sem investir muito tempo em configuração e manutenção.

    Certifique-se de incluir o custo de execução de instâncias de produção e pré-produção ao tomar essa decisão, sem esquecer o custo de replicar todo o ambiente (incluindo serviços de terceiros, como armazenamentos de dados / complementos, instalação e configuração de SSL etc.) .

  2. Se estiver usando a AWS, tenha cuidado com as instâncias pré-configuradas da AWS de fornecedores como a Bitnami - elas são um pesadelo de segurança. Eles podem expor muitos aplicativos notoriamente vulneráveis ​​por padrão sem mencioná-los na descrição.

    Considere, em vez disso, apenas usar uma distribuição mainstream bem suportada, como Ubuntu ou Debian (ou CentOS se você precisar de suporte a RPM).

    Observação: a oferta da Amazon tem sua própria distribuição, chamada Amazon Linux, que usa o RPM, mas é específica do EC2 e menos bem suportada por software de terceiros / de código aberto.

  3. Você também pode configurar uma instância do EC2 no AWS (ou Lightsail) e configurá-la com algo como flynn ou dokku - em que você poderia implantar vários sites facilmente, o que pode valer a pena se você mantiver muitos serviços ou quiser ser capaz de girar coisas novas com facilidade. No entanto, configurá-lo não é tão automático quanto usar o Heroku e você pode acabar gastando muito tempo configurando e mantendo-o (até o ponto que descobri que implantar usando o Amazon Clustering e o Docker Swarm é mais fácil do que configurá-lo; YMMV).

Eu usei instâncias do AWS EC (sozinho e em clusters), Elastic Beanstalk e Lightsail e Heroku ao mesmo tempo, dependendo das necessidades do projeto em que estou trabalhando.

Eu odeio gastar tempo configurando serviços, mas minha conta Heroku seria de milhares por ano se eu a utilizasse para tudo e a AWS trabalhasse com uma fração do custo.

tl; dr

Se o dinheiro nunca foi um problema, eu usaria o Heroku para quase tudo, pois é uma grande economia de tempo - mas eu ainda gostaria de usar a AWS para projetos mais complicados, onde eu preciso da flexibilidade e serviços mais avançados que o Heroku não oferece.

O cenário ideal para mim seria se o ElasticBeanstalk funcionasse mais como o Heroku - isto é, com uma configuração mais fácil e um mecanismo de implementação mais rápido e melhor.

Um exemplo de serviço que é quase isso é o now.sh , que realmente usa a AWS nos bastidores, mas torna as implantações e clusters tão fáceis quanto no Heroku (com SSL automático, DNS, implementações fáceis, configuração de cluster super fácil e gestão).

Eu usei bastante para o aplicativo Node.js e para as implantações de imagem do Docker, a principal ressalva é que as instâncias são compartilhadas (algo refletido em seu menor custo) e atualmente não há opção para comprar instâncias dedicadas. No entanto, a ferramenta de implantação de código aberto 'now' também pode ser usada para implantar em instâncias dedicadas na AWS, bem como no Google Cloud e no Azure.


Bem! Eu observo Heroku é famoso em brotamento e desenvolvedores recém-nascidos, enquanto a AWS tem avançado persona desenvolvedor. A DigitalOcean também é um dos principais intervenientes neste campo. O Cloudways facilitou muito a criação da pilha do Lamp em um clique no DigitalOcean e no AWS. Ter todos os serviços e atualizações de pacotes em um clique é muito melhor do que fazer tudo manualmente.

Você pode conferir completamente aqui: https://www.cloudways.com/blog/host-php-on-aws-cloud/


Como Kristian Glass disse, não há comparação entre IaaS ( AWS ) e PaaS ( Heroku , EngineYard ).

A PaaS basicamente ajuda os desenvolvedores a acelerar o desenvolvimento do aplicativo, economizando dinheiro e, o mais importante, inovando seus aplicativos e negócios, em vez de configurar e gerenciar itens como servidores e bancos de dados. Outros recursos que compram para usar PaaS são os processos de implantação de aplicativos, como agilidade, alta disponibilidade, monitoramento, dimensionamento / descalcificação, necessidade limitada de experiência, fácil implantação e custo reduzido e tempo de desenvolvimento.

Mas ainda há um lado negativo na PaaS que leva à barreira da adoção de PaaS:

  • Menos controle sobre o servidor e bancos de dados
  • Os custos serão muito altos se não forem governados adequadamente
  • Prematuro e duvidoso nos dias atuais e idade

Além de acima você deve ter habilidade suficiente para gerenciar você IaaS:

  • Aquisição de hardware
  • Sistema operacional
  • Software para Servidores
  • Ambiente de Script do Lado do Servidor
  • servidor web
  • Sistema de Gerenciamento de Banco de Dados (Mysql, Redis etc)
  • Configurar servidor de produção
  • Ferramenta para teste e implantação
  • App de monitoramento
  • Alta disponibilidade
  • Carregar Blancing / Roteamento Http
  • Políticas de backup de serviço
  • Colaboração em equipe
  • Reconstruir Produção

Se você tem negócios de pequena escala, a PaaS será a melhor opção para você:

  • Pay as you go
  • Baixo custo de arranque
  • Deixe o encanamento para especialista
  • A PaaS lida com escalonamento / descalcificação automática, balanceamento de carga, recuperação de desastre
  • A PaaS gerencia todos os requisitos de segurança
  • PaaS gerencia confiabilidade, alta disponibilidade
  • Paas gerencia muitos add-ons de terceiros para você

Será totalmente escolha individual com base na exigência. Você pode ter detalhes sobre o meu PPT Hosting Rails Apps .


Há muitas maneiras diferentes de analisar essa decisão a partir dos objetivos de desenvolvimento, TI e negócios, por isso não se sinta mal se parecer esmagadora. Mas também - não pense em excesso de escalabilidade.

Pense nas suas necessidades .

Criei sites que atendem mais de 8 milhões de usuários por dia e forneceu terabytes de vídeo por semana com base em infraestruturas a partir de US $ 250.000 em hardware de capital por uma equipe de funcionários de TI de US $ MM enorme.

Mas eu também tive sites menores que foram projetados para gerar entre US $ 10 e US $ 20 mil por ano, não tinham requisitos de tráfego, banco de dados ou processamento muito altos, e fiz uma conta de hospedagem genérica de US $ 10 / mês sem compromisso.

No futuro, a implantação se parecerá mais com o Heroku do que com o AWS, apenas por causa do progresso. Não há valor zero no torneamento de redimensionamento de TI de infraestruturas de Internet escalonadas que não são cada vez mais automatizáveis, e nada disso tem nada a ver com o valor do produto ou serviço que você está oferecendo.

Além disso, tenha em mente um site comercial - escalabilidade é o que muitas vezes chamamos de "bom problema para ter" - embora os problemas de escalabilidade com sites como o Facebook e o Twitter fossem muito importantes, eles não tiveram efeito negativo sobre o sucesso. pode até ter contribuído para mais inscrições (toda impressão é boa).

Se você tem um serviço que está gerando mais de 100 mil acessos por dia e problemas de dimensionamento, eu ficaria feliz em tirá-lo de suas mãos para você, independentemente do idioma, do banco de dados, da plataforma ou da infraestrutura em execução.

Escalabilidade é um problema de implementação consertável - não ter clientes é um problema existencial.


O engraçado é que o Heroku realmente usa o AWS no backend. Ele tira toda a sobrecarga e faz gerenciamento de arquitetura no EC2 para você. (Obtive esse conhecimento de um engenheiro sênior em uma grande empresa durante uma entrevista)


Primeiras coisas primeiro, AWS e Heroku são coisas diferentes. A AWS oferece Infraestrutura como Serviço ( IaaS ), enquanto a Heroku oferece uma Plataforma como Serviço ( PaaS ).

Qual é a diferença? Muito aproximadamente, o IaaS fornece componentes que você precisa para construir coisas sobre ele; A PaaS oferece um ambiente onde você simplesmente envia código e alguma configuração básica e obtém um aplicativo em execução. O IaaS pode lhe dar mais poder e flexibilidade, ao custo de ter que construir e manter mais você mesmo.

Para obter seu código em execução na AWS e parecer um pouco com uma implantação do Heroku, você precisará de algumas instâncias do EC2 - você desejará uma camada de balanceador de carga / cache instalada (por exemplo, Varnish ), você desejará instâncias executando algo como Passenger e nginx para servir seu código, você vai querer implantar e configurar uma instância de banco de dados em cluster de algo como o PostgreSQL . Você desejará um sistema de implementação com algo como o Capistrano e algo que faça agregação de log.

Isso não é uma quantidade insignificante de trabalho para configurar e manter. Com Heroku, o esforço necessário para chegar a esse tipo de estágio é talvez algumas linhas de código de aplicação e um git push .

Então você está tão longe e quer escalar. Ótimo. Você está usando o Puppet para sua implantação do EC2, certo? Então agora você configura seus arquivos Capistrano para girar para cima / para baixo conforme necessário; você reajusta sua configuração do Puppet para que o Varnish esteja ciente das instâncias do trabalhador da Web e agrupe automaticamente entre elas. Ou você heroku scale web:+5 .

Espero que isso lhe dê uma ideia da comparação entre os dois. Agora, para abordar seus pontos específicos:

Rapidez

Atualmente, o Heroku é executado apenas em instâncias da AWS em us-east e eu-west . Para você, isso soa como o que você quer de qualquer maneira. Para outros, é potencialmente mais uma consideração.

Segurança

Eu vi muitos servidores de produção mantidos internamente que estão muito atrasados ​​em atualizações de segurança, ou geralmente mal colocados juntos. Com Heroku, você tem alguém gerenciando esse tipo de coisa, que é uma bênção ou uma maldição, dependendo de como você olha para ela!

Quando você implanta, você está efetivamente entregando seu código diretamente para Heroku. Isso pode ser um problema para você. Seu artigo sobre o 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; Eu, infelizmente, não estou em posição de conhecimento / experiência suficiente para realmente comentar, mas minhas implantações atuais do Heroku consideram isso "bom o suficiente". Pode ser um problema para você, eu não sei.

Escala

Eu toquei em como alguém poderia implementar isso na minha comparação IaaS vs PaaS acima. Aproximadamente, seu aplicativo tem um Procfile , que tem linhas no formato dyno_type: command_to_run , portanto, por exemplo (em inglês, http://devcenter.heroku.com/articles/process-model ):

web:    bundle exec rails server
worker: bundle exec rake jobs:work

Isso com um:

heroku scale web:2 worker:10

Isso fará com que você tenha 2 dynos da web e 10 dynos de worker execução. Nice, simples e fácil. Note que web é um tipo especial de dyno, que tem acesso ao mundo externo, e está por trás de seu bom multiplexador de tráfego na web (provavelmente algum tipo de combinação de Varnish / nginx) que irá rotear o tráfego de acordo. Seus funcionários provavelmente interagem com uma fila de mensagens para roteamento semelhante, a partir do qual eles 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, é de US $ 0,05 / hora para uma hora dinamica, comparado a US $ 0,025 / hora para uma microinstância da AWS ou US $ 0,09 / hora para uma pequena instância da AWS.

A documentação do dyno do Heroku diz que você tem cerca de 512MB de RAM, então provavelmente não é muito irracional considerar um dinamômetro como um microcontrolador EC2. Vale a pena dobrar o preço? Quanto você valoriza seu tempo? A quantidade de tempo e esforço necessários para criar uma oferta de IaaS para chegar a esse padrão definitivamente não é barata. Eu não posso realmente responder a esta pergunta para você, mas não subestime os "custos ocultos" de configuração e manutenção.

(Um pouco de lado, mas se eu me conectar a um dinamômetro a partir daqui ( heroku run bash ), um olhar superficial mostra 4 núcleos em /proc/cpuinfo e 36GB de RAM - isso me leva a acreditar que estou em um " Instância extra grande com memória alta dupla " . A documentação do Heroku dyno diz que cada dyno recebe 512MB de RAM, então estou potencialmente compartilhando com até 71 outros dynos. (Eu não tenho dados suficientes sobre a homogeneidade das instâncias AWS da Heroku, então sua milhagem pode variar)

Como eles se saem contra seus concorrentes?

Receio que não possa ajudá-lo. O único concorrente que eu realmente já vi foi o Google App Engine - na época, eu estava procurando implantar aplicativos Java, e a quantidade de restrições em estruturas e tecnologias utilizáveis foi incrivelmente desconcertante. Isso é mais do que "apenas uma coisa Java" - a quantidade de restrições gerais e considerações necessárias ( a FAQ sugere várias) parecia menos conveniente. Em contraste, a implantação no Heroku foi um sonho.

Conclusão

Espero que isso responda às suas perguntas (por favor, comente se há lacunas / outras áreas que você gostaria de abordar). Eu sinto que deveria oferecer minha posição pessoal. Eu amo Heroku para "implementações rápidas". Quando eu estou começando uma aplicação, e eu quero alguma hospedagem barata (a camada gratuita Heroku é incrível - essencialmente se você precisa apenas de um dyno da web e 5MB de PostgreSQL, é livre para hospedar uma aplicação), Heroku é minha posição . 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 livrar desse controle para o Heroku, e então a 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 tenha que gastar tempo criando toda a infraestrutura do código. Eu definitivamente daria uma chance.

Observe que, na verdade, a AWS tem uma oferta de PaaS, o Elastic Beanstalk , que suporta Ruby, Node.js, PHP, Python, .NET e Java. Eu acho que geralmente a maioria das pessoas, quando vêem "AWS", pulam para coisas como EC2 e S3 e EBS, que são definitivamente ofertas IaaS


Embora a AWS e a Heroku sejam plataformas de nuvem, elas são diferentes, pois a AWS é IaaS e Heroku é PaaS


bem .. não é tudo tão rosado ..

Primeiro de tudo: AWS não é ciência de foguetes, e se você sabe como implantar "coisas" no final do dia, é melhor usar AWS e mais barato ... em vez de qualquer outro PaaS que costuma ser sempre mais caro troca de fazer "coisas" para você ... IMHO AWS é muito melhor e você tem muito mais controle global,

especialmente agora, quando há rightScale, bitnami, etc ... e todas aquelas imagens EC2 pré feitas para tantas pilhas de software diferentes.






amazon-web-services