SlideShare a Scribd company logo
1 of 34
Download to read offline
Accès%concurrents%et%scalabilité
                                         Jérôme'Vieilledent




mercredi 6 juin 12
From simple presentation
     and content management
        to digital business
                     Focus of organization’s core-
                        business and simplify
                             complexity:
                         cloud-enablement

       Market-driven Innovation
mercredi 6 juin 12
The 5 pillars of
    Innovation @ eZ
                                  eZ
                               Community
                                           eZ R&D

    Community
    eZ R&D
    Partner conferences
    Product Innovation Board
    eZ Market
mercredi 6 juin 12
Quoi ? Des accès concurrents en PHP ???




                                                          4

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 histoire
                        Le cache est généralement écrit sur un disque
                        Idem pour fichiers publiés par les contributeurs
                        Transactions BDD




                                                                             6

mercredi 6 juin 12
Accès concurrents : Cas classique




                                                    7

mercredi 6 juin 12
Le cas idéal




                     WebApp




                         8

mercredi 6 juin 12
Le cas idéal




                     Content'cache
                                     WebApp




                                         8

mercredi 6 juin 12
Le cas idéal




                     Content'cache
                                     WebApp




                                         8

mercredi 6 juin 12
Cache en cours de génération




                                   WebApp




                                       9

mercredi 6 juin 12
Cache en cours de génération




                                   Content'cache'(genera9ng)
                                                               WebApp




                                                                   9

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 cache
                          Que sert-on pendant la génération ?

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

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




                                                                12

mercredi 6 juin 12
Stale Cache




                                   13

mercredi 6 juin 12
14

mercredi 6 juin 12
14

mercredi 6 juin 12
14

mercredi 6 juin 12
Scalabilité : Introduction au cluster




                                                         15

mercredi 6 juin 12
Pré-requis

                     Scalabilité%horizontale




                                               16

mercredi 6 juin 12
Pré-requis

                                Scalabilité%horizontale




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

                                                                 16

mercredi 6 juin 12
Pré-requis

                                Scalabilité%horizontale




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

                                                                 16

mercredi 6 juin 12
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
                                                                            17

mercredi 6 juin 12
Synchronisation : Quel(s) outil(s) ?




                         PHP%Cluster




                                           17

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é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
                                                                           18

mercredi 6 juin 12
«Varnish, ça a quand même
                      vachement plus la patate»




                                                  19

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
Le meilleur des deux mondes




                                                   22

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
Conclusion




                                  24

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
Fin

                     Twitter : @jvieilledent
                      https://joind.in/6461

                                               26

mercredi 6 juin 12

More Related Content

Viewers also liked

F1 - J2EE m'a tuer ou comment (sur)vivre avec du legacy.
F1 - J2EE m'a tuer ou comment (sur)vivre avec du legacy.F1 - J2EE m'a tuer ou comment (sur)vivre avec du legacy.
F1 - J2EE m'a tuer ou comment (sur)vivre avec du legacy.XP Day CH
 
Manual del servicio_de_almacenamiento_por_internet
Manual del servicio_de_almacenamiento_por_internetManual del servicio_de_almacenamiento_por_internet
Manual del servicio_de_almacenamiento_por_internetDani Alvarez
 
Découverte de Génopole d'Évry-Corbeil, premier bioparc français dédié aux bio...
Découverte de Génopole d'Évry-Corbeil, premier bioparc français dédié aux bio...Découverte de Génopole d'Évry-Corbeil, premier bioparc français dédié aux bio...
Découverte de Génopole d'Évry-Corbeil, premier bioparc français dédié aux bio...Cap'Com
 
Programmes de formation pour les CFOs
Programmes de formation pour les CFOsProgrammes de formation pour les CFOs
Programmes de formation pour les CFOsAndré Du Sault
 
Cofely Gdf Suez_Pierre Guyar_Optimisation de la consommation énergétique
Cofely Gdf Suez_Pierre Guyar_Optimisation de la consommation énergétiqueCofely Gdf Suez_Pierre Guyar_Optimisation de la consommation énergétique
Cofely Gdf Suez_Pierre Guyar_Optimisation de la consommation énergétiqueMetro'num 2011
 
Monter la garde sur les médias sociaux- Altimeter 2012 (traduction Gootenberg)
Monter la garde sur les médias sociaux- Altimeter 2012 (traduction Gootenberg)Monter la garde sur les médias sociaux- Altimeter 2012 (traduction Gootenberg)
Monter la garde sur les médias sociaux- Altimeter 2012 (traduction Gootenberg)François Ramaget
 
Los animales (2º Primaria)
Los animales (2º Primaria)Los animales (2º Primaria)
Los animales (2º Primaria)Carbayu
 
Orange_Didier Durand_Services mobiles sans contact
Orange_Didier Durand_Services mobiles sans contactOrange_Didier Durand_Services mobiles sans contact
Orange_Didier Durand_Services mobiles sans contactMetro'num 2011
 
La veille de Red Guy du 29.02.12 : la marque employeur
La veille de Red Guy du 29.02.12 : la marque employeurLa veille de Red Guy du 29.02.12 : la marque employeur
La veille de Red Guy du 29.02.12 : la marque employeurRed Guy
 
Watson analytics 17112014_fr
Watson analytics 17112014_frWatson analytics 17112014_fr
Watson analytics 17112014_frIBM
 
E04 Art Mini-quiz
E04 Art Mini-quizE04 Art Mini-quiz
E04 Art Mini-quizMmeBosch
 

Viewers also liked (20)

Reflejos
ReflejosReflejos
Reflejos
 
F1 - J2EE m'a tuer ou comment (sur)vivre avec du legacy.
F1 - J2EE m'a tuer ou comment (sur)vivre avec du legacy.F1 - J2EE m'a tuer ou comment (sur)vivre avec du legacy.
F1 - J2EE m'a tuer ou comment (sur)vivre avec du legacy.
 
Manual del servicio_de_almacenamiento_por_internet
Manual del servicio_de_almacenamiento_por_internetManual del servicio_de_almacenamiento_por_internet
Manual del servicio_de_almacenamiento_por_internet
 
Découverte de Génopole d'Évry-Corbeil, premier bioparc français dédié aux bio...
Découverte de Génopole d'Évry-Corbeil, premier bioparc français dédié aux bio...Découverte de Génopole d'Évry-Corbeil, premier bioparc français dédié aux bio...
Découverte de Génopole d'Évry-Corbeil, premier bioparc français dédié aux bio...
 
Programmes de formation pour les CFOs
Programmes de formation pour les CFOsProgrammes de formation pour les CFOs
Programmes de formation pour les CFOs
 
Chef Gaultier
Chef GaultierChef Gaultier
Chef Gaultier
 
DIVERSITE 2.0 = Philippe Colin, IteXium lors de paris 2.0 mars 2010
DIVERSITE 2.0 = Philippe Colin, IteXium lors de paris 2.0 mars 2010DIVERSITE 2.0 = Philippe Colin, IteXium lors de paris 2.0 mars 2010
DIVERSITE 2.0 = Philippe Colin, IteXium lors de paris 2.0 mars 2010
 
La Revisión Literaria
La Revisión LiterariaLa Revisión Literaria
La Revisión Literaria
 
La civilización islámica
La civilización islámicaLa civilización islámica
La civilización islámica
 
Cofely Gdf Suez_Pierre Guyar_Optimisation de la consommation énergétique
Cofely Gdf Suez_Pierre Guyar_Optimisation de la consommation énergétiqueCofely Gdf Suez_Pierre Guyar_Optimisation de la consommation énergétique
Cofely Gdf Suez_Pierre Guyar_Optimisation de la consommation énergétique
 
Monter la garde sur les médias sociaux- Altimeter 2012 (traduction Gootenberg)
Monter la garde sur les médias sociaux- Altimeter 2012 (traduction Gootenberg)Monter la garde sur les médias sociaux- Altimeter 2012 (traduction Gootenberg)
Monter la garde sur les médias sociaux- Altimeter 2012 (traduction Gootenberg)
 
Question 3
Question 3Question 3
Question 3
 
Los animales (2º Primaria)
Los animales (2º Primaria)Los animales (2º Primaria)
Los animales (2º Primaria)
 
D4
D4D4
D4
 
Orange_Didier Durand_Services mobiles sans contact
Orange_Didier Durand_Services mobiles sans contactOrange_Didier Durand_Services mobiles sans contact
Orange_Didier Durand_Services mobiles sans contact
 
La veille de Red Guy du 29.02.12 : la marque employeur
La veille de Red Guy du 29.02.12 : la marque employeurLa veille de Red Guy du 29.02.12 : la marque employeur
La veille de Red Guy du 29.02.12 : la marque employeur
 
Watson analytics 17112014_fr
Watson analytics 17112014_frWatson analytics 17112014_fr
Watson analytics 17112014_fr
 
E04 Art Mini-quiz
E04 Art Mini-quizE04 Art Mini-quiz
E04 Art Mini-quiz
 
Anexas Digestivo
Anexas DigestivoAnexas Digestivo
Anexas Digestivo
 
Claire et Clara
Claire et ClaraClaire et Clara
Claire et Clara
 

Similar to Accès concurrents et scalabilité

Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er coursBases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er coursHatim CHAHDI
 
Présentation NAS - MiNET
Présentation NAS - MiNETPrésentation NAS - MiNET
Présentation NAS - MiNETMehdi Sebbar
 
Hibernate vs le_cloud_computing
Hibernate vs le_cloud_computingHibernate vs le_cloud_computing
Hibernate vs le_cloud_computingIppon
 
Hibernate vs le Cloud computing
Hibernate vs le Cloud computingHibernate vs le Cloud computing
Hibernate vs le Cloud computingJulien Dubois
 
Hibernate vs le_cloud_computing
Hibernate vs le_cloud_computingHibernate vs le_cloud_computing
Hibernate vs le_cloud_computingNormandy JUG
 
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?Sébastien Prunier
 

Similar to Accès concurrents et scalabilité (7)

Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er coursBases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
 
Présentation NAS - MiNET
Présentation NAS - MiNETPrésentation NAS - MiNET
Présentation NAS - MiNET
 
Hibernate vs le_cloud_computing
Hibernate vs le_cloud_computingHibernate vs le_cloud_computing
Hibernate vs le_cloud_computing
 
Hibernate vs le Cloud computing
Hibernate vs le Cloud computingHibernate vs le Cloud computing
Hibernate vs le Cloud computing
 
Hibernate vs le_cloud_computing
Hibernate vs le_cloud_computingHibernate vs le_cloud_computing
Hibernate vs le_cloud_computing
 
Sass et compass
Sass et compassSass et compass
Sass et compass
 
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
 

More from Jérôme Vieilledent

More from Jérôme Vieilledent (6)

Symfony and eZ Publish
Symfony and eZ PublishSymfony and eZ Publish
Symfony and eZ Publish
 
eZ Publish 5 in depth inspection
eZ Publish 5 in depth inspectioneZ Publish 5 in depth inspection
eZ Publish 5 in depth inspection
 
eZ Publish nextgen
eZ Publish nextgeneZ Publish nextgen
eZ Publish nextgen
 
Subversion - Utilisation et bonnes pratiques
Subversion - Utilisation et bonnes pratiquesSubversion - Utilisation et bonnes pratiques
Subversion - Utilisation et bonnes pratiques
 
Présentation eZ publish
Présentation eZ publishPrésentation eZ publish
Présentation eZ publish
 
Industrializing eZ publish project development
Industrializing eZ publish project developmentIndustrializing eZ publish project development
Industrializing eZ publish project development
 

Accès concurrents et scalabilité

  • 1. Accès%concurrents%et%scalabilité Jérôme'Vieilledent mercredi 6 juin 12
  • 2. From simple presentation and content management to digital business Focus of organization’s core- business and simplify complexity: cloud-enablement Market-driven Innovation mercredi 6 juin 12
  • 3. The 5 pillars of Innovation @ eZ eZ Community eZ R&D Community eZ R&D Partner conferences Product Innovation Board eZ Market mercredi 6 juin 12
  • 4. Quoi ? Des accès concurrents en PHP ??? 4 mercredi 6 juin 12
  • 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 5 mercredi 6 juin 12
  • 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 6 mercredi 6 juin 12
  • 7. Accès concurrents : Cas classique 7 mercredi 6 juin 12
  • 8. Le cas idéal WebApp 8 mercredi 6 juin 12
  • 9. Le cas idéal Content'cache WebApp 8 mercredi 6 juin 12
  • 10. Le cas idéal Content'cache WebApp 8 mercredi 6 juin 12
  • 11. Cache en cours de génération WebApp 9 mercredi 6 juin 12
  • 12. Cache en cours de génération Content'cache'(genera9ng) WebApp 9 mercredi 6 juin 12
  • 13. Conséquences potentielles Lock wait timeout Blocs de cache vides Deadlocks Pages chargeant indéfiniment Écritures concurrentes Cache corrompu 10 mercredi 6 juin 12
  • 14. Conséquences potentielles 11 mercredi 6 juin 12
  • 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) 12 mercredi 6 juin 12
  • 16. Stale Cache 13 mercredi 6 juin 12
  • 20. Scalabilité : Introduction au cluster 15 mercredi 6 juin 12
  • 21. Pré-requis Scalabilité%horizontale 16 mercredi 6 juin 12
  • 22. Pré-requis Scalabilité%horizontale Binaries Cache (content,'config,'transla9on...) 16 mercredi 6 juin 12
  • 23. Pré-requis Scalabilité%horizontale Binaries Cache (content,'config,'transla9on...) 16 mercredi 6 juin 12
  • 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 17 mercredi 6 juin 12
  • 25. Synchronisation : Quel(s) outil(s) ? PHP%Cluster 17 mercredi 6 juin 12
  • 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 18 mercredi 6 juin 12
  • 27. «Varnish, ça a quand même vachement plus la patate» 19 mercredi 6 juin 12
  • 28. 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
  • 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 21 mercredi 6 juin 12
  • 30. Le meilleur des deux mondes 22 mercredi 6 juin 12
  • 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 23 mercredi 6 juin 12
  • 32. Conclusion 24 mercredi 6 juin 12
  • 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 25 mercredi 6 juin 12
  • 34. Fin Twitter : @jvieilledent https://joind.in/6461 26 mercredi 6 juin 12