Lavenir de LAMP

Preview:

Citation preview

L’AVENIR DE LAMPInnovation 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

ARCHIApproche classique

CACHE LOCAL

Cache local

Redondance

Double travail

Limitation à la capacité localeWeb

Cache

Web

Cache

AVEC MEMCACHE

Cache partagé

Capacité doublée

Partage des résultats

La capacité dépasse les limitations physiques

Web Web

Memcache

PRATIQUE COURANTE

Cache partagé

Capacité extensible

Centralisation des cachesWeb

Memcache

Web Web

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->nom = 'Seguy';$membre->prenom = 'Damien';$membre->elephpants = 1009;

$memcache->set( $membre->nom. $membre->prenom, $membre, false, 0);

?>

EXEMPLE

<?php

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

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

var_dump($membre);?>

add

get

set

replace

increment

UTILISATION

Reproduction rapide d’objets/ contextes

Résultats de requêtes SQL

Fichiers distants (RSS, etc...)

Stockage de sessions

ARCHIApproche 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 collections

Il n’y a plus de modèle de données

Quelques types : date, entier, chaîne, booléen, list, map

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

}

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)

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

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

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

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

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"

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;

}

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

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

ARCHISources de données

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!

ARCHILa transaction Web doit

attendre chaque élément de l’architecture

ARCHIPHP est assez rapide pour

servir le client

ARCHIIl faut exporter

les tâches lourdes

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

MiniaturesPDF

Recherche

PDF Miniatures

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

ARCHIAvec tâches lourdes

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

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

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.

MAÎTRISE

Personnalisation

Public/ répétition

Tâches de fond

Contexte

Cohérence

Tâches lourdes

QUESTIONS?

Recommended