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!
Vider les tables de statistiquesTruncatestatisticstablesSupprimer les paniers inutilisésRemoveunusedcartsSupprimer 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 statiqueThinkstatic as much as youcan
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 yourscalability< 10 000 utilisateurs
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 server> 10 000 utilisateurs
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							slaves   Classe DbOuUtiliser un load balancerUse a transparent load balancer

Sécurité et performance, comment bien optimiser PrestaShop

  • 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.
    Vider les tablesde statistiquesTruncatestatisticstablesSupprimer les paniers inutilisésRemoveunusedcartsSupprimer 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 contenustatiqueThinkstatic as much as youcan
  • 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 yourscalability< 10 000 utilisateurs
  • 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 server> 10 000 utilisateurs
  • 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 slaves Classe DbOuUtiliser un load balancerUse a transparent load balancer