Feito com Chinaski

Hypnotoad: Reloads Sem Downtime

A marca registrada do Hypnotoad é recarregar sem derrubar conexões. Isso é feito sinalizando o processo master em execução pelo arquivo PID que o servidor mantém:

kill -USR2 $(cat hypnotoad.pid)

O que acontece por baixo dos panos: um novo conjunto de workers inicia, o escoamento do tráfego continua nos workers antigos até terminarem as requisições em voo, e as novas requisições são servidas pelo conjunto fresco, nenhum downtime de listener. A configuração embarcada define um graceful timeout (graceful_timeout => 20) limitando quanto o esvaziamento pode tomar.

O reload aplica-se a mudanças de código: após editar arquivos Perl (por exemplo, aplicando uma atualização à mão ou uma correção de plugin), emitia o reload USR2 e os workers de requisições pegam o novo código.

  • Graceful stop (hypnotoad -s cms.pl) fecha o listener e espera os workers esvaziarem, mas não é o caminho de zero-downtime.
  • Deployments systemd usam o próprio restart da unit , a semântica de hot reload vive sob o controle do próprio daemon, então use systemctl restart chinaski@<N> ali (a unit define um timeout de stop generoso de 330 s especificamente para deixar requisições em voo esvaziarem com segurança, embora builds demorem bem mais que isso; o processo de build em si completa fora da janela).

O ritual de sinais do kill não mudou nada na arquitetura do Chinaski; o apontamento USR2 é um comportamento padrão do hypnotoad do Mojolicious, documentado para o momento em que o hypnotoad é seu servidor da frente.

Leia este site em