Sécurité et performanceSecurity and performanceSOLDES: N’embouteillez pas vos clients dans vos rayons !
Sébastien LucasDirecteur associé Oxalideslu@oxalide.comQui sommes nous ?About us ?Rémi GaillardDéveloppeur  PrestaShopremi.gaillard@prestashop.com
Infogérance, design et conception d’infrastructure,Infrastructure Design, Hosting & Facilities management,Surveillance 24x7 proactive,24x7 monitoring,Optimisation et troubleshooting,Fine tuning and troubleshooting,Hébergeur de Prestashop et de ses clients depuis 2007Host of Prestashop & customerssince 2007Oxalide team
Etude de cas : BebeoUse case : Bebeo3 boutiques stores              Z-enfant, 	   Tartine et Chocolat ,	    MelijoeUn catalogue de plusieurs dizaines de milliers de produitsTens of thousands of productsPlusieurs milliers de ventespar jours Several thousands of sales per dayUne multiplication du trafic par 10 pendant les soldesTraffic increase by 10 during sales
Utilisez la dernière version stable de PrestashopUse the last stable version of PrestaShopSupprimez ou désactivez les modules et fonctionnalités non utiliséesRemove or disable unused modules and featuresDésactivez le module de statistiques et utilisez un outil externe (Google Analytics, Weborama, ...)Disable the statistics module and use external tool (Google Analytics, Weborama, ...)Configurez au mieux PrestaShopPrestaShop Configuration
Statique : qui n’est pas dynamiqueStatic : whichis not dynamicRendez statiques un maximum d’éléments :Page d’accueilLanding pagePage d’erreur 404404 errorListe des catégoriesCategory listing…La clé de la performance : pensez statique!Improve performance: thinkstatic!
Videz les tables de statistiquesTruncatestatisticstablesSupprimez les paniers inutilisésRemoveunusedcartsSupprimez les bons de réduction expirésRemoveexpired discountsContenu de la base de donnéesDatabase content
Un design d’architecture scalable & fiableDesigned for scalability & reliabilitySéparation des couches applicatives (Cache, PHP et BDD),Separatelayers : caching, PHP & DatabasesPenser scalabilitéThinkscalableRépartition de chargeImplementloadbalancing for multiple front-ends
Optimisez le contenu statiqueThinkstaticConnectedusers17896SquidVarnishHTMLHTMLHTML25LighttpdLighttpdApache + PHPLighttpdPshop3Apache + PHP/img/css/jsPshop34MySQLd
Utilisez des serveurs de caches,Use reverse proxieswith a tunedpolicy,Séparez HTML, JS et CSS sur des noms de domaines différents,Separate HTML, Jscript & CSS on dedicated FQDN,Optimisez la délivrance du contenu statique avec un Webserver optimisé (Lighttpd ou nginx),Dedicate a specific and fine tuned web server to deliverstatic contents,Maximisez l’utilisation du cache du navigateurFeel confortable using  browser caching
Configuration optimisée d’apache et de PHP (faible empreinte mémoire, adapté pour une trafic élevé, …)Finetuned apache and php configuration (lowmemoryfingerprint, reliablebehaviour on highamount of trafic)Utilisez un système de cache d’opcode PHP (APC ou eAccelerator)Use an opcodecaching system for PHP (APC or eAccelerator)Implémentez un politique de Rewriting d’url statiqueUse a staticpolicy for the Url Rewriting rulesOptimisez MySQL pour pourInnoDBFinetune MySQL for InnoDBConfiguration serveur orientée performanceFinetune system & services
Charge : Augmentez le nombre de frontauxWhenneeded : Use yourscalability16Load Balancer25Apache + PHPApache + PHPApache + PHPApache + PHP4PshopPshopPshopPshop3front-01front-02front-03front-0XMySQLdMySQLdDB-SlaveDB-Master
Augmentez le nombre de frontaux pour augmenter la capacité de traitementIncrease the number of yourfront-ends
Utilisez des frontaux virtuels pour les moments clés (Soldes, Fêtes, etc.)Use virtual « on demand » servers for yourkey moments (sales, …)
Attention au goulot d’étranglement sur le Master BDDRemainalert as to the behavior of yourdatabaseUtiliser un serveur esclaveUse slave server16Load Balancer25Apache + PHPApache + PHPApache + PHPApache + PHP34PshopPshopPshopPshopWritein DBInstant readReadin DBfront-01front-02front-03front-0XMySQLdMySQLd
Classe Db  :privatestatic$_servers = array(   array('server' => _DB_SERVER_, 'user' => _DB_USER_, 'password' => _DB_PASSWD_, 'database' => _DB_NAME_), array('server' => '192.168.0.3', 'user' => 'myuser', 'password' => 'mypassword', 'database' => 'mydatabase'));Séparation des requêtes:Split queries:Ecriture (insert, update),Writing
Lecture instantanée (panier,commandes…),Instant reading (cart,orders…)
Lecture (Catalogue, produits..)Reading(Catalog, products…)Charge : Scalabilité des slavesLoad : Scalabilityof		  slaves16Load Balancer25Classe DbOuUtiliser un load balancerUse a transparent load balancer34Writein DBInstant readReadin DBApache + PHPApache + PHPApache + PHPApache + PHPPshopPshopPshopPshopLoad BalancerMySQLdfront-01front-02front-03front-0XDB-MasterMySQLdMySQLdMySQLdDB-SlaveDB-SlaveDB-Slave

Performance barcampfinal

  • 1.
    Sécurité et performanceSecurityand performanceSOLDES: N’embouteillez pas vos clients dans vos rayons !
  • 4.
    Sébastien LucasDirecteur associéOxalideslu@oxalide.comQui sommes nous ?About us ?Rémi GaillardDéveloppeur PrestaShopremi.gaillard@prestashop.com
  • 5.
    Infogérance, design etconception d’infrastructure,Infrastructure Design, Hosting & Facilities management,Surveillance 24x7 proactive,24x7 monitoring,Optimisation et troubleshooting,Fine tuning and troubleshooting,Hébergeur de Prestashop et de ses clients depuis 2007Host of Prestashop & customerssince 2007Oxalide team
  • 6.
    Etude de cas: BebeoUse case : Bebeo3 boutiques stores Z-enfant, Tartine et Chocolat , MelijoeUn catalogue de plusieurs dizaines de milliers de produitsTens of thousands of productsPlusieurs milliers de ventespar jours Several thousands of sales per dayUne multiplication du trafic par 10 pendant les soldesTraffic increase by 10 during sales
  • 7.
    Utilisez la dernièreversion stable de PrestashopUse the last stable version of PrestaShopSupprimez ou désactivez les modules et fonctionnalités non utiliséesRemove or disable unused modules and featuresDésactivez le module de statistiques et utilisez un outil externe (Google Analytics, Weborama, ...)Disable the statistics module and use external tool (Google Analytics, Weborama, ...)Configurez au mieux PrestaShopPrestaShop Configuration
  • 8.
    Statique : quin’est pas dynamiqueStatic : whichis not dynamicRendez statiques un maximum d’éléments :Page d’accueilLanding pagePage d’erreur 404404 errorListe des catégoriesCategory listing…La clé de la performance : pensez statique!Improve performance: thinkstatic!
  • 9.
    Videz les tablesde statistiquesTruncatestatisticstablesSupprimez les paniers inutilisésRemoveunusedcartsSupprimez les bons de réduction expirésRemoveexpired discountsContenu de la base de donnéesDatabase content
  • 10.
    Un design d’architecturescalable & fiableDesigned for scalability & reliabilitySéparation des couches applicatives (Cache, PHP et BDD),Separatelayers : caching, PHP & DatabasesPenser scalabilitéThinkscalableRépartition de chargeImplementloadbalancing for multiple front-ends
  • 11.
    Optimisez le contenustatiqueThinkstaticConnectedusers17896SquidVarnishHTMLHTMLHTML25LighttpdLighttpdApache + PHPLighttpdPshop3Apache + PHP/img/css/jsPshop34MySQLd
  • 12.
    Utilisez des serveursde caches,Use reverse proxieswith a tunedpolicy,Séparez HTML, JS et CSS sur des noms de domaines différents,Separate HTML, Jscript & CSS on dedicated FQDN,Optimisez la délivrance du contenu statique avec un Webserver optimisé (Lighttpd ou nginx),Dedicate a specific and fine tuned web server to deliverstatic contents,Maximisez l’utilisation du cache du navigateurFeel confortable using browser caching
  • 13.
    Configuration optimisée d’apacheet de PHP (faible empreinte mémoire, adapté pour une trafic élevé, …)Finetuned apache and php configuration (lowmemoryfingerprint, reliablebehaviour on highamount of trafic)Utilisez un système de cache d’opcode PHP (APC ou eAccelerator)Use an opcodecaching system for PHP (APC or eAccelerator)Implémentez un politique de Rewriting d’url statiqueUse a staticpolicy for the Url Rewriting rulesOptimisez MySQL pour pourInnoDBFinetune MySQL for InnoDBConfiguration serveur orientée performanceFinetune system & services
  • 14.
    Charge : Augmentezle nombre de frontauxWhenneeded : Use yourscalability16Load Balancer25Apache + PHPApache + PHPApache + PHPApache + PHP4PshopPshopPshopPshop3front-01front-02front-03front-0XMySQLdMySQLdDB-SlaveDB-Master
  • 15.
    Augmentez le nombrede frontaux pour augmenter la capacité de traitementIncrease the number of yourfront-ends
  • 16.
    Utilisez des frontauxvirtuels pour les moments clés (Soldes, Fêtes, etc.)Use virtual « on demand » servers for yourkey moments (sales, …)
  • 17.
    Attention au goulotd’étranglement sur le Master BDDRemainalert as to the behavior of yourdatabaseUtiliser un serveur esclaveUse slave server16Load Balancer25Apache + PHPApache + PHPApache + PHPApache + PHP34PshopPshopPshopPshopWritein DBInstant readReadin DBfront-01front-02front-03front-0XMySQLdMySQLd
  • 18.
    Classe Db :privatestatic$_servers = array( array('server' => _DB_SERVER_, 'user' => _DB_USER_, 'password' => _DB_PASSWD_, 'database' => _DB_NAME_), array('server' => '192.168.0.3', 'user' => 'myuser', 'password' => 'mypassword', 'database' => 'mydatabase'));Séparation des requêtes:Split queries:Ecriture (insert, update),Writing
  • 19.
  • 20.
    Lecture (Catalogue, produits..)Reading(Catalog,products…)Charge : Scalabilité des slavesLoad : Scalabilityof slaves16Load Balancer25Classe DbOuUtiliser un load balancerUse a transparent load balancer34Writein DBInstant readReadin DBApache + PHPApache + PHPApache + PHPApache + PHPPshopPshopPshopPshopLoad BalancerMySQLdfront-01front-02front-03front-0XDB-MasterMySQLdMySQLdMySQLdDB-SlaveDB-SlaveDB-Slave