Server Side Javascript in the cloud

40
palais des congrès Paris 7, 8 et 9 février 2012

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

Transcript of Server Side Javascript in the cloud

Page 1: Server Side Javascript in the cloud

palais des congrès Paris

7, 8 et 9 février 2012

Page 2: Server Side Javascript in the cloud

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)

Page 3: Server Side Javascript in the cloud

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

Page 4: Server Side Javascript in the cloud

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

Page 5: Server Side Javascript in the cloud

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

Page 6: Server Side Javascript in the cloud

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

Page 7: Server Side Javascript in the cloud

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

Page 8: Server Side Javascript in the cloud

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?

Page 9: Server Side Javascript in the cloud

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

Page 10: Server Side Javascript in the cloud

Microsoft accompagne ce mouvement important Sur Windows Azure Egalement sur Windows Server

Exemples dont nous allons parler: Node.JS MongoDB Hadoop

Et Microsoft ?

Page 11: Server Side Javascript in the cloud

Windows Azure résolument ouvert

Page 12: Server Side Javascript in the cloud

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

Page 13: Server Side Javascript in the cloud

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

Page 14: Server Side Javascript in the cloud

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++

Page 15: Server Side Javascript in the cloud

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

Page 16: Server Side Javascript in the cloud

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+

Page 17: Server Side Javascript in the cloud

Node.JS sur Windows Azureproxy avec modifications de

données

Page 18: Server Side Javascript in the cloud

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é !

Page 19: Server Side Javascript in the cloud

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

Page 20: Server Side Javascript in the cloud

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

Page 21: Server Side Javascript in the cloud

Node.JS sur Windows Azureserveur de chat

Page 22: Server Side Javascript in the cloud

Une des bases noSql importantes du momentBase orientée documents Stocke du JSON Procédures stockées en JavaScript

Mongo DB

Page 23: Server Side Javascript in the cloud

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

Page 24: Server Side Javascript in the cloud

Node.JS accédant à des tables MongoDBsur Windows Azure

Page 25: Server Side Javascript in the cloud

Extrait de « Hadoop Tutorial from Yahoo!" (Yahoo! Inc.) / CC BY 3.0 »

Hadoop:implémentation de Map/Reduce

Page 26: Server Side Javascript in the cloud

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

Page 27: Server Side Javascript in the cloud

Map/Reduce - Java

Page 28: Server Side Javascript in the cloud

Map/Reduce – C#

Page 29: Server Side Javascript in the cloud

Map/Reduce - JavaScript

Page 30: Server Side Javascript in the cloud

Hadoop – vue d’ensemble

ETL Tools BI Reporting RDBMS

Page 31: Server Side Javascript in the cloud

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 ?

Page 32: Server Side Javascript in the cloud

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

Page 33: Server Side Javascript in the cloud

Création d’un cluster à la demande

Page 34: Server Side Javascript in the cloud

Création d’un cluster à la demande

Page 35: Server Side Javascript in the cloud

Connexion aux Blobs Windows Azure

Page 36: Server Side Javascript in the cloud

Analyse de logs IIS

H

D

HD

Page 37: Server Side Javascript in the cloud

Hadoop On Azure en JavaScript

Page 38: Server Side Javascript in the cloud

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

Page 39: Server Side Javascript in the cloud

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

Page 40: Server Side Javascript in the cloud

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