Coupler les mécanismes évènementiels nativement asynchrones du framework opensource node.hjs avec un hébergement dans IIS permet aujourd'hui d'implémenter des solutions extrêmement « scalables » sur la plateforme Windows. Si l'on ajoute à cette recette l'ingrédient Cloud, les gains n'en sont que plus nombreux : self-provisioning, élasticité, facturation à l'utilisation.... L'objectif de cette session est de présenter différents contextes d’utilisation du framework node.js dans Azure : Cloud Services PaaS, Web Site, Azure Mobiles Services
Speaker : Stéphane Goudeau (Microsoft)
2. node.js et Windows Azure
Stéphane Goudeau
Microsoft
stephgou@microsoft.com
Architecture/Azure/Cloud
3. Donnez votre avis !
Depuis votre smartphone sur :
http://notes.mstechdays.fr
De nombreux lots à gagner toute les heures !!!
Claviers, souris et jeux Microsoft…
Merci de nous aider à améliorer les Techdays !
#mstechdays
Architecture/Azure/Cloud
5. node.js
• node.js est un framework opensource événementiel
permettant de développer des applications réseau en
JavaScript
– Tous les requêtes sont asynchrones et s’exécutent sur un seul thread
– Utilise le moteur JavaScript V8 de Google et un wrapper C++
optimisé pour gérer les I/O
• Construction de services en ligne scalables
– Gestion de la concurrence assurée directement par l'OS
– Exemples de solution utilisant node.js : Yammer, Yahoo!, WalMart,
LinkedIn, eBay,…
• http://nodejs.org
• http://www.nodebeginner.org/
#mstechdays
Architecture/Azure/Cloud
6. Modules node.js
• Environnement extrêmement
modulaire
• Exemples de modules :
–
–
–
–
–
"fs" : système de fichier
"net" : réseau, TCP
"crypto" : cryptographie
"http" : serveur web
"socket.io" : web sockets et long
polling
= require('http');
var http
http.createServer(function (req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello Worldn');
}).listen(1337, "127.0.0.1");
console.log('Server running at http://127.0.0.1:1337/');
#mstechdays
Architecture/Azure/Cloud
7. node.js package manager
• L’outil npm est inclus
dans le livrable node.js
• Catalogue de modules
:
connect
Standard middleware
Sinatra like web framework:
routing + templates
Real time communication
over WebSockets/polling
– http://npmjs.org
– 58 468 packages
(2/09/2014)…
Full-stack MVC (wants to
be like Rails)
NoSQL data storage
In-memory cache
jsdom
#mstechdays
Parse/generate HTML on
the server
Architecture/Azure/Cloud
11. Configuration d’une VM Azure Linux
sudo apt-get -y update
sudo apt-get install -y g++ libssl-dev apache2-utils curl git-core
git clone git://github.com/joyent/node.git
cd node
git checkout v0.8.18
./configure
make
sudo make install
node -v
http://www.redbitdev.com/monitoring-social-media-with-social-cloud
#mstechdays
Architecture/Azure/Cloud
12. Configuration d’une VM Azure Windows
MSI node.js
#mstechdays
Microsoft Web PI
Architecture/Azure/Cloud
13. Module IISNode : node.js hébergé dans IIS
• Gestion des processus
• Scalabilité sur des serveurs multicœurs
• Auto-update
• Access aux logs via HTTP
• Intégration avec d’autres types de
contenu
• Très peu d’impact sur le code
node.js
• Supervision dans IIS
• https://github.com/WindowsAzure/ii
snode
• benefits of iisnode
#mstechdays
Architecture/Azure/Cloud
14. Optimisation de node.js + IIS sur des serveurs
multi-coeurs déployés dans Azure
if "%EMULATED%"=="true" exit /b 0
REM Count the total number of available
processors on this system
powershell -c "exit
[System.Environment]::ProcessorCount"
REM set the default number of processes for
our app pools in IIS equal to the number of
available processors
%windir%system32inetsrvappcmd set config section:applicationPools
applicationPoolDefaults.processModel.maxProce
sses:%ErrorLevel%
#mstechdays
Architecture/Azure/Cloud
16. Web Role ou Worker Role node.js
•
•
Un web role node.js utilise le module
IISNode en le chargeant comme un
module additionnel ASP.NET dans IIS.
Le package de déploiement crée une
startup task pour installer IISNode
dans la ou les instances du web role
#mstechdays
•
Un worker role hébergeant une
application node.js est implémenté avec la
fonction ProgramEntryPoint exposée dans
le fichier ServiceDefinition.csdef qui
permet de spécifier un programme
comme étant le point d’entrée du worker
role : node.exe .server.js
Architecture/Azure/Cloud
17. Optimisation de node.js + IIS sur des serveurs
multi-coeurs déployés dans Azure PaaS
<Startup>
<!-- Included by default; installs everything you need to run Node
on Azure -->
<Task commandLine="setup_web.cmd" executionContext="elevated">
<Environment>
<Variable name="EMULATED">
<RoleInstanceValue
xpath="/RoleEnvironment/Deployment/@emulated" />
</Variable>
</Environment>
</Task>
<Task commandLine="setMaxProcessesToAvailableProcessors.cmd"
executionContext="elevated">
<Environment>
<Variable name="EMULATED">
<RoleInstanceValue
xpath="/RoleEnvironment/Deployment/@emulated" />
</Variable>
</Environment>
</Task>
</Startup>
#mstechdays
Architecture/Azure/Cloud
18. Montée de version node.js dans Azure
•
L’installation du Windows Azure SDK for node.js inclut une version ancienne de
node.js (v0.6.20) que l’on peut modifier à condition qu’elle soit supportée :
–
•
Set-AzureServiceProjectRole "HelloWebRole" node 0.10.21
Les versions de node.js accessibles via cette commande se limitent à celles
disponibles dans la liste résultant de l’appel par la commande
–
Get-AzureServiceProjectRoleRuntime
Runtime : Node
Version : 0.10.21
PackageUri : http://az413943.vo.msecnd.net/node/0.10.21.exe
IsDefault : False
http://blogs.msdn.com/b/stephgou/archive/2014/01/10/gestion-des-montees-de-versionnodejs-dans-windows-azure.aspx
#mstechdays
Architecture/Azure/Cloud
21. node.js hébergé dans Windows Azure Web
Sites
• Simplicité de mise en œuvre
• Les applications node.js hébergées dans Windows
Azure Web Sites s’exécutent dans un iisnode
• Azure Web Site propose nativement un mécanisme
de sélection de version de node.js
#mstechdays
Architecture/Azure/Cloud
23. node.js et Azure Mobile Services
#mstechdays
Architecture/Azure/Cloud
24. Windows Azure Mobile Services
• « Back-end as a
Service » pour vos apps
mobiles
• Étendre les apps web
internes à des
périphériques mobiles
• Construire et déployer
rapidement des
applications grand public
• Un unique back-end
pour toutes vos apps
• Sur tous les
périphériques
#mstechdays
Architecture/Azure/Cloud
25. Support de custom API node.js
• Création et exposition
de Custom APIs
– Implémentées avec
node.js
• Support des
packages NPM:
– Installation dans le
référentiel Git local
– Synchronisation des
#mstechdays services mobiles
Architecture/Azure/Cloud
26. NODE.JS ET AZURE MOBILE
SERVICES
#mstechdays
Architecture/Azure/Cloud
28. Hébergement d’une application node.js dans
Windows Azure : les critères de choix
+ : Choix de l’OS
(Windows, Linux),
contrôle de la VM
- : Gestion de la VM (mise
à jour, préprovisionning…)
+ : Simplicité
d’utilisation
- : Difficile d’aller au
delà du modèle proposé
#mstechdays
Windows
Azure
Virtual
Machines
(IaaS)
Windows
Azure
Web Sites
(PaaS)
Cloud Services
(PaaS)
+ : Gestion simplifiée
- : Réinstallation de
node.js à chaque
redémarrage de VM
Windows
Azure Mobile
Services
Utilisation de Services
pour les applications
mobiles
Windows
Azure
Architecture/Azure/Cloud
29. node.js : Outils et technologies Microsoft
• Extension Visual
Studio
– https://nodejstools.codeple
x.com
• Visual Studio Online
• Web Matrix
• CmdLets PowerShell
– https://github.com/Windows
Azure/azure-sdk-tools
#mstechdays
Architecture/Azure/Cloud
30. node.js : Outils et technologies Microsoft
• Nodejs Developper
Center
– http://www.windowsazure.com/
en-us/develop/nodejs
• Libraries for Azure
services
– https://github.com/WindowsAzu
re/azure-sdk-for-node
• Windows Azure Client
Library for node
– https://npmjs.org/package/azur
#mstechdays
Architecture/Azure/Cloud
e