Comment réussir l'installation d'applications Node.js sur IIS
La prise en charge du moteur JavaScript Node.js sur la plateforme Windows Azure apporte une nouvelle fonctionnalité à IIS. Voici comment la configurer.
Node.js est l'une des technologies de création d'applications Web qui jouissent de la croissance la plus rapide et qui bénéficient du soutien le plus enthousiaste. Un positionnement qui fait de Node.js un outil idéal à déployer dans une installation IIS. Mais les modes d'interfonctionnement exacts des applications Node.js entre elles et avec IIS (Internet Information Services) peuvent compliquer quelque peu l'installation.
En premier lieu, Node.js n'est pas à proprement parler un serveur Web. Il s'agit d'un moteur autonome qui exécute du code JavaScript. Il intègre Google V8, un moteur qui fait appel à un modèle de programmation asynchrone basé sur les événements. Ceci étant dit, nombre d'applications Node.js fonctionnent sous forme de pile Web.
Peu de ces applications communiquent directement avec Internet du fait des risques et de la charge de travail que cette communication implique. Au lieu de cela, tout trafic vers ou depuis le Web dans son ensemble transite par une forme de proxy ; Nginx, par exemple, ou Microsoft IIS lui-même.
Si vous disposez d'une certaine expérience en programmation IIS, le développeur Scott Hanselman propose une analogie utile pour décrire le fonctionnement conjoint de Node.js et d'IIS. Il le compare à un « IHttpHandler développé en JavaScript », ce qui permet le traitement efficace de milliers de requêtes par seconde. Bien sûr, c'est uniquement le cas si vous maîtrisez votre code. Mais nous en parlerons une autre fois.
Si vous souhaitez seulement exécuter Node.js de manière autonome à des fins de développement, ce n'est pas difficile : lancez l'application en question et pointez un navigateur Web vers celle-ci. En revanche, procéder au déploiement d'un code Node.js sous IIS est une toute autre affaire.
Heureusement, Microsoft, qui prend désormais Node.js très au sérieux, particulièrement sur sa plateforme Azure, ainsi que certains éditeurs tiers ambitieux, proposent des solutions permettant d'héberger des applications Node.js sur IIS de manière homogène. Projet open source, iisnode constitue la plus utile et la plus essentielle de ces solutions, assumant l'écrasante majorité des tâches d'intégration.
Principal avantage d'iisnode : il s'agit d'un module IIS natif et non d'une sorte de béquille. Par ailleurs, il gère de nombreux types d'intégration entre un projet Node.js et IIS, notamment les suivants :
- Utilisation de la gestion de configuration IIS. Les projets Node.js se gèrent comme n'importe quel site IIS. Aucun outil de gestion supplémentaire n'est donc nécessaire. Tout s'effectue via le Gestionnaire des services Internet.
- Gestion automatique des processus et de leur recyclage. Un problème récurrent se produit avec Node.js lors de la mise à jour des fichiers d'un projet. Vous devez alors redémarrer le processus Node.js manuellement pour que les modifications prennent effet. Les applications Python sous IIS, par exemple, ont tendance à souffrir du même problème.
- Evolutivité multicoeur. Node.js s'exécute sur un seul thread (fil de traitement) et donc sur un seul coeur d'UC. Le recours à plusieurs processus Node.js permet à iisnode de créer un domaine privé Web (« Web garden »). Le trafic entrant peut ainsi faire l'objet d'un équilibrage de charge sur chacun d'entre eux. Générez autant de processus que vous avez de coeurs et vous répondrez au même nombre de requêtes entrantes simultanément. Remarquez que ce procédé ne tient pas compte de la sécurité des threads de votre code ; là, c'est votre rôle.
- Prise en charge du débogage via un outil d'inspection de noeuds (node-inspector). Exécuter une application au sein d'une pile quelle qu'elle soit ne sert à rien, sauf si vous disposez d'outils de débogage robustes ; node-inspector, outil d'inspection de noeuds intégré à iisnode, permet un débogage détaillé : points d'arrêt, inspection des objets et bien plus encore...
Problèmes d'hébergement de Node.js dans IIS
L'hébergement de Node.js sous IIS fait l'objet d'une plainte récurrente, plainte qui touche également de nombreux autres environnements d'exécution de langages, y compris l'infrastructure .NET : la première requête adressée aux applications Node. js met longtemps à renvoyer une réponse. En effet, la première fois qu'une telle requête se présente, l'instance Node.js doit être « mise en route », ce qui prend parfois pas mal de temps en présence d'applications Node.js particulièrement complexes. Tomasz Janczuk, créateur d'iisnode, donne certaines instructions pour résoudre ce problème. Les amateurs de solutions astucieuses apprécieront : il s'agit de générer une fausse requête au démarrage ; l'opération s'effectue intégralement via le fichier de configuration d'IIS pour le site concerné.
L'autre moyen d'accélérer l'exécution (souvent de manière considérable) consiste à remplacer le propre serveur HTTP de Node.js par le fichier HTTP.SYS de Windows et d'IIS, explique Tomasz Janczuk. En d'autres termes, il n'est pas nécessaire d'ajouter une couche supplémentaire de routage à travers IIS, l'inconvénient étant de devoir se passer des fonctions d'administration d'IIS. Aussi cette solution doit-elle être considérée comme un exercice de niveau avancé ; un type d'optimisation des performances qui doit intervenir ultérieurement dans le cycle de développement, et non dès le début.
Tomasz Janczuk a également créé Edge.js, une bibliothèque qui permet aux applications Node.js de dialoguer avec l'infrastructure .NET au sein du même processus. Si vous disposez déjà de bibliothèques .NET développées pour d'autres projets et que vous souhaitiez permettre à votre nouveau projet Node.js de dialoguer avec elles, c'est une manière de procéder. C#, F#, Python, T-SQL, PowerShell, autant de codes qui peuvent être appelés via Edge.js.
Enfin, si vous développez de A à Z un projet Node.js que vous envisagez de déployer dans le Cloud, un des moyens d'y parvenir à l'aide des outils d'infrastructure de Microsoft consiste à utiliser WebMatrix, son outil gratuit de gestion de projets de développement. Il prend en charge Node.js en tant que composant de première classe et permet de le déployer sur la plateforme de n'importe quel hébergeur qui le gère, y compris Windows Azure.