- Um dos recursos mais poderosos do ecossistema Erlang é a atualização de código quente
- Esse recurso é muito único e praticamente impossível em outros runtimes
- Elixir foi construído sobre Erlang e oferece suporte ao mesmo recurso
Aplicando atualizações de código quente no Elixir
- O método padrão de release do Elixir (
mix release) não oferece suporte nativo a atualizações de código quente do Erlang
- Para implementar atualizações de código quente, é preciso consultar vários posts de blog ou estudar em detalhe a documentação oficial do Erlang
- Materiais relacionados:
Casos reais de uso de atualizações de código quente
- Na prática, as atualizações de código quente se dividem em duas grandes categorias:
- Recarregamento simples de código
- Ex.: executar os comandos
r MyModule ou recompile no IEx durante o desenvolvimento
- Isso é simples e útil, mas parece mais parte de um novo compilador ou builder
- Aplicações mais complexas
- O projeto Nerves usa atualizações de código quente com frequência:
- Em dispositivos Elixir embarcados, ao ajustar números ou modificar módulos, atualiza-se via
IEx em vez de esperar o upload do firmware e a reinicialização
- Também é possível iniciar/parar partes específicas da aplicação ou encerrar um
GenServer para reinicializar seu estado
- Aplicação de atualizações de código quente em dispositivos remotos por meio do NervesHub:
- Ex.: ao depurar um relógio em tempo real, executar chamadas I2C diretamente para identificar o problema rapidamente
Ferramentas e cuidados nas atualizações de código quente
- Há a expectativa de que surjam mais ferramentas com suporte a atualizações de código quente sobre o
mix release do Elixir ou a ferramenta legada distillery
- Atualizações de código quente exigem cuidado minucioso, assim como migrações de banco de dados:
- É preciso entender como as dependências reagem a atualizações de código quente
- Há vários outros aspectos que também precisam ser considerados
3 comentários
Esse conteúdo também está explicado em detalhes em Aprendendo Programação em Elixir pela Primeira Vez, o único livro de tradução sobre Elixir do país.
É um recurso bacana e poderoso, mas acho que é melhor usá-lo apenas para depuração e verificação em tempo real
Comentários do Hacker News
No Discord, usaram o hot code loading do BEAM para encurtar ciclos longos de deploy e aplicar atualizações urgentes
Em dispositivos Nerves, o recarregamento de código é útil e permite testar alterações em tempo real, sendo ótimo para testes de integração
/tmpe depois usarCode.compilefornece mensagens de erro melhoresNão puderam usar hot code updates em um projeto Elixir, mas acham que isso teria ajudado os clientes
Estão usando hot code upgrades com sucesso no kosmi.io
Passaram a se interessar por Erlang por causa do Nerves e do hot code reloading
É preciso ter muito cuidado ao preparar um relup, e no Linux também existe a opção de subir um novo servidor e transferir os dados da sessão
Fazem deploy de Elixir em Linux embarcado, com o Nerves substituindo o systemd e inicializando a VM BEAM como processo 1
No passado, o WhatsApp usava scripts SSH para fazer hot reloading em todos os nós
Hot code updates são úteis, mas podem induzir erros com facilidade e têm pouco suporte
Hot code updates são vantajosos ao alterar código em situações com muitos clientes conectados