L'avenir de LAMP

2 506 vues

Publié le

présentation de 4 outils supplémentaires pour révolutionner l'organisation d'une application LAMP, et maîtriser plus efficacement la montée en charge.

Publié dans : Technologie
0 commentaire
3 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
2 506
Sur SlideShare
0
Issues des intégrations
0
Intégrations
5
Actions
Partages
0
Téléchargements
29
Commentaires
0
J’aime
3
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive
  • L'avenir de LAMP

    1. 1. L’AVENIR DE LAMP Innovation dans la pile AFUP, Paris, 12 novembre 2009
    2. 2. C’EST GLACHMMP!
    3. 3. C’EST GLACHMMP! S’il vous plait, utilisez plus de voyelles dans les noms de projets Open Source
    4. 4. ORDRE DU JOUR D’éléphpants De canapés D’engrenages D’esclaves De cochons
    5. 5. INTERVENANT Damien Seguy Services expert Open Source Eleveur d’éléphpants damien.seguy@alterway.fr
    6. 6. ARCHI Approche classique
    7. 7. CACHE LOCAL Cache local Redondance Cache Cache Double travail Web Web Limitation à la capacité locale
    8. 8. AVEC MEMCACHE Cache partagé Capacité doublée Memcache Partage des résultats Web Web La capacité dépasse les limitations physiques
    9. 9. PRATIQUE COURANTE Cache partagé Memcache Capacité extensible Web Web Web Centralisation des caches
    10. 10. MEMCACHE http://memcached.org/ Un cache géant en mémoire Une table de hashage extensible Intégrée dans PHP
    11. 11. EXEMPLE <?php $memcache = new Memcache; $memcache->connect('memcache.wan', 11211); $membre = new Membre_AFUP(); $membre->nom = 'Seguy'; $membre->prenom = 'Damien'; $membre->elephpants = 1009; $memcache->set( $membre->nom. $membre->prenom,  $membre, false, 0); ?>
    12. 12. EXEMPLE add <?php $memcache = new Memcache; get $memcache->connect('memcache.wan', 11211); $membre = $memcache->get('DamienSeguy'); set var_dump($membre); ?> replace increment
    13. 13. UTILISATION Reproduction rapide d’objets/ contextes Résultats de requêtes SQL Fichiers distants (RSS, etc...) Stockage de sessions
    14. 14. ARCHI Approche avec cache
    15. 15. STOCKAGE DE BLOB Memcache == stockage de BLOB Stockage plus structuré ? Tableaux de données, multi-dimensionnels
    16. 16. ENTREPÔTS CLÉ/VALEUR Uniquement des paires clé => valeur Les lignes deviennent un document Les tables deviennent des collections Il n’y a plus de modèle de données Quelques types : date, entier, chaîne, booléen, list, map
    17. 17. STRUCTURE { "_id": "ABBC89DDEBC", "_rev": "876BBDC", "type": "blog", "titre": "Un nouveau paradigme de bases de données", "contenus": "Un nouveau paradigme de bases de données", "tags": ["bd", "json", "super"], "publié": true }
    18. 18. STRUCTURE Format JSON (comme XML, mais plus simple) { "_id": "ABBC89DDEBC", "_rev": "876BBDC", "type": "blog", "titre": "Un nouveau paradigme de bases de données", "contenus": "Un nouveau paradigme de bases de données", "tags": ["bd", "json", "super"], "publié": true }
    19. 19. STRUCTURE Format JSON (comme XML, mais plus simple) Clé primaire pour tous { "_id": "ABBC89DDEBC", "_rev": "876BBDC", "type": "blog", "titre": "Un nouveau paradigme de bases de données", "contenus": "Un nouveau paradigme de bases de données", "tags": ["bd", "json", "super"], "publié": true }
    20. 20. STRUCTURE Format JSON (comme XML, mais plus simple) Clé primaire pour tous { "_id": "ABBC89DDEBC", "_rev": "876BBDC", Numéro de révision "type": "blog", "titre": "Un nouveau paradigme de bases de données", "contenus": "Un nouveau paradigme de bases de données", "tags": ["bd", "json", "super"], "publié": true }
    21. 21. STRUCTURE Format JSON (comme XML, mais plus simple) Clé primaire pour tous { "_id": "ABBC89DDEBC", "_rev": "876BBDC", Numéro de révision "type": "blog", "titre": "Un nouveau paradigme de bases de données", "contenus": "Un nouveau paradigme de bases de données", "tags": ["bd", "json", "super"], "publié": true } Booléen
    22. 22. STRUCTURE Format JSON (comme XML, mais plus simple) Clé primaire pour tous { "_id": "ABBC89DDEBC", "_rev": "876BBDC", Numéro de révision "type": "blog", "titre": "Un nouveau paradigme de bases de données", "contenus": "Un nouveau paradigme de bases de données", "tags": ["bd", "json", "super"], "publié": true } Liste Booléen
    23. 23. VUES function (doc) { for(var i in doc.tags) emit(doc.tags[i], 1); } Les vues sont écrites en JavaScript "bd" "json" Possibilités de filtrer, retraiter "super" Approche map/reduce Groupages multiples, sous-requêtes...
    24. 24. VUES function (doc) { for(var i in doc.tags) emit(doc.tags[i], 1); } Les vues sont écrites en JavaScript "bd",1 "bd" "json",2 "json" Possibilités de filtrer, retraiter "super",1 "super" Approche map/reduce function (Key, Values) { var sum = 0; Groupages multiples, sous-requêtes... for(var i in Values) sum += Values[i]; return sum; }
    25. 25. AVANTAGES Une approche naturelle des documents Migration naturelle, pas de NULL Pas de délire avec les jointures Indexation Partitionnement, réplication, clustering, fail over, MVCC API REST en HTTP
    26. 26. LIMITATIONS Ce n’est pas une base objet Syndrome de PHP3! Pas de transactions Attention aux conflits!
    27. 27. ACTUELLEMENT Apache’s CouchDB, Cassandra, MongoDB Utilisés en production par Digg, Facebook. Amazon simpleDB
    28. 28. ARCHI Sources de données
    29. 29. CONCEPTION DE SCRIPT Application de forum Modèle hiérarchique : entrée >> sortie modèle adjacent : sortie >> entrée PHP assume le travail, en ligne avec l’internaute!
    30. 30. ARCHI La transaction Web doit attendre chaque élément de l’architecture
    31. 31. ARCHI PHP est assez rapide pour servir le client
    32. 32. ARCHI Il faut exporter les tâches lourdes
    33. 33. GEARMAN Anagramme de manager Un système de distribution de tâches Trois acteurs : serveur, gearmand : distribue les tâches client, gearman : émet les commandes esclave, worker : effectue les tâches
    34. 34. Miniatures PDF Miniatures PDF Recherche
    35. 35. FONCTIONNEMENT PHP assure le filtrage des données, l’enregistrement des commandes, la restitution au navigateur Gearman répartit les tâches entre esclaves Si la charge augmente, il faut ajouter des esclaves Spécialisation des serveurs, réorganisation Découplage des frontaux Web
    36. 36. ARCHI Avec tâches lourdes
    37. 37. MAP/REDUCE Découpage du travail en Corpus lots Traitement du lot : MAP Map Map Map Map m1:1; m2:2 m2:1 m1:3; m3:1 Concentration des résultats : reduce Regroupement Résultat final m1:1,3 m2:2,1 m3:1 Reduce Reduce Reduce Hadoop fait tout sauf map et réduce m1:4 m2:3 m3:1
    38. 38. UN MODÈLE ROBUSTE Détection des crash Relance des tâches de map et reduce Doublement des tâches lentes Map et reduce fonctionnent simultanément Résultats intermédiaires possibles Addition des capacités de traitement
    39. 39. HADOOP Fonctions exportables via stdin/out Hive : HADOPP appliqué aux bases de données HDFS : cluster de stockage 1 Po de données, triées en 16h15 1 To de données triées en 62 secondes 3800 machines approx.
    40. 40. MAÎTRISE Personnalisation Public/ répétition Contexte Cohérence Tâches de fond Tâches lourdes
    41. 41. QUESTIONS?

    ×