42
L’AVENIR DE LAMP Innovation dans la pile AFUP, Paris, 12 novembre 2009

Lavenir de LAMP

Embed Size (px)

Citation preview

Page 1: Lavenir de LAMP

L’AVENIR DE LAMPInnovation dans la pile

AFUP, Paris, 12 novembre 2009

Page 2: Lavenir de LAMP

C’EST GLACHMMP!

Page 3: Lavenir de LAMP

C’EST GLACHMMP!S’il vous plait,

utilisez plus de voyelles dans les noms de projets Open Source

Page 4: Lavenir de LAMP

ORDRE DU JOUR

D’éléphpants

De canapés

D’engrenages

D’esclaves

De cochons

Page 5: Lavenir de LAMP

INTERVENANT

Damien Seguy

Services expert Open Source

Eleveur d’éléphpants

[email protected]

Page 6: Lavenir de LAMP

ARCHIApproche classique

Page 7: Lavenir de LAMP

CACHE LOCAL

Cache local

Redondance

Double travail

Limitation à la capacité localeWeb

Cache

Web

Cache

Page 8: Lavenir de LAMP

AVEC MEMCACHE

Cache partagé

Capacité doublée

Partage des résultats

La capacité dépasse les limitations physiques

Web Web

Memcache

Page 9: Lavenir de LAMP

PRATIQUE COURANTE

Cache partagé

Capacité extensible

Centralisation des cachesWeb

Memcache

Web Web

Page 10: Lavenir de LAMP

MEMCACHE

http://memcached.org/

Un cache géant en mémoire

Une table de hashage extensible

Intégrée dans PHP

Page 11: Lavenir de LAMP

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);

?>

Page 12: Lavenir de LAMP

EXEMPLE

<?php

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

$membre = $memcache->get('DamienSeguy');

var_dump($membre);?>

add

get

set

replace

increment

Page 13: Lavenir de LAMP

UTILISATION

Reproduction rapide d’objets/ contextes

Résultats de requêtes SQL

Fichiers distants (RSS, etc...)

Stockage de sessions

Page 14: Lavenir de LAMP

ARCHIApproche avec cache

Page 15: Lavenir de LAMP

STOCKAGE DE BLOB

Memcache == stockage de BLOB

Stockage plus structuré ?

Tableaux de données, multi-dimensionnels

Page 16: Lavenir de LAMP

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

Page 17: Lavenir de LAMP

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

}

Page 18: Lavenir de LAMP

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

}

Format JSON (comme XML, mais plus simple)

Page 19: Lavenir de LAMP

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

}

Format JSON (comme XML, mais plus simple)

Clé primaire pour tous

Page 20: Lavenir de LAMP

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

}

Format JSON (comme XML, mais plus simple)

Clé primaire pour tous

Numéro de révision

Page 21: Lavenir de LAMP

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

}

Format JSON (comme XML, mais plus simple)

Clé primaire pour tous

Numéro de révision

Booléen

Page 22: Lavenir de LAMP

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

}

Format JSON (comme XML, mais plus simple)

Clé primaire pour tous

Numéro de révision

Liste

Booléen

Page 23: Lavenir de LAMP

VUES function (doc) {

for(var i in doc.tags)

emit(doc.tags[i], 1);

}

Les vues sont écrites en JavaScript

Possibilités de filtrer, retraiter

Approche map/reduce

Groupages multiples, sous-requêtes...

"bd"

"json"

"super"

Page 24: Lavenir de LAMP

VUES function (doc) {

for(var i in doc.tags)

emit(doc.tags[i], 1);

}

Les vues sont écrites en JavaScript

Possibilités de filtrer, retraiter

Approche map/reduce

Groupages multiples, sous-requêtes...

"bd"

"json"

"super"

"bd",1

"json",2

"super",1

function (Key, Values) {

var sum = 0;

for(var i in Values)

sum += Values[i];

return sum;

}

Page 25: Lavenir de LAMP

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

Page 26: Lavenir de LAMP

LIMITATIONS

Ce n’est pas une base objet

Syndrome de PHP3!

Pas de transactions

Attention aux conflits!

Page 27: Lavenir de LAMP

ACTUELLEMENT

Apache’s CouchDB, Cassandra, MongoDB

Utilisés en production par Digg, Facebook.

Amazon simpleDB

Page 28: Lavenir de LAMP

ARCHISources de données

Page 29: Lavenir de LAMP

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!

Page 30: Lavenir de LAMP

ARCHILa transaction Web doit

attendre chaque élément de l’architecture

Page 31: Lavenir de LAMP

ARCHIPHP est assez rapide pour

servir le client

Page 32: Lavenir de LAMP

ARCHIIl faut exporter

les tâches lourdes

Page 33: Lavenir de LAMP

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

Page 34: Lavenir de LAMP
Page 35: Lavenir de LAMP

MiniaturesPDF

Recherche

PDF Miniatures

Page 36: Lavenir de LAMP

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

Page 37: Lavenir de LAMP

ARCHIAvec tâches lourdes

Page 38: Lavenir de LAMP

Corpus

Map Map Map Map

m1:1,3 m2:2,1 m3:1

m1:4 m2:3 m3:1

Reduce Reduce Reduce

Regroupement

m1:1; m2:2 m2:1 m1:3; m3:1

MAP/REDUCE

Découpage du travail en lots

Traitement du lot : MAP

Concentration des résultats : reduce

Résultat final

Hadoop fait tout sauf map et réduce

Page 39: Lavenir de LAMP

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

Page 40: Lavenir de LAMP

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.

Page 41: Lavenir de LAMP

MAÎTRISE

Personnalisation

Public/ répétition

Tâches de fond

Contexte

Cohérence

Tâches lourdes

Page 42: Lavenir de LAMP

QUESTIONS?