Applications web performantes avec Erlang et Cowboy
Nine Nines and beyond...
Loïc Hoguin - @lhoguin
Erlang Cowboy and Nine Nines Founder
Nine Nines
La société
- Fondée en janvier 2012
- Société open-source
- Petite structure
- 0 financement
Principale activité
- Dev open-source Erlang
- Projet Cowboy (HTTP server)
- Projets Farwest, Sheriff, Bullet...
Les services offerts
- Training
- Consulting
- Support
Conférences
- Erlang Factory (San Francisco, Londres)
- Erlang User Conference (Stockholm)
- OSCON (Portland)
- Diverses écoles et universités
- Organise la Erlang Factory Lite Paris
Erlang Factory Lite Paris
- Prévue fin septembre 2012
- Gratuite
- En français
- Ouverte à tous et pour tous les niveaux
Erlang
Origines
- Language fonctionnel
- Inspiré par Prolog
- Créé pour les télécommunications
- Inventé par Joe Armstrong à Ericsson
Orienté messages
- Processes natifs Erlang (pas de threads !)
- Rien de partagé
- Echanges possibles via l'envoi de messages
- Processes légers et peu coûteux
[DEMO]
- Echange de messages
- Création de 10000 processes en < 1s
Résistant aux pannes
- Si 1 process crash, seul celui-ci est interrompu
- Possibilité de link ou monitorer les processes
- Méchanismes pour relancer automatiquement les processes
- Si une node Erlang crash, celle-ci est redémarrée (heart)
Let it crash
- Il est plus efficace de laisser crash
- On ne peut pas prévoir tous les types d'erreur
- Le pattern matching d'Erlang permet de crash facilement
- On peut toujours catch les exceptions localement si besoin
[DEMO]
- Pattern matching
- Crash d'1 process
- Crash de processes linkés
Distribué
- Nodes découvertes automatiquement
- "Plug and play"
- Aucun changement à apporter au code
- RPC
Upgrades live
- Aucune interruption
- Aucune connexion fermée ou perdue
- Un court délai suivant la taille du système
En résumé
- Tous les éléments requis pour atteindre Nine Nines
Qui utilise Erlang ?
- Facebook, Google, Amazon, Apple
- Les serveurs Call of Duty
- WhatsApp (2+ millions de connexions !)
- Rackspace, Github, Heroku...
- Serveurs NoSQL : Riak, CouchDB...
- L'Europe
- Orange, EDF, Meetic, AdopteUnMec
Popularité en augmentation
- Participation doublée chaque année aux conférences
- Mise en place de cours du soir dans diverses villes
- Utilisation par nombre de grandes compagnies
- Pénurie de développeurs
Le web
Le web aujourd'hui
- Peu de sites statiques
- Sites à contenu généré par l'utilisateur
- Applications à caractère "temps réel"
- API pour applications mobiles
Nouvelles technologies
- XMLHTTPRequest
- Websockets
- Server Sent Events
- SPDY
Les besoins
- Excellent temps de réponse
- Nombreux utilisateurs simultanés
- Toujours disponible
Erlang est adapté
- Il n'y a pas meilleure base qu'Erlang pour le web
- C'est pourquoi Cowboy a été écrit en Erlang
Cowboy
Un serveur en Erlang, pour Erlang
- Code 100% Erlang
- Facile à lire et à comprendre
- 1 connexion = 1 process
- Connexion -> HTTP -> Handler -> HTTP
Features clés
- REST
- Websocket
- Long polling
Performances
- Testé avec plus de 1 million de connexions simultanées
- Temps de réponse inchangé avec un grand nombre de connexions
- Faible usage mémoire (500 K connexions = 10 GB)
- Pas ou peu d'optimisations
Juste Erlang
- Cowboy fait le minimum par défaut
- Hibernation de websocket ou long-polling
- Utilisation de binaries plutôt que de lists
- Date/heure générée toutes les secondes par un process dédié
Futures améliorations
- Projet Horse : benchmarking commit par commit
- Sujet de stage d'été de 2 étudiantes
Intégration
- PHP via cowboy_fcgi
- Ruby on Rails via Rack
- Possibilité d'appliquer seulement à certaines requêtes
Historique
- Premier commit le 7 mars 2011
- Présentation publique en Novembre à Stockholm
- Utilisé pour du financier, publicitaire...
- 500+ watchers sur Github aujourd'hui
Et après ?
Farwest
- Un "framework" pour le dev côté client
- Fait pour les intégrateurs et devs JS
- Permet de créer des applications Erlang, sans connaitre Erlang
- Séparation claire entre côtés client et serveur
Autres projets
- Ranch : accepteur de connexions
- Bullet : connexion websocket permanente
- Sheriff : validation de données entrantes automatisée
- Goldrush : monitoring et remote debugging de nodes Erlang
- Et d'autres à venir...
En conclusion
Erlang est prêt
- Le nombre de coeurs par CPU augmente
- Tous les languages doivent s'adapter
- La plupart des solutions sont inefficaces
- Erlang est déjà prêt
Cowboy est prêt
- Utilise pleinement toutes les capacités de Erlang
- Intègre les technologies de pointe
- Peut complémenter un système déja existant facilement
Etes-vous prêt ?
- Initiez-vous dès aujourd'hui
- Venez à la conférence en septembre
- Participez aux Erlounge tous les mois
- Faites passer le message
Liens
- http://erlang.org
- http://learnyousomeerlang.com
- https://github.com/extend
- http://ninenines.eu
Communauté
- erlang-questions ML sur http://erlang.org
- https://groups.google.com/group/erlang-paris
- #erlang et #erlounge sur irc.freenode.net
Questions ?