Difference between revisions of "EA2013 Principes et canvas de programmation evenementiels"
Thomas.Nunes (talk | contribs) |
Thomas.Nunes (talk | contribs) |
||
Line 1: | Line 1: | ||
+ | [[File:logo_node_ngnix.jpg|thumb|upright=2.5|alt=Server market| node.js, Nginx twisted et tornado]] |
||
+ | |||
= Présentation = |
= Présentation = |
||
Line 18: | Line 20: | ||
Pour leurs application mobile en HTML5, le réseau social utilisait 30 serveurs pour gérer l'application avec le framework ruby on rails. Pour des raisons de performances la société a choisit d'utiliser un canvas de programmation évenementielle et ont chosit la technologie [[Node.js]]. Résultat la nouvelle application sous node.js ne demandais que 3 serveurs avec une amélioration des performances jusqu'à 20 fois selon certains scénarios. |
Pour leurs application mobile en HTML5, le réseau social utilisait 30 serveurs pour gérer l'application avec le framework ruby on rails. Pour des raisons de performances la société a choisit d'utiliser un canvas de programmation évenementielle et ont chosit la technologie [[Node.js]]. Résultat la nouvelle application sous node.js ne demandais que 3 serveurs avec une amélioration des performances jusqu'à 20 fois selon certains scénarios. |
||
− | === Regroupement des |
+ | === Regroupement des équipes === |
Le second aspect est la possibilité qui est offerte aux ingénieurs front-end JavaScript de pouvoir participer au code du serveur. Les deux équipes ont finalement été fusionnées en une seule au sein de l'entreprise. |
Le second aspect est la possibilité qui est offerte aux ingénieurs front-end JavaScript de pouvoir participer au code du serveur. Les deux équipes ont finalement été fusionnées en une seule au sein de l'entreprise. |
||
Line 29: | Line 31: | ||
== Le principe == |
== Le principe == |
||
+ | Un seul thread avec une boucle événementielle |
||
+ | Rendre la main rapidement |
||
+ | Pas d’appels bloquants |
||
+ | Déléguer les gros calculs (fork, threads,...) |
||
+ | |||
== L'analogie du roi == |
== L'analogie du roi == |
||
+ | “Le roi ordonne à ses messagers, qui reviennent dès qu'ils le peuvent, et le roi traite les réponses au fur et à mesure, une à la fois.” |
||
== Conséquences == |
== Conséquences == |
||
+ | //lecture de 3 fichiers |
||
+ | fs.readFile('fichier1', /* ... */ ); |
||
+ | fs.readFile('fichier2', /* ... */ ); |
||
+ | fs.readFile('fichier3', /* ... */ ); |
||
+ | |||
+ | //Impossible de prédire |
||
+ | //l'ordre de réponse |
||
= Solutions existantes = |
= Solutions existantes = |
||
== Les principales solutions == |
== Les principales solutions == |
||
+ | === Serveur web uniquement === |
||
+ | * NginX: logiciel de serveur Web |
||
+ | === Plateforme d’applications === |
||
+ | * Node.js: Javascript |
||
+ | * Tornado: Python projet mené par Facebook |
||
+ | * Twisted: Python |
||
+ | |||
== 10 000 req/s avec NginX == |
== 10 000 req/s avec NginX == |
||
+ | [[File:benchmark_ngnix.jpg|upright=2.5|alt=Benchmark Nginx|Comparaison entre Nginx et Apache sur la quantité de requêtes traitées et la consommation mémoire en fonction du nombre de clients concurrents.]] |
||
== Node.js == |
== Node.js == |
||
+ | * Basé sur le moteur V8 de chrome |
||
+ | * 2 ans d’existence |
||
+ | * Javascript ou CoffeeScript |
||
+ | * Nombreux Frameworks: express, sails.js |
||
+ | * Gestionnaire d’extensions npm |
||
= Conclusion = |
= Conclusion = |
||
+ | * Performances et accès bas niveau |
||
+ | * Bonnes pratiques à mettre en place |
||
+ | * Contenu statique (css, images, fichier javascript) |
||
+ | * Forte sollicitation de fichiers ou de BDD |
||
+ | * Temps réel, streaming, application web riche (HTML5) |
||
+ | |||
= Références = |
= Références = |
||
* Programmation événementielle [http://fr.wikipedia.org/wiki/Programmation_%C3%A9v%C3%A9nementielle] |
* Programmation événementielle [http://fr.wikipedia.org/wiki/Programmation_%C3%A9v%C3%A9nementielle] |
Revision as of 00:54, 15 November 2013
Présentation
- Enseignants : Georges-Pierre Bonneau, Didier Donsez (EA2013)
- Auteur : Thomas Nunes <thomas.nunes-da-silva AT e.ujf-grenoble.fr>
- présentation: Media:EA_2013_programmation_evenementielle.pdf
Abstract
In computer programming, event-based programming is a programming paradigm in which the flow of the program is determined by events like sensor outputs or user actions (mouse clicks, key presses) or then messages from other programs or threads. It exists some programming canvas to implement this kind of programming paradigm, Node.js, Twisted and nginx will be present here.
Résumé
En informatique, une programmation événementielle se dit d'un paradigme de programmation fondé sur les événements. Elle s'oppose à la programmation séquentielle. Le programme sera principalement défini par ses réactions aux différents événements qui peuvent se produire, c'est-à-dire des changements d'état de variable, par exemple l'incrémentation d'une liste, un mouvement de souris ou de clavier. Il existe de nombreux canvas de présentation permettant ce type de programmation,Node.js, Twisted et nginx seront présentés ici.
Motivations
Node.js arrive chez Linked'In
Un avantage de performances
Pour leurs application mobile en HTML5, le réseau social utilisait 30 serveurs pour gérer l'application avec le framework ruby on rails. Pour des raisons de performances la société a choisit d'utiliser un canvas de programmation évenementielle et ont chosit la technologie Node.js. Résultat la nouvelle application sous node.js ne demandais que 3 serveurs avec une amélioration des performances jusqu'à 20 fois selon certains scénarios.
Regroupement des équipes
Le second aspect est la possibilité qui est offerte aux ingénieurs front-end JavaScript de pouvoir participer au code du serveur. Les deux équipes ont finalement été fusionnées en une seule au sein de l'entreprise.
Nginx numéro 2 en 5 ans
Apache la solution historique est le leader des serveurs webs dans le monde avec une part de marché d'environ 60% depuis 10 ans. la solution IIS de Microsoft, historiquement 2éme du marché a quant à celle perdu au fur et à mesure des part de marché de (25% en 2000 à 10% en 2013). Seul Nginx et Google progressent et gagne des parts. Google ne partage ni ne commercialise sa solution et sa progression ne reflète que la croissance de la société et l'importance de sa présence sur le Web. Nginx est un serveur web open-source événementiel qui en cinq ans est devenus la seconde solution de serveur web, ce qui démontre l’intérêt qui est consacrer à la programmation événementielle.
La Programmation événementielle
Le principe
Un seul thread avec une boucle événementielle Rendre la main rapidement Pas d’appels bloquants Déléguer les gros calculs (fork, threads,...)
L'analogie du roi
“Le roi ordonne à ses messagers, qui reviennent dès qu'ils le peuvent, et le roi traite les réponses au fur et à mesure, une à la fois.”
Conséquences
//lecture de 3 fichiers fs.readFile('fichier1', /* ... */ ); fs.readFile('fichier2', /* ... */ ); fs.readFile('fichier3', /* ... */ );
//Impossible de prédire //l'ordre de réponse
Solutions existantes
Les principales solutions
Serveur web uniquement
- NginX: logiciel de serveur Web
Plateforme d’applications
- Node.js: Javascript
- Tornado: Python projet mené par Facebook
- Twisted: Python
10 000 req/s avec NginX
Node.js
- Basé sur le moteur V8 de chrome
- 2 ans d’existence
- Javascript ou CoffeeScript
- Nombreux Frameworks: express, sails.js
- Gestionnaire d’extensions npm
Conclusion
- Performances et accès bas niveau
- Bonnes pratiques à mettre en place
- Contenu statique (css, images, fichier javascript)
- Forte sollicitation de fichiers ou de BDD
- Temps réel, streaming, application web riche (HTML5)