Accès%concurrents%et%scalabilité                                         JérômeVieilledentmercredi 6 juin 12
From simple presentation     and content management        to digital business                     Focus of organization’s...
The 5 pillars of    Innovation @ eZ                                  eZ                               Community           ...
Quoi ? Des accès concurrents en PHP ???                                                          4mercredi 6 juin 12
Quoi ? Des accès concurrents en PHP ???                     PHP est synchrone                     Chaque processus est iso...
Quoi ? Des accès concurrents en PHP ???                     Sauf que les visiteurs ne sont pas synchrones                 ...
Accès concurrents : Cas classique                                                    7mercredi 6 juin 12
Le cas idéal                     WebApp                         8mercredi 6 juin 12
Le cas idéal                     Contentcache                                     WebApp                                  ...
Le cas idéal                     Contentcache                                     WebApp                                  ...
Cache en cours de génération                                   WebApp                                       9mercredi 6 ju...
Cache en cours de génération                                   Contentcache(genera9ng)                                    ...
Conséquences potentielles                     Lock wait timeout                       Blocs de cache vides                ...
Conséquences potentielles                                11mercredi 6 juin 12
Solutions immédiates                     Pré-génération du cache                          Que sert-on pendant la génératio...
Stale Cache                                   13mercredi 6 juin 12
14mercredi 6 juin 12
14mercredi 6 juin 12
14mercredi 6 juin 12
Scalabilité : Introduction au cluster                                                         15mercredi 6 juin 12
Pré-requis                     Scalabilité%horizontale                                               16mercredi 6 juin 12
Pré-requis                                Scalabilité%horizontale                                                         ...
Pré-requis                                Scalabilité%horizontale                                                         ...
Synchronisation : Quel(s) outil(s) ?                     NFS                             Pas très copain avec PHP         ...
Synchronisation : Quel(s) outil(s) ?                         PHP%Cluster                                           17mercr...
Cluster PHP                     Librairie PHP «cluster aware»                            Se substitue aux fonctions PHP na...
«Varnish, ça a quand même                      vachement plus la patate»                                                  ...
Varnish : Avantages                     Cache statique, basé sur URI                     «Bulle de protection» autour des ...
Varnish : Inconvénients                     Externe à l’application                     Basé sur des TTL en secondes (Cach...
Le meilleur des deux mondes                                                   22mercredi 6 juin 12
Varnish : Le meilleur des 2 mondes                     Utiliser Varnish (ou autre CDN) pour les médias                    ...
Conclusion                                  24mercredi 6 juin 12
Conclusion                     PHP est synchrone, pas vos visiteurs, ni vos contributeurs                     Toujours réf...
Fin                     Twitter : @jvieilledent                      https://joind.in/6461                                ...
Prochain SlideShare
Chargement dans…5
×

Accès concurrents et scalabilité

4 589 vues

Publié le

L'accès concurrentiel est un problème majeur et récurrent dans toute application web un tant soit peu sollicitée. De sévères problèmes de corruption de caches et de locking se produisent quand la concurrence d’accès n’a pas été prise en compte dans le processus de développement et l’analyse initiales de l’application.

Les conséquences business peuvent être fatales et donner une image catastrophique d’une plateforme: pages vides, données obsolètes présentées, images corrompues, autant d’échecs, cuisants pour les techniciens, et coûteux pour l’entreprise. Confrontés à ces problématiques au cours de 10 dernières années sur des plateformes critiques de publication de contenu, servant plusieurs dizaines de millions de pages par mois, nous voudrions partager les bonnes pratiques d’architecture logicielle que nous avons accumulées: résorption des lock & deadlock de bases de données, des transactions volumineuses, optimisation de l’entrée/sortie disque.

La diffusion de plus en plus large de PHP, et la professionnalisation de son usage le placent dans des contextes où sont rapidement atteintes les limites du langage quant à la gestion de la concurrence. Nous partagerons le résultat de notre recherche & développement, touchant aussi bien les outils utilisables dans ce contexte (Varnish, Memcached, Redis...) que les algorithmes et architectures adaptées.

Publié dans : Technologie
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
4 589
Sur SlideShare
0
Issues des intégrations
0
Intégrations
2 260
Actions
Partages
0
Téléchargements
27
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Accès concurrents et scalabilité

  1. 1. Accès%concurrents%et%scalabilité JérômeVieilledentmercredi 6 juin 12
  2. 2. From simple presentation and content management to digital business Focus of organization’s core- business and simplify complexity: cloud-enablement Market-driven Innovationmercredi 6 juin 12
  3. 3. The 5 pillars of Innovation @ eZ eZ Community eZ R&D Community eZ R&D Partner conferences Product Innovation Board eZ Marketmercredi 6 juin 12
  4. 4. Quoi ? Des accès concurrents en PHP ??? 4mercredi 6 juin 12
  5. 5. 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 5mercredi 6 juin 12
  6. 6. 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 histoire Le cache est généralement écrit sur un disque Idem pour fichiers publiés par les contributeurs Transactions BDD 6mercredi 6 juin 12
  7. 7. Accès concurrents : Cas classique 7mercredi 6 juin 12
  8. 8. Le cas idéal WebApp 8mercredi 6 juin 12
  9. 9. Le cas idéal Contentcache WebApp 8mercredi 6 juin 12
  10. 10. Le cas idéal Contentcache WebApp 8mercredi 6 juin 12
  11. 11. Cache en cours de génération WebApp 9mercredi 6 juin 12
  12. 12. Cache en cours de génération Contentcache(genera9ng) WebApp 9mercredi 6 juin 12
  13. 13. Conséquences potentielles Lock wait timeout Blocs de cache vides Deadlocks Pages chargeant indéfiniment Écritures concurrentes Cache corrompu 10mercredi 6 juin 12
  14. 14. Conséquences potentielles 11mercredi 6 juin 12
  15. 15. Solutions immédiates Pré-génération du cache Que sert-on pendant la génération ? CDN (Akamai, Level3) €€€ $$$ £££ Reverse-proxy (Varnish) Site plus statique (à première vue) 12mercredi 6 juin 12
  16. 16. Stale Cache 13mercredi 6 juin 12
  17. 17. 14mercredi 6 juin 12
  18. 18. 14mercredi 6 juin 12
  19. 19. 14mercredi 6 juin 12
  20. 20. Scalabilité : Introduction au cluster 15mercredi 6 juin 12
  21. 21. Pré-requis Scalabilité%horizontale 16mercredi 6 juin 12
  22. 22. Pré-requis Scalabilité%horizontale Binaries Cache (content,config,transla9on...) 16mercredi 6 juin 12
  23. 23. Pré-requis Scalabilité%horizontale Binaries Cache (content,config,transla9on...) 16mercredi 6 juin 12
  24. 24. Synchronisation : Quel(s) outil(s) ? NFS Pas très copain avec PHP Pas fiable sur les metadata SAN €€€ $$$ £££ Rsync Lent Synchro indépendante de l’application (pas de contrôle) On part du principe que les ressources sont toujours disponibles DRBD Voir Rsync 17mercredi 6 juin 12
  25. 25. Synchronisation : Quel(s) outil(s) ? PHP%Cluster 17mercredi 6 juin 12
  26. 26. 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és Stockage fichiers physiques sur NFS + stats dans BDD (DFS) Stockage de blobs en BDD (Redis) Fichiers binaires servis via un front-controller spécifique Droit au but Éviter les facilités de convenance (ORM...) Utiliser X-SENDFILE si possible 18mercredi 6 juin 12
  27. 27. «Varnish, ça a quand même vachement plus la patate» 19mercredi 6 juin 12
  28. 28. Varnish : Avantages Cache statique, basé sur URI «Bulle de protection» autour des serveurs frontaux Possible de cacher des fragments via ESI 20mercredi 6 juin 12
  29. 29. 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 21mercredi 6 juin 12
  30. 30. Le meilleur des deux mondes 22mercredi 6 juin 12
  31. 31. 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 23mercredi 6 juin 12
  32. 32. Conclusion 24mercredi 6 juin 12
  33. 33. 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 25mercredi 6 juin 12
  34. 34. Fin Twitter : @jvieilledent https://joind.in/6461 26mercredi 6 juin 12

×