accès concurrents et scalabilité
Post on 18-Nov-2014
4.164 Views
Preview:
DESCRIPTION
TRANSCRIPT
Accès%concurrents%et%scalabilitéJérôme'Vieilledent
mercredi 6 juin 12
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
eZ Community eZ R&D
CommunityeZ R&DPartner conferencesProduct Innovation BoardeZ Market
The 5 pillars of Innovation @ eZ
mercredi 6 juin 12
4
Quoi ? Des accès concurrents en PHP ???
mercredi 6 juin 12
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
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
7
Accès concurrents : Cas classique
mercredi 6 juin 12
Le cas idéal
8
WebApp
mercredi 6 juin 12
Le cas idéal
8
WebAppContent'cache
mercredi 6 juin 12
Le cas idéal
8
WebAppContent'cache
mercredi 6 juin 12
Cache en cours de génération
9
WebApp
mercredi 6 juin 12
Cache en cours de génération
9
WebAppContent'cache'(genera9ng)
mercredi 6 juin 12
Conséquences potentielles
Lock wait timeout
Blocs de cache vides
Deadlocks
Pages chargeant indéfiniment
Écritures concurrentes
Cache corrompu
10
mercredi 6 juin 12
Conséquences potentielles
11
mercredi 6 juin 12
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
13
Stale Cache
mercredi 6 juin 12
14
mercredi 6 juin 12
14
mercredi 6 juin 12
14
mercredi 6 juin 12
15
Scalabilité : Introduction au cluster
mercredi 6 juin 12
Pré-requis
16
Scalabilité%horizontale
mercredi 6 juin 12
Pré-requis
16
Scalabilité%horizontale
Cache(content,'config,'transla9on...)
Binaries
mercredi 6 juin 12
Pré-requis
16
Scalabilité%horizontale
Cache(content,'config,'transla9on...)
Binaries
mercredi 6 juin 12
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
Synchronisation : Quel(s) outil(s) ?
17
PHP%Cluster
mercredi 6 juin 12
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
19
«Varnish, ça a quand même vachement plus la patate»
mercredi 6 juin 12
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
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
22
Le meilleur des deux mondes
mercredi 6 juin 12
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
24
Conclusion
mercredi 6 juin 12
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
26
Fin
Twitter : @jvieilledenthttps://joind.in/6461
mercredi 6 juin 12
top related