Je suis en train de refactoriser un couple de services node.js. Tous commençaient avec forever
sur des serveurs virtuels, si le processus échouait, ils se relançaient.
Passons maintenant aux structures d’application conteneurisées et sans état. Je pense que le processus doit se terminer et que le conteneur doit être redémarré en cas d’échec.
Est-ce exact? Y a-t-il des avantages ou des inconvénients?
Mon point de vue est de ne pas utiliser de superviseur de processus dans le conteneur (forever, pm2) mais plutôt d’utiliser la stratégie de redémarrage du menu fixe via le --restart=always
(ou l’un des autres types de cette option). Ceci est plus conforme à la philosophie globale de docker et devrait fonctionner de manière très similaire à la supervision de processus dans un conteneur, car les conteneurs docker commencent à fonctionner très rapidement.
Le plus ardent défenseur de la supervision des processus dans le conteneur que j’ai vu est dans phusion baseimage-docker README / si vous souhaitez explorer l’autre position sur ce sujet.
Bien qu'il soit judicieux d'utiliser --restart=always
en tant que sécurité intégrée, le redémarrage du conteneur est relativement lent (plus de 5 secondes avec le simple serveur Hello World Node décrit ici ), afin que vous puissiez minimiser les temps d'immobilisation d'applications en utilisant forever
.
Un inconvénient du redémarrage du processus au sein du conteneur est que la récupération sur incident peut désormais se produire de manière deux, ce qui peut avoir des implications pour votre surveillance, etc.
Si vous utilisez un serveur doté de plusieurs processeurs, le noeud doit être configuré en cluster.
Avec PM2, vous obtenez cela sans écrire de code supplémentaire. http://pm2.keymetrics.io/docs/usage/cluster-mode/
Sauf si vous utilisez un groupe de serveurs avec des instances de processeur uniques, utilisez plutôt PM2 en production.
pm2 sera également plus rapide à redémarrer que docker