Upload
stefounet
View
1.082
Download
0
Embed Size (px)
DESCRIPTION
Session performed at Microsoft Techdays 2012 in Paris. Talked about Node.JS, MongoDB and Hadoop on Windows Azure. Available NodeJS demos here : - https://github.com/fasterize/DemoTechdays2012Chat - https://github.com/fasterize/DemoTechdays2012Proxy - https://github.com/fasterize/techdays
Citation preview
palais des congrès Paris
7, 8 et 9 février 2012
7 février 2012
JavaScript aussi sur le serveur et jusque dans le cloud ?
Benjamin Guinebertièrewww.benjguin.comrelation technique architectesMicrosoft France
Stéphane Rios@stefounetCEO / CTO FounderFasterize (fasterize.com)
Fasterize
Startup créée mi-2011, en phase de beta privéeAccé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
ContexteJavaScript côté serveurComment 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
ServerConclusion
Plan
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
15 ans de JavaScript
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)
Les moteurs JS
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
Le langage JavaScript
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
Un même langage côté client et 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
JavaScript côté serveur
Microsoft accompagne ce mouvement important Sur Windows Azure Egalement sur Windows Server
Exemples dont nous allons parler: Node.JS MongoDB Hadoop
Et Microsoft ?
Windows Azure résolument ouvert
Node.JS
Node.JS a été créé par Ryan Dahl chez Joyent en 2009C’est un « framework » permettant de développer des services haute performances sur un modèle asynchroneModè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 fonctionnelsIntègre les protocoles réseaux en standard (ex: HTTP)Librairie système entièrement asynchroneVersion 0.6.9 stable / 0.7.2 unstable
var http = require('http');
http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/html'}); res.end('Hello Node !');}).listen(8124, '127.0.0.1');console.log('Server running at http://127.0.0.1:8124/');
Hello Node
var http = require('http'),mysql = require('mysql'), client = mysql.createClient({user: 'root'}));
client.query('use castle;');
http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/json'}); client.query('select * from dragons',function (err,data){ if (err) { res.end('ERROR'); } else { res.end(JSON.stringify(data)); } });}).listen(8124, '127.0.0.1');console.log('Server running at http://127.0.0.1:8124/');
Hello Node++
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
Windows Azure Training Kit
Node.JS dans Windows Azure
Microsoft aide officiellement Ryan Dahl à porter Node.JS sur Windows depuis juin 2011Utilise IOCPNode est constitué d’un seul exécutable, node.exe, donc très simple à inclure dans un Worker RoleSupporte Windows Azure et Windows Server 2003+
Node.JS sur Windows Azureproxy avec modifications de
données
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 poolingComplé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
Modèle monothreadé !
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
Ecosystème
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
Les pièges à éviter
Node.JS sur Windows Azureserveur de chat
Une des bases noSql importantes du momentBase orientée documents Stocke du JSON Procédures stockées en JavaScript
Mongo DB
http://www.mongodb.org/display/DOCS/MongoDB+on+Azurehttps://github.com/mongodb/mongo-azurehttp://www.interoperabilitybridges.com/Azure/Getting_Started_Guide_Node_with_MongoDB.asp
Comparaison avec les services fournis par Windows Azure Tables et Blobs Windows Azure SQL Azure Federations
MongoDB et Windows Azure
Node.JS accédant à des tables MongoDBsur Windows Azure
Extrait de « Hadoop Tutorial from Yahoo!" (Yahoo! Inc.) / CC BY 3.0 »
Hadoop:implémentation de Map/Reduce
Map: Pour chaque mot trouvé
Émettre <<le mot>>, 1Shuffle (magiquement géré par le Framework)Reduce Pour toutes les occurrences reçues clef, valeur
(même clef) Comptage += valeur Émettre clef, comptage
Exemple: comptage de mots
Map/Reduce - Java
Map/Reduce – C#
Map/Reduce - JavaScript
Hadoop – vue d’ensemble
ETL Tools BI Reporting RDBMS
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
En JavaScript, c’est plus lent ?
Scénario
Maintenant, analysons des logs IIS
Web Role Azure (grosse ferme Web)
Accumulation de logs IIS(Windows Azure Blobs)
Sélection, formattage, tri, aggrégats dans un cluster Hadoop
Création d’un cluster à la demande
Création d’un cluster à la demande
Connexion aux Blobs Windows Azure
Analyse de logs IIS
H
D
HD
Hadoop On Azure en JavaScript
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
Conclusion
Des ressources Windows Azure gratuites
Testez Windows Azure gratuitement pendant 90 jours http://aka.ms/
tester-azure-90j
Abonnés MSDN, vous bénéficiez de Windows Azure http://aka.ms/
activer-azure-msdn
Chaque semaine, les DevCampsALM, Azure, Windows Phone, HTML5, OpenDatahttp://msdn.microsoft.com/fr-fr/devcamp
Téléchargement, ressources et toolkits : RdV sur MSDNhttp://msdn.microsoft.com/fr-fr/
Les offres à connaître90 jours d’essai gratuit de Windows Azure www.windowsazure.fr
Jusqu’à 35% de réduction sur Visual Studio Pro, avec l’abonnement MSDN www.visualstudio.fr
Pour aller plus loin
10 février 2012
Live Meeting
Open Data - Développer des applications riches avec le protocole Open Data
16 février 2012
Live Meeting
Azure series - Développer des applications sociales sur la plateforme Windows Azure
17 février 2012
Live Meeting
Comprendre le canvas avec Galactic et la librairie three.js
21 février 2012
Live Meeting
La production automatisée de code avec CodeFluent Entities
2 mars 2012
Live Meeting
Comprendre et mettre en oeuvre le toolkit Azure pour Windows Phone 7, iOS et Android
6 mars 2012
Live Meeting
Nuget et ALM
9 mars 2012
Live Meeting
Kinect - Bien gérer la vie de son capteur
13 mars 2012
Live Meeting
Sharepoint series - Automatisation des tests
14 mars 2012
Live Meeting
TFS Health Check - vérifier la bonne santé de votre plateforme de développement
15 mars 2012
Live Meeting
Azure series - Développer pour les téléphones, les tablettes et le cloud avec Visual Studio 2010
16 mars 2012
Live Meeting
Applications METRO design - Désossage en règle d'un template METRO javascript
20 mars 2012
Live Meeting
Retour d'expérience LightSwitch, Optimisation de l'accès aux données, Intégration Silverlight
23 mars 2012
Live Meeting
OAuth - la clé de l'utilisation des réseaux sociaux dans votre application
Prochaines sessions des Dev Camps