Transcript
Page 1: Accès concurrents et scalabilité

Accès%concurrents%et%scalabilitéJérôme'Vieilledent

mercredi 6 juin 12

Page 2: Accès concurrents et scalabilité

Market-driven Innovation

From simple presentation and content management

to digital businessFocus of organization’s core-

business and simplify complexity:

cloud-enablement

mercredi 6 juin 12

Page 3: Accès concurrents et scalabilité

eZ Community eZ R&D

CommunityeZ R&DPartner conferencesProduct Innovation BoardeZ Market

The 5 pillars of Innovation @ eZ

mercredi 6 juin 12

Page 4: Accès concurrents et scalabilité

4

Quoi ? Des accès concurrents en PHP ???

mercredi 6 juin 12

Page 5: Accès concurrents et scalabilité

Quoi ? Des accès concurrents en PHP ???

PHP est synchrone

Chaque processus est isolé

HTTP est (à peu près) stateless et PHP respecte ce principe

5

mercredi 6 juin 12

Page 6: Accès concurrents et scalabilité

Quoi ? Des accès concurrents en PHP ???

Sauf que les visiteurs ne sont pas synchrones... Et les contributeurs non plus...

Flux PHP => OK

Interaction avec le monde extérieur => c’est une autre histoireLe cache est généralement écrit sur un disqueIdem pour fichiers publiés par les contributeursTransactions BDD

6

mercredi 6 juin 12

Page 7: Accès concurrents et scalabilité

7

Accès concurrents : Cas classique

mercredi 6 juin 12

Page 8: Accès concurrents et scalabilité

Le cas idéal

8

WebApp

mercredi 6 juin 12

Page 9: Accès concurrents et scalabilité

Le cas idéal

8

WebAppContent'cache

mercredi 6 juin 12

Page 10: Accès concurrents et scalabilité

Le cas idéal

8

WebAppContent'cache

mercredi 6 juin 12

Page 11: Accès concurrents et scalabilité

Cache en cours de génération

9

WebApp

mercredi 6 juin 12

Page 12: Accès concurrents et scalabilité

Cache en cours de génération

9

WebAppContent'cache'(genera9ng)

mercredi 6 juin 12

Page 13: Accès concurrents et scalabilité

Conséquences potentielles

Lock wait timeout

Blocs de cache vides

Deadlocks

Pages chargeant indéfiniment

Écritures concurrentes

Cache corrompu

10

mercredi 6 juin 12

Page 14: Accès concurrents et scalabilité

Conséquences potentielles

11

mercredi 6 juin 12

Page 15: Accès concurrents et scalabilité

Solutions immédiates

Pré-génération du cacheQue sert-on pendant la génération ?

CDN (Akamai, Level3)€€€ $$$ £££

Reverse-proxy (Varnish)Site plus statique (à première vue)

12

mercredi 6 juin 12

Page 16: Accès concurrents et scalabilité

13

Stale Cache

mercredi 6 juin 12

Page 17: Accès concurrents et scalabilité

14

mercredi 6 juin 12

Page 18: Accès concurrents et scalabilité

14

mercredi 6 juin 12

Page 19: Accès concurrents et scalabilité

14

mercredi 6 juin 12

Page 20: Accès concurrents et scalabilité

15

Scalabilité : Introduction au cluster

mercredi 6 juin 12

Page 21: Accès concurrents et scalabilité

Pré-requis

16

Scalabilité%horizontale

mercredi 6 juin 12

Page 22: Accès concurrents et scalabilité

Pré-requis

16

Scalabilité%horizontale

Cache(content,'config,'transla9on...)

Binaries

mercredi 6 juin 12

Page 23: Accès concurrents et scalabilité

Pré-requis

16

Scalabilité%horizontale

Cache(content,'config,'transla9on...)

Binaries

mercredi 6 juin 12

Page 24: Accès concurrents et scalabilité

Synchronisation : Quel(s) outil(s) ?

NFSPas très copain avec PHPPas fiable sur les metadata

SAN€€€ $$$ £££

RsyncLentSynchro indépendante de l’application (pas de contrôle)On part du principe que les ressources sont toujours disponibles

DRBDVoir Rsync

17

mercredi 6 juin 12

Page 25: Accès concurrents et scalabilité

Synchronisation : Quel(s) outil(s) ?

17

PHP%Cluster

mercredi 6 juin 12

Page 26: Accès concurrents et scalabilité

Cluster PHP

Librairie PHP «cluster aware»Se substitue aux fonctions PHP natives

$fh = eZClusterFileHandler::instance( ‘cache_file’ );$cache = $fh->fetchContents();

Stream wrapper : http://php.net/streamwrapper $cache = file_get_contents( ‘ezcache://<some_cache_id>’ );

Logique et Backend FS dédiésStockage fichiers physiques sur NFS + stats dans BDD (DFS)Stockage de blobs en BDD (Redis)

Fichiers binaires servis via un front-controller spécifiqueDroit au butÉviter les facilités de convenance (ORM...)Utiliser X-SENDFILE si possible

18

mercredi 6 juin 12

Page 27: Accès concurrents et scalabilité

19

«Varnish, ça a quand même vachement plus la patate»

mercredi 6 juin 12

Page 28: Accès concurrents et scalabilité

Varnish : Avantages

Cache statique, basé sur URI

«Bulle de protection» autour des serveurs frontaux

Possible de cacher des fragments via ESI

20

mercredi 6 juin 12

Page 29: Accès concurrents et scalabilité

Varnish : Inconvénients

Externe à l’application

Basé sur des TTL en secondes (Cache-Control)

Tout ne peut pas être caché (POST, certaines requêtes AJAX...)

Gestion des ESI peut être un (gros) poil complexe

21

mercredi 6 juin 12

Page 30: Accès concurrents et scalabilité

22

Le meilleur des deux mondes

mercredi 6 juin 12

Page 31: Accès concurrents et scalabilité

Varnish : Le meilleur des 2 mondes

Utiliser Varnish (ou autre CDN) pour les médias

Utiliser l’API cluster pour purger/remplir le cache HTTP

23

mercredi 6 juin 12

Page 32: Accès concurrents et scalabilité

24

Conclusion

mercredi 6 juin 12

Page 33: Accès concurrents et scalabilité

Conclusion

PHP est synchrone, pas vos visiteurs, ni vos contributeurs

Toujours réfléchir si l’implémentation est «concurrency-safe»

Eviter l’effet «boîte noire» d’outils externes

25

mercredi 6 juin 12

Page 34: Accès concurrents et scalabilité

26

Fin

Twitter : @jvieilledenthttps://joind.in/6461

mercredi 6 juin 12


Top Related