Fait avec Chinaski

Hypnotoad : rechargements sans interruption

La marque de fabrique de hypnotoad est le rechargement sans coupure de connexions. Cela se fait en signalant le processus master en cours avec le fichier PID que le serveur conserve :

kill -USR2 $(cat hypnotoad.pid)

Ce qui se passe sous le capot : un nouvel ensemble de workers démarre, le drainage du trafic continue sur les anciens workers jusqu'à ce qu'ils finissent les requêtes en vol, et les nouvelles requêtes sont servies par le nouvel ensemble, aucun temps d'arrêt du listener. La config fournie définit un timeout de grâce (graceful_timeout => 20) bornant combien de temps le drainage peut prendre.

Le rechargement s'applique aux changements de code : après avoir modifié des fichiers Perl (par ex. appliquer une mise à jour à la main ou un correctif de plugin), émettez le rechargement USR2 et les workers de requêtes prennent le nouveau code.

  • L'arrêt propre (hypnotoad -s cms.pl) ferme le listener et attend que les workers se drainent, mais ce n'est pas le chemin sans interruption.
  • Les déploiements systemd utilisent le restart propre de l'unité : la sémantique de rechargement à chaud vit sous le contrôle propre du démon, donc utilisez systemctl restart chinaski@<N> là (l'unité définit un timeout d'arrêt généreux de 330 s spécifiquement pour laisser les requêtes en vol se drainer en sécurité, bien que les builds soient bien plus longs ; le processus de build lui-même se termine hors de la fenêtre).

La danse des signaux kill n'a rien changé à l'architecture de Chinaski ; le verrouillage USR2 est un comportement standard de hypnotoad de Mojolicious, documenté pour le cas où hypnotoad est votre serveur frontal.

Lisez ce site en