Comment superviser des applications sous node.js ?
La réponse habituelle est FOREVER : forever permet de lancer un programme sous node.js et de le relancer si besoin.
Sur une machine multi-processeur, il est fréquent lancer plusieurs instances de l'applications sous node.js.
Node.js étant monoprocesseur (monothreading) il restera cantonné sur un CPU.
Je lance donc plusieurs instances de node.js (1 par CPU) par la commande forever.
Dans le cas où on dispose de plusieurs serveur (physique ou VM ) , il est d'usage de placer un serveur web NGINX en frontal qui fera office de reverse proxy.
On obtient les architectures suivantes:
(voir article sur ce lien)
Se pose alors le problème de supervision générale du système.
Pour ma part, je lance un 'agent' sur chaque serveur qui renseigne en temps reel sur les instances Node.js qui tournent sur un serveur.
Ce programme en coffeescript lance la commande forever avec l'option list (lignes 22 à 28) et 'compte' le nombre de ligne retournée (lignes 9 à 19) .
Ce dispositif accessible par une API REST (lignes 30 à 35 )permet de construire des interfaces graphiques de supervision:
Avec le résultat suivant :
Tout ceci est à faire manuellement.
Est ce que je suis le seul à avoir ces problèmes ?: NON répond Hongli LAI à la conférence Dot.js de Paris: (video sur ce lien )
Il reprend les différentes étapes de construction d'un projet Node.js
forever forever...
Puis faire démarrer le tout
Mettre en serveur Nginx en reverse proxy
Mettre plusieurs instances en cluster
Et monitorer l'ensemble
Ces dispositifs sont utilisés chez quelques PME : Apple, Pixar, New York Times, AirBnB, Juniper etc.. et over 350.000 websites.
Ce montage en couche peut être remplacé par 1 seul composant : phusion passenger
phusion passenger fournit les informations suivantes:
Lancement des Node.js : phusion passenger se charge de lancer le nombre d'instance qu'il faut et d'équilibrer leur charge.
Reverse proxy
Supervision: à la place d'une supervision à programmer , la ligne de commande phusion passenger retourne les informations suivantes.
$ passenger-status
Version : 4.0.37
Date : 2013-11-14 21:55:30 +0100
Instance: 25002
----------- General information -----------
Max pool size : 6
Processes : 1
Requests in top-level queue : 0
----------- Application groups -----------
/Users/phusion/nodetestapp#default:
App root: /Users/phusion/nodetestapp
Requests in queue: 0
* PID: 25012 Sessions: 0 Processed: 2 Uptime: 9s
CPU: 0% Memory : 14M Last used: 3s ago
Phusion passenger fonctionne soit tout seul , integré avec nginx ou encore avec apache.
Avec Node.js les architectures sont encore plus simples , plus performantes plus robustes et moins chères.
Aucun commentaire:
Enregistrer un commentaire