Image Image Image Image Image
Scroll to Top

Topo

heroku

Enciclopédia do Heroku

Em 23, ago 2012 | Sem Comentários | Em Arquitetura, Cloud Computing, Rails | Por Vinicius AC

Fonte: AkitaOnRails

Atualização 05/06: Depois que escrevi este artigo, encontrei um outro muito bom que recomendo a leitura por ter mais detalhes para complementar. O artigo se chamaHeroku isn’t for Idiots

Se você quer lançar uma aplicação Rails rapidamente, não existe melhor solução do que o Heroku. Para quem não conhece, o Heroku é um Paas (Platform as a Service) que roda sobre o Amazon EC2 (que é um IaaS ou Infrastructure as a Service). O Heroku automatiza a criação de uma nova máquina virtual (volátil! isso é importante) e configura todo o ambiente para rodar Ruby.

O Heroku usa uma unidade de máquina virtual chamada “Dyno”, a grosso modo, considere um Dyno como uma máquina virtual “pequena” com 4 cores e até 512Mb de RAMsem swap file e sem suporte a persistência de arquivos (não faça uploads diretamente no diretório public/uploads ou algo assim, sempre configure para mandar para a Amazon S3, aprenda como neste tutorial). Configurar um novo ambiente é simples, o próprio Heroku tem uma boa documentação ensinando como e recomendo ler antes de continuar.

Subir uma única dyno usando um banco de dados compartilhado PostgreSQL é de graça, o que é excelente para testar sua aplicação. Obviamente apenas um único dyno é pouco para qualquer aplicação séria lançada em produção para o público.

O Heroku fornece “stacks” padrão que é o perfil pré-configurado de um dyno para uma determinada plataforma. Para Ruby e Rails a mais atual (na data de publicação deste post) é a Celadon Cedar, a anterior era a Badious Bamboo portanto se encontrar um tutorial qualquer de Heroku por aí, cheque sobre qual stack estamos falando, só use se for para Cedar.

Concorrência num Dyno

A primeira coisa que me chamou a atenção é que a configuração recomendada é executar uma aplicação Ruby usando o servidor Thin. Pense no Thin como uma evolução do venerado Mongrel mas que suporta executar Eventmachine internamente. Na prática é um Mongrel melhorado, o que significa que cada Dyno, por padrão, não suporta mais do que 1 única execução concorrente (não confundir com “requisições por segundo”!! Muita gente erra isso. Um único processo com uma única execução concorrente pode executar várias requisições por segundo, basta cada requisição demorar menos de 1 segundo).

Executar múltiplos Thins poderia ser possível mas se queremos mais processos rodando simultaneamente para responder mais requisições ao mesmo tempo, a melhor opção é usar Unicorn. Leiam a documentação para aprender as peculiaridades do Unicorn, na prática pense nele como um controlador de processos Ruby. O melhor tutorial para usar Unicorn no Heroku continua sendo o do Michael van Rooijen. Não vou repetir tudo que ele disse, mas as partes importantes são:

Substituir a gem thin pela unicorn na sua Gemfile:

group :production, :staging do
  gem 'unicorn'
  ...
end

Em seguida precisamos declarar quantos processos do Unicorn queremos de cada vez, então crie um arquivo config/unicorn.rb com o seguinte:

worker_processes 4 # amount of unicorn workers to spin up
timeout 50         # restarts workers that hang for 30 seconds

Leiam atentamente o post original do Michael, ele explica alguns benchmarks que ele fez para determinar a quantidade ótima de workers de Unicorn e o ideal é entre 3 e 4 processos. A informação não-oficial que eu tenho é que cada dyno tem até 4 CPUs, o que justifica esse número de processos. Mais do que isso, chequem sempre quanto de memória cada processo consome (ferramentas como NewRelic ajudam nisso) pois a somatória precisa ser menor que 512Mb ou você terá problemas.

Finalmente, a stack Cedar permite configurar perfis de dynos num arquivo chamado Procfile que fica na raíz do seu projeto. Para que a dyno levante com Unicorn coloque o seguinte:

web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb

Continue aqui: http://www.akitaonrails.com/2012/04/20/heroku-tips-enciclopedia-do-heroku?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+AkitaOnRails+%28Akita+On+Rails%29#.UDYbXdZlT3w

Tags | , , ,