Sou um programador iniciante de RoR que planeja implantar meu aplicativo usando o Heroku. As notícias de meus outros amigos conselheiros dizem que o Heroku é realmente fácil, bom de usar. O único problema é que ainda não faço ideia do que o Heroku faz ...
Eu olhei para o site deles e, em poucas palavras, o que o Heroku faz é ajudar no dimensionamento, mas ... por que isso importa? Como o Heroku ajuda com:
Velocidade - minha pesquisa sugeriu que a implantação da AWS na costa leste dos EUA seria a mais rápida se eu visasse um público americano / asiático.
Segurança - Quão seguros eles são?
Escalonamento - Como ele realmente funciona?
Eficiência de custos - existe algo como um dinamômetro que facilita o dimensionamento.
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.
production
filial no meu repositório. Sempre que um novo commit é enviado para esse repositório, o Heroku o agarra, cria e implanta automaticamente. Não preciso me preocupar com nada do lado do servidor!Respostas:
O AWS / Heroku é gratuito para pequenos projetos de hobby (para começar).
Se você deseja iniciar um aplicativo imediatamente, sem muita personalização da arquitetura, escolha Heroku .
Se você deseja se concentrar na arquitetura e poder usar diferentes servidores da Web, escolha AWS . A AWS consome mais tempo com base em qual serviço / produto você escolhe, mas pode valer a pena. A AWS também vem com muitos serviços e produtos de plugins.
Heroku
AWS
fonte
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 um
git 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áriodyno_type: command_to_run
, portanto, por exemplo (extraído de http://devcenter.heroku.com/articles/process-model ):Isto, com um:
resultará em você tendo 2
web
dynos e 10worker
dynos em execução. Bom, simples, fácil. Observe que esteweb
é 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
fonte
Como disse Kristian Glass, não há comparação entre IaaS ( AWS ) e PaaS ( Heroku , EngineYard ).
O PaaS basicamente ajuda os desenvolvedores a acelerar o desenvolvimento do aplicativo, economizando dinheiro e inovando mais importante seus aplicativos e negócios, em vez de definir configurações e gerenciar itens como servidores e bancos de dados. Outros recursos que compram o PaaS são o processo de implantação de aplicativos, como agilidade, alta disponibilidade, monitoramento, escala / descalcificação, necessidade limitada de conhecimento, fácil implantação e custo reduzido e tempo de desenvolvimento.
Mas ainda existe um lado sombrio da PaaS que leva à barreira da adoção da PaaS:
Além do acima, você deve ter habilidades suficientes para gerenciar seu IaaS:
Se você tem negócios em pequena escala, o PaaS será a melhor opção para você:
Será uma escolha totalmente individual com base nos requisitos. Você pode obter detalhes sobre meus aplicativos PPT Hosting Rails .
fonte
Thank you for your concerns. We assure you that we take security very seriously and run or systems on secure servers. There is no need to worry about [insert security issue here] as all that is handled by...
. -1, mas eu o reverteria se editado corretamente.Existem várias maneiras diferentes de encarar essa decisão a partir dos objetivos de desenvolvimento, TI e de negócios; portanto, não se sinta mal se parecer esmagador. Mas também - não pense demais na escalabilidade.
Pense nos seus requisitos .
Projetei sites que atendiam mais de 8 milhões de unidades por dia e forneciam terabytes de vídeo por semana baseados em infra-estruturas a partir de US $ 250 mil em hardware de capital por uma enorme equipe de funcionários de TI de US $ MM.
Mas eu também tinha sites menores, projetados para gerar entre US $ 10 e US $ 20 mil por ano, não tinham requisitos de tráfego, db ou processamento muito altos e administrei esses sites em uma conta de hospedagem genérica de US $ 10 / mês sem compromisso.
No futuro, a implantação será mais parecida com o Heroku do que com a AWS, apenas por causa do progresso. Há um valor zero no giro do botão de TI das infraestruturas de Internet em escala, que não é cada vez mais automatizável, e nada disso tem nada a ver com o valor do produto ou serviço que você está oferecendo.
Além disso, lembre-se de um site comercial - escalabilidade é o que costumamos chamar de 'bom problema' - embora os problemas de escalabilidade de sites como o Facebook e o Twitter fossem muito destacados, eles não tiveram efeito negativo sobre o sucesso - as notícias pode até ter contribuído para mais inscrições (toda imprensa é boa imprensa).
Se você tem um serviço que gera mais de 100 mil por dia e está com problemas de dimensionamento, ficarei feliz em tirá-lo de suas mãos, independentemente do idioma, banco de dados, plataforma ou infraestrutura em que você estiver executando!
A escalabilidade é um problema de implementação corrigível - não ter clientes é um problema existencial.
fonte
Na verdade, você pode usar os dois - você pode desenvolver um aplicativo com os servidores amazon ec2. Em seguida, empurre-o (com git) para o heroku gratuitamente por um tempo (use o nível gratuito do heroku para servi-lo ao público) e teste-o assim. É muito econômico em comparação com o aluguel de um servidor, mas você terá que conversar com uma heroku api mais restritiva, que é algo em que você deve pensar. Fonte: este método foi adotado para uma das minhas aulas on-line "Engenharia de inicialização da Coursera / Stanford por Balaji S. Srinivasan e Vijay S. Pande
fonte
Bem, as pessoas costumam fazer esta pergunta: Heroku ou AWS ao começar a implantar algo.
Minha experiência com o uso do Heroku e da AWS, aqui está minha rápida revisão e comparação:
Heroku
Heroku run bash
(Obrigado, MJafar Mash pelo conselho), mas é meio limitado! Você não tem acesso total!AWS - EC2
O AWS Elastic Beanstalk é uma alternativa do Heroku, mas mais barato
O Elastic Beanstalk foi anunciado como beta público a partir de 2010; ajuda a facilitar o trabalho com a implantação. Para mais detalhes, clique aqui
O Beanstalk é gratuito, o custo que você pagará será pelos serviços que você usa e número de horas de uso.
Uso o Elastic Beanstalk por um longo tempo e acho que pode ser a substituição do Heroku e mais barato!
Sumário
Então, no meu sistema atual, eu uso o Heroku para teste e o Beanstalk para produção!
fonte
Use Heroku for staging, and Beanstalk for production!
heroku run bash
e você tem acesso shell ao seu dynoAs respostas existentes são amplamente precisas:
O Heroku é muito fácil de usar e implantar, pode ser facilmente configurado para implantar automaticamente um repositório (por exemplo, GitHub), possui muitos complementos de terceiros e cobra mais por instância.
A AWS possui uma gama mais ampla de serviços primários com preços competitivos, incluindo DNS, balanceamento de carga, armazenamento barato de arquivos e possui recursos corporativos, como poder definir políticas de segurança.
Para o tl; dr pule para o final deste post.
O AWS ElasticBeanstalk é uma tentativa de fornecer uma plataforma de escalonamento automático e fácil de usar como Heroku. Como ele usa instâncias EC2 (que são criadas automaticamente), os servidores EB podem fazer tudo o que qualquer outra instância EC2 pode fazer e é barato de executar.
A implantação com EB é muito lenta; implantar uma atualização pode levar de 10 a 15 minutos por servidor e implantar 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 implantações no EB também não são tratadas de maneira perfeitamente integrada, o que pode impor restrições ao design do aplicativo.
Você pode usar todos os serviços que o ElasticBeanstalk usa nos bastidores para criar seu próprio sistema sob medida (com CodeDeploy, Elastic Load Balancer, Auto Scaling Groups - e CodeCommit, CodeBuild e CodePipeline se você quiser dar tudo de si), mas definitivamente pode gastar um bom tempo. algumas semanas configurando-o pela primeira vez, pois é bastante complicado e um pouco mais complicado do que apenas configurar as coisas no EC2.
O AWS Lightsail oferece uma opção de hospedagem com preço competitivo, 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 que você execute automaticamente um script bash na configuração inicial, o que é um toque interessante, mas é caro comparado ao custo de apenas configurar uma instância do EC2 (o que você também pode executar programaticamente).
Algumas reflexões sobre a comparação (para tentar responder às perguntas, embora de maneira indireta):
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).
Não subestime o benefício de uma implantação automática, dimensionamento automático e provisionamento e configuração de SSL.
A implantação automática ao atualizar seu repositório Git é fácil com o Heroku. É quase instantâneo e gracioso, portanto não há interrupções para os usuários finais e pode ser configurado para atualizar somente se os testes / Integração Contínua forem aprovados, para que você não quebre o site se implantar código quebrado.
Você também pode usar o ElasticBeanstalk para implantação automática, mas esteja preparado para passar uma semana configurando isso pela primeira vez - talvez seja necessário alterar a maneira como implanta e constrói ativos (como CSS e JS) para trabalhar com a maneira como o ElasticBeanstalk lida com implantações ou com a lógica da construção no seu aplicativo para lidar com implantações.
Lembre-se de estimar os custos de que, para uma implantação sem interrupções no EB, você precisa executar várias instâncias - o EB lança atualizações para cada servidor individualmente para que seu serviço não seja degradado - onde o Heroku cria um novo dinamômetro para você e apenas desaprova o serviço antigo até que todas as solicitações sejam feitas (sendo excluídas).
Curiosamente, o custo de hospedagem da execução de vários servidores com EB pode ser mais barato que uma única instância do Heroku, especialmente depois de incluir o custo dos complementos.
Algumas outras questões não especificamente perguntadas, mas levantadas por outras respostas:
Usar um fornecedor diferente para produção e desenvolvimento é uma má ideia.
Estou chorando que as pessoas estejam sugerindo isso. Embora, idealmente, o código deva funcionar perfeitamente 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 apenas porque o código é executado no preparo não significa que ele será executado na produção (por exemplo, os principais Node.js / As versões Ruby / Python / PHP / Perl podem diferir de maneiras que tornam o código incompatível, geralmente de maneiras silenciosas que podem não ser detectadas, mesmo se você tiver uma cobertura de teste decente).
Uma boa idéia é aproveitar algo como o Heroku para prototipagem, projetos menores e microsites - para que você possa criar e implantar coisas rapidamente, sem investir muito tempo em configuração e manutenção.
Considere o custo de execução das 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 repositórios / complementos de dados, instalação e configuração de SSL, etc.) .
Se estiver usando a AWS, tenha cuidado com instâncias pré-configuradas da AWS de fornecedores como Bitnami - elas são um pesadelo de segurança. Eles podem expor muitos aplicativos notoriamente vulneráveis por padrão, sem mencioná-lo na descrição.
Em vez disso, considere usar uma distribuição mainstream bem suportada, como Ubuntu ou Debian (ou CentOS, se você precisar de suporte ao RPM).
Nota: A oferta da Amazon tem sua própria distribuição chamada Amazon Linux, que usa RPM, mas é específica para EC2 e é menos bem suportada por software de terceiros / código aberto.
Você também pode configurar uma instância do EC2 na AWS (ou Lightsail) e configurar com algo como flynn ou dokku - na qual você pode implantar vários sites facilmente, o que pode valer a pena se você mantiver muitos serviços ou desejar capaz de criar coisas novas facilmente. No entanto, configurá-lo não é tão automático como usar o Heroku e você pode gastar muito tempo configurando e mantendo (até o ponto em que achei a implantação usando o cluster da Amazon e o Docker Swarm para ser mais fácil do que configurá-los; YMMV).
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 milhares por ano se eu a usasse para tudo e a AWS calculasse uma fração do custo.
tl; dr
Se o dinheiro nunca fosse um problema, eu usaria o Heroku para quase tudo, pois economiza muito tempo - mas ainda assim gostaria de usar a AWS para projetos mais complicados, onde preciso da flexibilidade e dos 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 - ou seja, com configuração mais fácil e mais rápida e com um melhor mecanismo de implantação.
Um exemplo de um serviço que é quase isso é now.sh , que realmente usa a AWS nos bastidores, mas torna as implantações e os clusters tão fáceis quanto no Heroku (com SSL, DNS automático, implantações simples, configuração de cluster super fácil e gestão).
Eu o usei bastante nas implantações de aplicativos Node.js. e 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 Azure.
fonte
Tem sido uma porcentagem significativa de nossos negócios migrando pessoas do Heroku para a AWS. Há vantagens para ambos, mas fica confuso com o Heroku depois de um tempo ... depois que você precisar de um certo nível de complexidade, não será mais fácil manter as limitações do Heroku.
Dito isso, existem cada vez mais opções para ter a facilidade do Heroku e a flexibilidade da AWS ao estar na AWS com ótimas estruturas / ferramentas.
fonte
O engraçado é que o Heroku realmente usa a AWS no back-end. Isso elimina toda a sobrecarga e faz o gerenciamento da arquitetura no EC2 para você. (Obteve esse conhecimento de um engenheiro sênior de uma grande empresa durante uma entrevista)
fonte
Bem! Eu observo que Heroku é famoso em desenvolvedores iniciantes e recém-nascidos, enquanto a AWS tem uma personalidade de desenvolvedor avançada. A DigitalOcean também é um participante importante nesse campo. O Cloudways facilitou muito a criação da pilha da lâmpada com um clique no DigitalOcean e na AWS. Ter todas as atualizações de serviços e 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/
fonte
Bem, o Heroku usa a AWS em segundo plano, tudo depende do tipo de solução que você precisa. Se você é um especialista em linux e devops, não está preocupado em criar vm a partir do zero, como selecionar uma variedade de opções de escolha, etc., você pode usar a AWS. Se você quiser fazer as coisas no nível da superfície sem ter essas etnologias, pode usar o heroku.
fonte
O Amazon Web Services (AWS) oferece muitos serviços de IaaS a PaaS com garantia e disponibilidade garantidas de 99,999999999% de dados e infraestrutura. A AWS oferece automação de infraestrutura, juntamente com várias ferramentas para os desenvolvedores direcionarem seu processo de implantação de aplicativos.
Por outro lado, o Heroku é apenas PaaS, que oferece serviços para gerenciar sua plataforma na nuvem deles. Em nenhum lugar está a AWS, seja infraestrutura ou segurança.
fonte
Às vezes, me pergunto por que as pessoas comparam a AWS ao Heroku. A AWS é uma IAAS (infraestrutura como serviço), que fala claramente o quão robusto e calculador o sistema é. 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 alto usando o Heroku?
O Heroku é gratuito, simples e fácil de implantar quase todos os tipos de pilhas na web. O Heroku foi desenvolvido especificamente para contornar todos os problemas de envio do seu aplicativo para um servidor ativo em menos de pouco tempo.
No entanto, convém implantar seu aplicativo usando qualquer um dos tutoriais de ambas as partes e comparar
AWS DOCS e Heroku Docs
fonte
Embora a AWS e o Heroku sejam plataformas em nuvem, eles são diferentes, pois a AWS é IaaS e o Heroku é PaaS
fonte
Heroku é como um subconjunto da AWS. É apenas plataforma como um serviço, enquanto a AWS pode ser implementada como qualquer coisa e em qualquer nível.
A implementação depende de qual requisito comercial. Se ele se encaixar em qualquer um, use de acordo.
fonte