L’AVENIR DE LAMP
      Innovation dans la pile
   AFUP, Paris, 12 novembre 2009
C’EST GLACHMMP!
C’EST GLACHMMP!
              S’il vous plait,
        utilisez plus de voyelles
 dans les noms de projets Open Source
ORDRE DU JOUR

D’éléphpants

De canapés

D’engrenages

D’esclaves

De cochons
INTERVENANT

Damien Seguy

Services expert Open Source

Eleveur d’éléphpants

damien.seguy@alterway.fr
ARCHI
Approche classique
CACHE LOCAL


Cache local

Redondance                        Cache   Cache

Double travail
                               ...
AVEC MEMCACHE


Cache partagé

Capacité doublée            Memcache
Partage des résultats
                          Web   ...
PRATIQUE COURANTE


Cache partagé
                                  Memcache
Capacité extensible
                         ...
MEMCACHE


http://memcached.org/

Un cache géant en mémoire

Une table de hashage extensible

Intégrée dans PHP
EXEMPLE

<?php

$memcache = new Memcache;
$memcache->connect('memcache.wan', 11211);

$membre = new Membre_AFUP();
$membre...
EXEMPLE

add         <?php

            $memcache = new Memcache;
get         $memcache->connect('memcache.wan', 11211);

...
UTILISATION


Reproduction rapide d’objets/ contextes

Résultats de requêtes SQL

Fichiers distants (RSS, etc...)

Stockag...
ARCHI
Approche avec cache
STOCKAGE DE BLOB


Memcache == stockage de BLOB

Stockage plus structuré ?

  Tableaux de données, multi-dimensionnels
ENTREPÔTS CLÉ/VALEUR

 Uniquement des paires clé => valeur

 Les lignes deviennent un document

 Les tables deviennent des...
STRUCTURE

{
    "_id": "ABBC89DDEBC",
    "_rev": "876BBDC",
    "type": "blog",
    "titre": "Un nouveau paradigme de ba...
STRUCTURE
       Format JSON (comme XML, mais plus simple)


{
    "_id": "ABBC89DDEBC",
    "_rev": "876BBDC",
    "type"...
STRUCTURE
       Format JSON (comme XML, mais plus simple)

                                Clé primaire pour tous
{
    "...
STRUCTURE
       Format JSON (comme XML, mais plus simple)

                                Clé primaire pour tous
{
    "...
STRUCTURE
       Format JSON (comme XML, mais plus simple)

                                Clé primaire pour tous
{
    "...
STRUCTURE
       Format JSON (comme XML, mais plus simple)

                                Clé primaire pour tous
{
    "...
VUES                      function (doc) {
                               for(var i in doc.tags)
                         ...
VUES                      function (doc) {
                               for(var i in doc.tags)
                         ...
AVANTAGES

Une approche naturelle des documents

  Migration naturelle, pas de NULL

  Pas de délire avec les jointures

I...
LIMITATIONS


Ce n’est pas une base objet

  Syndrome de PHP3!

Pas de transactions

Attention aux conflits!
ACTUELLEMENT


Apache’s CouchDB, Cassandra, MongoDB

  Utilisés en production par Digg, Facebook.

Amazon simpleDB
ARCHI
Sources de données
CONCEPTION DE SCRIPT


 Application de forum

   Modèle hiérarchique : entrée >> sortie

   modèle adjacent : sortie >> en...
ARCHI
  La transaction Web doit
attendre chaque élément de
        l’architecture
ARCHI
PHP est assez rapide pour
     servir le client
ARCHI
  Il faut exporter
les tâches lourdes
GEARMAN

Anagramme de manager

Un système de distribution de tâches

Trois acteurs :

  serveur, gearmand : distribue les ...
Miniatures   PDF   Miniatures
  PDF
Recherche
FONCTIONNEMENT

PHP assure le filtrage des données, l’enregistrement des
commandes, la restitution au navigateur

Gearman ...
ARCHI
Avec tâches lourdes
MAP/REDUCE
Découpage du travail en                           Corpus



lots

Traitement du lot : MAP       Map        Map ...
UN MODÈLE ROBUSTE

Détection des crash

  Relance des tâches de map et reduce

Doublement des tâches lentes

Map et reduce...
HADOOP

Fonctions exportables via stdin/out

Hive : HADOPP appliqué aux bases de données

HDFS : cluster de stockage

1 Po...
MAÎTRISE


Personnalisation



Public/ répétition

                         Contexte
                             Cohérenc...
QUESTIONS?
L'avenir de LAMP
Prochain SlideShare
Chargement dans…5
×

L'avenir de LAMP

2 536 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 536
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?

    ×