SlideShare une entreprise Scribd logo
1  sur  10
Télécharger pour lire hors ligne
Javascript côté serveur : la révolution Node.js
               Simon Courtois
               Architecte logiciel
            scourtois@linagora.com




                                      WWW.LINAGORA.COM
Programmation classique

var data = file.read('file.txt') 
var data = doSomething(data) 
file.write('file2.txt', data)




Fil 1

Fil 2

Fil 3

Fil 4

Fil 5

Fil 6

Fil 7

Fil 8


                                    2
Programmation classique

Fil 1
Fil 2

Fil 3
Fil 4

Fil 5
Fil 6
Fil 7
Fil 8


● Threads / processes perpétuellement en attente
● Coût (performances et mémoire) de création d'un thread / process
● Effondrement des performances lorsque la concurrence est forte


                                  3
Programmation asynchrone

var data = file.read('file.txt'), function(data) {
  var data = doSomething(data) 
  file.write('file2.txt', data)
}




● Appels de fonction non bloquants : rendent la main immédiatement puis
  appellent une fonction de callback une fois leur tâche terminée.
● Multi-process / multi-thread inutile : tout se gère depuis une boucle
  événementielle
● Pas de lock à gérer, ni de parallélisme à gérer explicitement : tout est fait
  dans le dos du développeur
● Effondrement du dispositif si un ou plusieurs appels sont bloquants


   Node.js apporte une couche de gestion des entrées / sorties entièrement
   non bloquante
                                             4
Javascript côté serveur



                              ● Le meilleur langage pour
                                bien appréhender la
                                programmation
                                asynchrone : méthodologie
                                identique à celle des
                                appels AJAX.
                              ● Maturité du langage :
                                CommonJS, ECMAScript 5,
                                etc.
                              ● Hautes performances




                          5
Exemple de code : un serveur web simple




      var http = require('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/');




                                6
Exemple de code : un chat en 14 lignes de code




                              7
Performances : 100 000 requêtes, 1000 concurrentes




                              8
Performances : 1 000 000 requêtes, 20 000 concurrentes




                              9
Merci de votre attention

                                              Contact :
                                LINAGORA – Siège social
                                 80, rue Roque de Fillol
                                         92800 PUTEAUX
                                                 FRANCE
                       Tél. : 0 810 251 251 (tarif local)
                              Fax : +33 (0)1 46 96 63 64
                               Mail : info@linagora.com
                              Web : www.linagora.com

                       WWW.LINAGORA.COM

Contenu connexe

Plus de LINAGORA

Call a C API from Python becomes more enjoyable with CFFI
Call a C API from Python becomes more enjoyable with CFFICall a C API from Python becomes more enjoyable with CFFI
Call a C API from Python becomes more enjoyable with CFFILINAGORA
 
[UDS] Cloud Computing "pour les nuls" (Exemple avec LinShare)
[UDS] Cloud Computing "pour les nuls" (Exemple avec LinShare)[UDS] Cloud Computing "pour les nuls" (Exemple avec LinShare)
[UDS] Cloud Computing "pour les nuls" (Exemple avec LinShare)LINAGORA
 
Angular v2 et plus : le futur du développement d'applications en entreprise
Angular v2 et plus : le futur du développement d'applications en entrepriseAngular v2 et plus : le futur du développement d'applications en entreprise
Angular v2 et plus : le futur du développement d'applications en entrepriseLINAGORA
 
Comment faire ses mappings ElasticSearch aux petits oignons ? - LINAGORA
Comment faire ses mappings ElasticSearch aux petits oignons ? - LINAGORAComment faire ses mappings ElasticSearch aux petits oignons ? - LINAGORA
Comment faire ses mappings ElasticSearch aux petits oignons ? - LINAGORALINAGORA
 
Angular (v2 and up) - Morning to understand - Linagora
Angular (v2 and up) - Morning to understand - LinagoraAngular (v2 and up) - Morning to understand - Linagora
Angular (v2 and up) - Morning to understand - LinagoraLINAGORA
 
Industrialisez le développement et la maintenance de vos sites avec Drupal
Industrialisez le développement et la maintenance de vos sites avec DrupalIndustrialisez le développement et la maintenance de vos sites avec Drupal
Industrialisez le développement et la maintenance de vos sites avec DrupalLINAGORA
 
CapDémat Evolution plateforme de GRU pour collectivités
CapDémat Evolution plateforme de GRU pour collectivitésCapDémat Evolution plateforme de GRU pour collectivités
CapDémat Evolution plateforme de GRU pour collectivitésLINAGORA
 
Présentation du marché P2I UGAP « Support sur Logiciels Libres »
Présentation du marché P2I UGAP « Support sur Logiciels Libres »Présentation du marché P2I UGAP « Support sur Logiciels Libres »
Présentation du marché P2I UGAP « Support sur Logiciels Libres »LINAGORA
 
Offre de demat d'Adullact projet
Offre de demat d'Adullact projet Offre de demat d'Adullact projet
Offre de demat d'Adullact projet LINAGORA
 
La dématérialisation du conseil minicipal
La dématérialisation du conseil minicipalLa dématérialisation du conseil minicipal
La dématérialisation du conseil minicipalLINAGORA
 
Open stack @ sierra wireless
Open stack @ sierra wirelessOpen stack @ sierra wireless
Open stack @ sierra wirelessLINAGORA
 
OpenStack - open source au service du Cloud
OpenStack - open source au service du CloudOpenStack - open source au service du Cloud
OpenStack - open source au service du CloudLINAGORA
 
Architecture d'annuaire hautement disponible avec OpenLDAP
Architecture d'annuaire hautement disponible avec OpenLDAPArchitecture d'annuaire hautement disponible avec OpenLDAP
Architecture d'annuaire hautement disponible avec OpenLDAPLINAGORA
 
Présentation offre LINID
Présentation offre LINIDPrésentation offre LINID
Présentation offre LINIDLINAGORA
 
Matinée pour conmrendre consacrée à LinID.org, gestion, fédération et contrôl...
Matinée pour conmrendre consacrée à LinID.org, gestion, fédération et contrôl...Matinée pour conmrendre consacrée à LinID.org, gestion, fédération et contrôl...
Matinée pour conmrendre consacrée à LinID.org, gestion, fédération et contrôl...LINAGORA
 
Matinée pour conmrendre consacrée à LinShare.org, application de partage de f...
Matinée pour conmrendre consacrée à LinShare.org, application de partage de f...Matinée pour conmrendre consacrée à LinShare.org, application de partage de f...
Matinée pour conmrendre consacrée à LinShare.org, application de partage de f...LINAGORA
 
Open Source Software Assurance by Linagora
Open Source Software Assurance by LinagoraOpen Source Software Assurance by Linagora
Open Source Software Assurance by LinagoraLINAGORA
 
Présentation de l’extension Lightning pour Thunderbird
Présentation de l’extension Lightning pour ThunderbirdPrésentation de l’extension Lightning pour Thunderbird
Présentation de l’extension Lightning pour ThunderbirdLINAGORA
 
Présentation de la nouvelle version de Mozilla Thunderbird
Présentation de la nouvelle version de Mozilla ThunderbirdPrésentation de la nouvelle version de Mozilla Thunderbird
Présentation de la nouvelle version de Mozilla ThunderbirdLINAGORA
 
Présentation de la roadmap OBM, 28 août 2012
Présentation de la roadmap OBM, 28 août 2012Présentation de la roadmap OBM, 28 août 2012
Présentation de la roadmap OBM, 28 août 2012LINAGORA
 

Plus de LINAGORA (20)

Call a C API from Python becomes more enjoyable with CFFI
Call a C API from Python becomes more enjoyable with CFFICall a C API from Python becomes more enjoyable with CFFI
Call a C API from Python becomes more enjoyable with CFFI
 
[UDS] Cloud Computing "pour les nuls" (Exemple avec LinShare)
[UDS] Cloud Computing "pour les nuls" (Exemple avec LinShare)[UDS] Cloud Computing "pour les nuls" (Exemple avec LinShare)
[UDS] Cloud Computing "pour les nuls" (Exemple avec LinShare)
 
Angular v2 et plus : le futur du développement d'applications en entreprise
Angular v2 et plus : le futur du développement d'applications en entrepriseAngular v2 et plus : le futur du développement d'applications en entreprise
Angular v2 et plus : le futur du développement d'applications en entreprise
 
Comment faire ses mappings ElasticSearch aux petits oignons ? - LINAGORA
Comment faire ses mappings ElasticSearch aux petits oignons ? - LINAGORAComment faire ses mappings ElasticSearch aux petits oignons ? - LINAGORA
Comment faire ses mappings ElasticSearch aux petits oignons ? - LINAGORA
 
Angular (v2 and up) - Morning to understand - Linagora
Angular (v2 and up) - Morning to understand - LinagoraAngular (v2 and up) - Morning to understand - Linagora
Angular (v2 and up) - Morning to understand - Linagora
 
Industrialisez le développement et la maintenance de vos sites avec Drupal
Industrialisez le développement et la maintenance de vos sites avec DrupalIndustrialisez le développement et la maintenance de vos sites avec Drupal
Industrialisez le développement et la maintenance de vos sites avec Drupal
 
CapDémat Evolution plateforme de GRU pour collectivités
CapDémat Evolution plateforme de GRU pour collectivitésCapDémat Evolution plateforme de GRU pour collectivités
CapDémat Evolution plateforme de GRU pour collectivités
 
Présentation du marché P2I UGAP « Support sur Logiciels Libres »
Présentation du marché P2I UGAP « Support sur Logiciels Libres »Présentation du marché P2I UGAP « Support sur Logiciels Libres »
Présentation du marché P2I UGAP « Support sur Logiciels Libres »
 
Offre de demat d'Adullact projet
Offre de demat d'Adullact projet Offre de demat d'Adullact projet
Offre de demat d'Adullact projet
 
La dématérialisation du conseil minicipal
La dématérialisation du conseil minicipalLa dématérialisation du conseil minicipal
La dématérialisation du conseil minicipal
 
Open stack @ sierra wireless
Open stack @ sierra wirelessOpen stack @ sierra wireless
Open stack @ sierra wireless
 
OpenStack - open source au service du Cloud
OpenStack - open source au service du CloudOpenStack - open source au service du Cloud
OpenStack - open source au service du Cloud
 
Architecture d'annuaire hautement disponible avec OpenLDAP
Architecture d'annuaire hautement disponible avec OpenLDAPArchitecture d'annuaire hautement disponible avec OpenLDAP
Architecture d'annuaire hautement disponible avec OpenLDAP
 
Présentation offre LINID
Présentation offre LINIDPrésentation offre LINID
Présentation offre LINID
 
Matinée pour conmrendre consacrée à LinID.org, gestion, fédération et contrôl...
Matinée pour conmrendre consacrée à LinID.org, gestion, fédération et contrôl...Matinée pour conmrendre consacrée à LinID.org, gestion, fédération et contrôl...
Matinée pour conmrendre consacrée à LinID.org, gestion, fédération et contrôl...
 
Matinée pour conmrendre consacrée à LinShare.org, application de partage de f...
Matinée pour conmrendre consacrée à LinShare.org, application de partage de f...Matinée pour conmrendre consacrée à LinShare.org, application de partage de f...
Matinée pour conmrendre consacrée à LinShare.org, application de partage de f...
 
Open Source Software Assurance by Linagora
Open Source Software Assurance by LinagoraOpen Source Software Assurance by Linagora
Open Source Software Assurance by Linagora
 
Présentation de l’extension Lightning pour Thunderbird
Présentation de l’extension Lightning pour ThunderbirdPrésentation de l’extension Lightning pour Thunderbird
Présentation de l’extension Lightning pour Thunderbird
 
Présentation de la nouvelle version de Mozilla Thunderbird
Présentation de la nouvelle version de Mozilla ThunderbirdPrésentation de la nouvelle version de Mozilla Thunderbird
Présentation de la nouvelle version de Mozilla Thunderbird
 
Présentation de la roadmap OBM, 28 août 2012
Présentation de la roadmap OBM, 28 août 2012Présentation de la roadmap OBM, 28 août 2012
Présentation de la roadmap OBM, 28 août 2012
 

Javascript côté serveur : la révolution Node.js

  • 1. Javascript côté serveur : la révolution Node.js Simon Courtois Architecte logiciel scourtois@linagora.com WWW.LINAGORA.COM
  • 2. Programmation classique var data = file.read('file.txt')  var data = doSomething(data)  file.write('file2.txt', data) Fil 1 Fil 2 Fil 3 Fil 4 Fil 5 Fil 6 Fil 7 Fil 8 2
  • 3. Programmation classique Fil 1 Fil 2 Fil 3 Fil 4 Fil 5 Fil 6 Fil 7 Fil 8 ● Threads / processes perpétuellement en attente ● Coût (performances et mémoire) de création d'un thread / process ● Effondrement des performances lorsque la concurrence est forte 3
  • 4. Programmation asynchrone var data = file.read('file.txt'), function(data) { var data = doSomething(data)  file.write('file2.txt', data) } ● Appels de fonction non bloquants : rendent la main immédiatement puis appellent une fonction de callback une fois leur tâche terminée. ● Multi-process / multi-thread inutile : tout se gère depuis une boucle événementielle ● Pas de lock à gérer, ni de parallélisme à gérer explicitement : tout est fait dans le dos du développeur ● Effondrement du dispositif si un ou plusieurs appels sont bloquants Node.js apporte une couche de gestion des entrées / sorties entièrement non bloquante 4
  • 5. Javascript côté serveur ● Le meilleur langage pour bien appréhender la programmation asynchrone : méthodologie identique à celle des appels AJAX. ● Maturité du langage : CommonJS, ECMAScript 5, etc. ● Hautes performances 5
  • 6. Exemple de code : un serveur web simple var http = require('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/'); 6
  • 7. Exemple de code : un chat en 14 lignes de code 7
  • 8. Performances : 100 000 requêtes, 1000 concurrentes 8
  • 9. Performances : 1 000 000 requêtes, 20 000 concurrentes 9
  • 10. Merci de votre attention Contact : LINAGORA – Siège social 80, rue Roque de Fillol 92800 PUTEAUX FRANCE Tél. : 0 810 251 251 (tarif local) Fax : +33 (0)1 46 96 63 64 Mail : info@linagora.com Web : www.linagora.com WWW.LINAGORA.COM