2014.12.11 - tech conf #3 - présentation node.js

24
TechConf Autour de Node.js Luc Juggery (@lucjuggery) - 11 décembre 2014

Upload: telecomvalley

Post on 12-Jul-2015

66 views

Category:

Internet


0 download

TRANSCRIPT

Page 1: 2014.12.11 - TECH CONF #3 - Présentation Node.js

TechConfAutour de Node.js

Luc Juggery (@lucjuggery) - 11 décembre 2014

Page 2: 2014.12.11 - TECH CONF #3 - Présentation Node.js

Au programme

● Les concepts

● Un écosystème

● Sails.js - framework de développement web

2

Page 3: 2014.12.11 - TECH CONF #3 - Présentation Node.js

● Les concepts

● Un écosystème

● Sails.js - framework de développement web

3

Page 4: 2014.12.11 - TECH CONF #3 - Présentation Node.js

Les concepts

JavaScript

Server sideEvent loop

Non blocking I/O

Chrome V8

Single thread Callback

4

Page 5: 2014.12.11 - TECH CONF #3 - Présentation Node.js

Les concepts: Chrome V8

● Moteur d’exécution de JavaScript présent dans Google Chrome

● Utilisé pour faire tourner du JavaScript hors navigateur

● Très performant (phase de compilation) 5

Page 6: 2014.12.11 - TECH CONF #3 - Présentation Node.js

Les concepts: JavaScript coté serveur

● Node.js ⇒ code JavaScript exécuté par Chrome V8

● Très utilisé pour des applications réseaux

o serveur HTTP / TCP / ...

o WebSocket (ex: messagerie instantanée)

● D’autres utilisations: scripting, DevOps, ...

● Ne convient pas à tous les usages

6

Page 7: 2014.12.11 - TECH CONF #3 - Présentation Node.js

Les concepts: Single thread

● “Everything runs in parallel except your code”

● Une application Node.js ne lance qu’un seul thread

● Ne convient pas pour des traitements concurrents gourmands en CPU

⇒ risque de blocage du thread

● Permet au contraire une grande concurrence pour des traitements

utilisant beaucoup d’I/O

⇒ comment ? 7

Page 8: 2014.12.11 - TECH CONF #3 - Présentation Node.js

Les concepts: Non blocking I/O

● La gestion des I/O est effectuée de façon asynchrone

o disque / réseau / database / …

o ne bloque pas le thread principal

● blocking I/O vs Non blocking I/O

> blocking I/O ⇒ attend la fin du traitement

> non blocking I/O ⇒ sert le client suivant et attend

d’être notifié par les clients précédents (callback)

● Lié aux notions de callback et d’event loop8

Page 9: 2014.12.11 - TECH CONF #3 - Présentation Node.js

Les concepts - Callback exemple 1

Réception d’une requête ⇒ déclenchement de la fonction de callback

événement

fonction de

callback

Server HTTP

9

Page 10: 2014.12.11 - TECH CONF #3 - Présentation Node.js

Fonctions de callback encapsulées

Les concepts - Callback exemple 2

10

Page 11: 2014.12.11 - TECH CONF #3 - Présentation Node.js

● Callback: méthode en attente d’événements I/O

● Event loop: basée sur l’architecture événementielle de JavaScript

o enregistrement des callbacks au lancement de l’application

o déclenche les callbacks sur réception d’événements

1. Event loop lancée à

l’exécution du code

3. Envoi d’un événement

lorsqu’un traitement est

terminé

2. Enregistrement des

fonctions de callback

Les concepts - Event loop / Callback

4. Déclenchement de la

fonction de callback

correspondante

11

Page 12: 2014.12.11 - TECH CONF #3 - Présentation Node.js

C’est l’heure du Quiz !

Question: un serveur web Node.js est plus approprié pour:

A. des traitements gourmands en CPU

B. des traitements avec beaucoup d’I/O et peu de CPU

C. des traitements sans I/O

D. des calculs scientifiques complexes

Répondez vite en tweetant sur @TechConfQuiz

12

Page 13: 2014.12.11 - TECH CONF #3 - Présentation Node.js

● Les concepts

● Un écosystème

● Sails.js - framework de développement web

13

Page 14: 2014.12.11 - TECH CONF #3 - Présentation Node.js

Un écosystème - NPM

● Gestionnaire de modules de Node.js

● De nombreux modules très matures

● Grande communauté

● Une CLI riche (npmjs.org/doc/)

o pour gérer les modules

o pour interagir avec l’application (init / start / stop / test / …)

14

Page 15: 2014.12.11 - TECH CONF #3 - Présentation Node.js

Un écosystème - package.json

● Descriptif de l’application

o conserve les versions des dépendances

o ‘npm init’ ⇒ création du fichier package.json

o ‘npm install MODULE --save’ ⇒ compile et trace les dépendances

npm install request --savenpm init

15

Page 16: 2014.12.11 - TECH CONF #3 - Présentation Node.js

Un écosystème - démo

● Génération du package.json

● Installation du module request (client http)

o modification du package.json

o génération du folder node_modules

● Mise en place d’une requête simple

● Lancement de l’application

16

Page 17: 2014.12.11 - TECH CONF #3 - Présentation Node.js

● connect - framework pour serveur http ⇔ Ruby Rack

● express - ajoute des vues dynamic et un DSL pour la description des routes (connect+)

● request - client http

● async - maitrise du flux et simplification du callback hell

● socket.io - websocket

● mocha - framework de test très complet

● winston - framework de logging

● forever / pm2 - supervision de l’application

● grunt / gulp - lanceur de tache ⇔ Ruby Rake

● lodash - ensemble d’utilitaires

● momentjs - facilite l’utilisation des date / time

Un ecosystème - des modules clés

17

Page 18: 2014.12.11 - TECH CONF #3 - Présentation Node.js

● Les concepts

● Un écosystème

● Sails.js - framework de développement web

18

Page 19: 2014.12.11 - TECH CONF #3 - Présentation Node.js

Sails.js - positionnement du framework

● MVC framework for Node.js

● Inspiré de Ruby On Rails

● Basé sur Express et Socket.io

● Vues dynamiques (template EJS)

● Focus sur les API HTTP REST

● Compatible SQL / NoSQL

● Architecture très structurante

19

Page 20: 2014.12.11 - TECH CONF #3 - Présentation Node.js

> npm install -g sails

> sails new TechConfSailsApp

> sails generate api user

> sails lift

Sails.js - API Rest démo 1/2

20

Page 21: 2014.12.11 - TECH CONF #3 - Présentation Node.js

>

> curl -XPOST http://localhost:1337/user?name=Stephane

Sails.js - API Rest démo 2/2

21

Page 22: 2014.12.11 - TECH CONF #3 - Présentation Node.js

Sails.js - Exemple de projet

Backend: Sails API

Front-end: Sails EJS + Twitter Bootstrap22

Page 23: 2014.12.11 - TECH CONF #3 - Présentation Node.js

● Un framework mature (même si pas encore en 1.0)

● Utilisé par des grosses entreprises (eBay, Walmart, …)

● Beaucoup de modules en version 0.0.y / 0.x.y

o certains déjà matures

o peut effrayer les clients

● Des avis contraires

o node.js is cancer

o node.js cures cancer

● Ne convient pas à tous les besoins

A tester sur des uses cases métiers

Conclusion

23

Page 24: 2014.12.11 - TECH CONF #3 - Présentation Node.js

Merci !