JavaScript prend de plus en plus d'importance et Microsoft rend son exécution très efficace. Nous verrons dans cette session les cas d'utilisation de ce langage sur la plateforme Microsoft au niveau du serveur que ce soit par exemple avec Node.js ou Map/Reduce sur Windows Server et Windows Azure.
La vidéo est disponible à http://www.microsoft.com/france/mstechdays/programmes/parcours.aspx#SessionID=965a01d5-bd2f-4b60-847f-6d28900fe1e5
2. JavaScript aussi sur le
serveur et jusque dans le
cloud ?
7 février 2012
Benjamin Guinebertière Stéphane Rios
www.benjguin.com @stefounet
relation technique CEO / CTO Founder
architectes Fasterize (fasterize.com)
Microsoft France
3. Fasterize
Startup créée mi-2011, en phase de beta privée
Accélérateur de site Web en mode SaaS
Optimise les pages HTML à la volée
Réduit le temps de chargement des pages HTML
Améliore le trafic, taux de transfo, SEO, etc …
Ultra-simple à intégrer
Node.js
Utilisateurs depuis mi-2010
Au cœur de notre architecture
Cloud
Rackspace / Openstack
DevOps / Chef
4. Plan
Contexte
JavaScript côté serveur
Comment Microsoft met cela en œuvre
Node.JS sur Windows Azure
Installation de serveurs open source sur Windows
Azure
Hadoop On Azure et Hadoop sur Windows Server
Conclusion
5. 15 ans de JavaScript
Historique rapide JavaScript
Création en 1995 par Brendan Eich
Standardisé ensuite via ECMAScript
Rien à voir avec Java
JavaScript s’impose partout
De plus en plus de code client
HTML statique
HTML généré côté serveur
HTML généré côté serveur et côté client (Ajax)
HTML généré uniquement côté client (SPA)
HTML5 / Web Services REST
Browser, RIA, Database, Application Server
JSON gagne du terrain sur XML
Stockage côté serveur (ex: bases NoSQL orientées
documents)
Exécuter du JavaScript côté serveur
6. Les moteurs JS
Différents moteurs
Chakra (IE)
{Spider|Jaeger|Trace}.Monkey (Mozilla)
V8 (Chrome)
Rhino (JVM)
Nitro (Apple)
Carakan (Opera)
Evolution des moteurs
Course à la performance lancée par Chrome
JIT, dernières versions de JS (1.8.5)
7. Le langage JavaScript
Quelques spécificités de ce langage orienté objets
Dynamique (runtime vs compilation)
Pas de typage fort
Quelques pièges dûs aux transtypage automatique
Types primitifs restreints : Number, String, Boolean,
undefined, null
Types natifs : Array, Date, Objects, Regexp
Prototypes
Pas de classes mais possibilité d’avoir des constructeurs
Fonctions
Objets comme les autres
Peuvent être passées en paramètre, assignées à des
variables, des propriétés d’objet, modifiées, etc …
Callback !
Scope, this & closures
8. Un même langage côté client et
serveur?
Fondamentaux du langage sont les mêmes …
Syntaxe, portée des variables, opérateurs, non typé
…
… Mais
Côté client on manipule principalement le DOM
Côté serveur, plutôt pas (fs, net)
D’où des frameworks différents (ou pas de framework)
Début de réutilisation de code (socket.io, commonJS,
underscoreJS)
Réutilisation des compétences
9. JavaScript côté serveur
Premier essai en 1996 avec Netscape (Livewire)
De nombreuses plateformes
Node.js, Rhino, CouchDB, Jaxer, APE
Les moteurs JS côté serveur sont-ils adaptés ?
V8
roadmaps Node.JS vs Google
Limite mémoire V8 à 1,5 Go
Mais peu besoin de mémoire
Rhino tourne dans la JVM => adapté
Chakra est orienté client uniquement
10. Et Microsoft ?
Microsoft accompagne ce mouvement important
Sur Windows Azure
Egalement sur Windows Server
Exemples dont nous allons parler:
Node.JS
MongoDB
Hadoop
12. Node.JS
Node.JS a été créé par Ryan Dahl chez Joyent en 2009
C’est un « framework » permettant de développer des
services haute performances sur un modèle asynchrone
Modèle asynchrone plus performant et plus efficace que le
classique modèle multithread quand on a beaucoup I/O
Pas nouveau !
JavaScript choisi car adapté au développement
asynchrone grâce à ses forts aspects fonctionnels
Intègre les protocoles réseaux en standard (ex: HTTP)
Librairie système entièrement asynchrone
Version 0.6.9 stable / 0.7.2 unstable
15. Windows Azure Training Kit
Plusieurs tutoriaux existent et décrivent comment écrire sa
première application avec Node.JS et Windows Azure
Windows Azure Training Kit (PowerShell,
documentation)
Cloud9
IDE en ligne
Suppport de Node.JS
Support de Windows Azure
Fonctionnalités intégrées : édition, versionning,
debug, deploy
16. Node.JS dans Windows Azure
Microsoft aide officiellement Ryan Dahl à porter Node.JS
sur Windows depuis juin 2011
Utilise IOCP
Node est constitué d’un seul exécutable, node.exe, donc
très simple à inclure dans un Worker Role
Supporte Windows Azure et Windows Server 2003+
18. Modèle monothreadé !
Ne jamais bloquer !!!
Créer plusieurs process pour monter en charge
Donc clusteriser pour avoir plusieurs instances
Avec des proxys
Entre Internet et Node.JS
IIS (avec module HTTP iisnode)
Entre Node.JS et les données (par exemple)
connection pooling
Complémentarité Node.JS et son frontal
Nginx classiquement
IIS dans le cas d’Azure
Certains cas d’utilisation à déléguer au frontal:
Ressources statiques
Authentification
19. Ecosystème
Communauté très active
IRC, mailing list, wiki, github
Npm : Node Package Manager (inclus en v0.6)
Beaucoup de modules (~6800 sur npm)
Express (Sinatra-like)
Request
Socket.io
Dnode
Optimist
Version 0.8 se focalise sur cet écosystème
20. Les pièges à éviter
Asynchrone
Race conditions
Soupe de callbacks, lisibilité du code
Librairies « flow control » : async.js, step.js, flow.js, …
Monothreadé => plusieurs process
Clustering natif en 0.6
Encodage
ASCII/UTF-8 only
Les API changent TRÈS vite
Les modules aussi
Culture Devops : déployer souvent
22. Mongo DB
Une des bases noSql importantes du moment
Base orientée documents
Stocke du JSON
Procédures stockées en JavaScript
23. MongoDB et Windows Azure
http://www.mongodb.org/display/DOCS/MongoDB+on+Azur
e
https://github.com/mongodb/mongo-azure
http://www.interoperabilitybridges.com/Azure/Getting_Starte
d_Guide_Node_with_MongoDB.asp
Comparaison avec les services fournis par Windows Azure
Tables et Blobs Windows Azure
SQL Azure Federations
26. Exemple: comptage de mots
Map:
Pour chaque mot trouvé
Émettre <<le mot>>, 1
Shuffle (magiquement géré par le Framework)
Reduce
Pour toutes les occurrences reçues clef, valeur (même
clef)
Comptage += valeur
Émettre clef, comptage
31. En JavaScript, c’est plus lent ?
En l’occurrence non, car
Le moteur Hadoop est écrit en Java
Le JavaScript tourne dans Rhino (JVM)
Pas de « streaming »
Sur un jeu de test de 50 Go de texte
En streaming (communication via stdin / stdout) :
130% de plus que Java
JavaScript :
15% de plus que Java
32. Maintenant, analysons des logs
IIS
Scénario
Web Role Azure
(grosse ferme Web)
Accumulation de logs IIS
(Windows Azure Blobs)
Sélection, formattage, tri, aggrégat
s dans un cluster Hadoop
38. Conclusion
JavaScript prend de plus en plus d’importance
Y compris sur le serveur
Adoption forte par Microsoft
Node.JS sur Windows Azure
Autres moteurs tels que MongoDB
Hadoop sur Windows Azure et Windows
39. Des ressources Windows Azure
gratuites
Testez Windows Azure Abonnés MSDN, vous
gratuitement pendant bénéficiez de
90 jours Windows Azure
http://aka.ms/ http://aka.ms/
tester-azure-90j activer-azure-msdn
40. Pour aller plus loin
Prochaines sessions des Dev Camps
Chaque semaine, les 10
Live Open Data - Développer des applications riches avec le
DevCamps février
2012
Meeting protocole Open Data
ALM, Azure, Windows Phone, HTML5, OpenData 16
Live Azure series - Développer des applications sociales sur
février
http://msdn.microsoft.com/fr-fr/devcamp 2012
Meeting la plateforme Windows Azure
17
Live Comprendre le canvas avec Galactic et la librairie
février
Téléchargement, ressources 2012
Meeting three.js
21
et toolkits : RdV sur MSDN février
2012
Live
Meeting
La production automatisée de code avec CodeFluent
Entities
http://msdn.microsoft.com/fr-fr/
2 mars Live Comprendre et mettre en oeuvre le toolkit Azure pour
2012 Meeting Windows Phone 7, iOS et Android
Les offres à connaître 6 mars
2012
Live
Meeting
Nuget et ALM
90 jours d’essai gratuit de Windows 9 mars
2012
Live
Meeting
Kinect - Bien gérer la vie de son capteur
Azure 13 mars Live
Sharepoint series - Automatisation des tests
www.windowsazure.fr 2012 Meeting
14 mars Live TFS Health Check - vérifier la bonne santé de votre
2012 Meeting plateforme de développement
Jusqu’à 35% de réduction sur Visual
Studio Pro, avec l’abonnement MSDN
15 mars Live Azure series - Développer pour les téléphones, les
2012 Meeting tablettes et le cloud avec Visual Studio 2010
www.visualstudio.fr 16 mars Live Applications METRO design - Désossage en règle d'un
2012 Meeting template METRO javascript
20 mars Live Retour d'expérience LightSwitch, Optimisation de
2012 Meeting l'accès aux données, Intégration Silverlight
23 mars Live OAuth - la clé de l'utilisation des réseaux sociaux dans
2012 Meeting votre application
Notes de l'éditeur
V120127a
http://www.microsoft.com/france/mstechdays/programmes/parcours.aspx#DomID=a1b85459-4eaa-471a-8927-1be7c76fdbb2&SessionID=965a01d5-bd2f-4b60-847f-6d28900fe1e5JavaScript aussi sur le serveur et jusque dans le cloud ?JavaScript prend de plus en plus d'importance et Microsoft rend son exécution très efficace. Nous verrons dans cette session les cas d'utilisation de ce langage sur la plateforme Microsoft au niveau du serveur que ce soit par exemple avec Node.js ou Map/Reduce sur Windows Server et Windows Azure.
L'auteur de Node.JS a vu dans le langage une plateforme idéale pour mettre en oeuvre un serveur dédiée aux entrées-sorties hautes performances asynchrones.Quels cas d'usage? Le Web bien sûr, même si l'architecture de Node.JS paraisse un peu extrême par rapport au trafic typiquement servi par un serveur HTTP classique. Mais surtout tous les échanges de messages effectués dans un cadre "temps réel" : serveurs de discussions ("tchat'"), jeux en réseaux, jeux sociaux, traitement de flux de données, diagnostics temps réel, tableaux de bord, etc.generallyanything about DMA, interrupts, mouse/keyboard/joystick drivers programming, gameprogramming, soundprogramming, multiprocessing.For decades, asynchronous and eventdrivenprogramming has been the domain of hardware leveldevelopers & gamedevelopers.Lib entièrement asynchrone : pas comme twisted, eventmachine
Node.JS est né dans le monde Linux, mais est activement en cours de portage vers Windows, avec le soutien de Microsoft. Il se trouve que Windows dispose en effet d'un mécanisme d'I/O asynchrone natif nommé XXXXX, bien différent des API POSIX, mais qui permettra un portage natif de qualité.L'un des objectifs est bien entendu de pouvoir faire tourner Node.JS facilement sur Windows Azure, afin de bénéficier des apports de l'approche Platform As A Service, étendus au monde Node.JS.