Hecho con Chinaski

Hypnotoad: Recargas sin Downtime

El sello de hypnotoad es recargar sin cortar conexiones. Eso se hace enviando una señal al proceso master en ejecución mediante el archivo PID que el servidor mantiene:

kill -USR2 $(cat hypnotoad.pid)

Lo que pasa por debajo: un nuevo conjunto de workers arranca, el tráfico sigue drenándose en los workers viejos hasta terminar sus peticiones en curso, y las peticiones nuevas las sirve el conjunto fresco, sin downtime del listener. La configuración incluida establece un graceful timeout (graceful_timeout => 20) que acota cuánto puede tardar el drenado.

La recarga aplica a cambios de código: tras editar archivos Perl (p. ej. aplicar una actualización a mano o un fix de plugin), emite la recarga USR2 y los workers de peticiones toman el código nuevo.

  • Graceful stop (hypnotoad -s cms.pl) cierra el listener y espera a que los workers drenen, pero no es la ruta sin downtime.
  • Los despliegues systemd usan el restart de la propia unidad: la semántica de hot reload vive bajo el control del propio daemon, así que usa ahí systemctl restart chinaski@<N> (la unidad establece un stop timeout generoso de 330 s específicamente para que las peticiones en curso drenen con seguridad, aunque los builds son mucho más largos que eso; el proceso de build mismo completa fuera de la ventana).

El baile de señales kill no cambió nada de la arquitectura de Chinaski; el anclaje USR2 es comportamiento estándar del hypnotoad de Mojolicious, documentado para cuando hypnotoad es tu servidor frontal.

Lee este sitio en