Optimiser les performances de Magento Philippe Humeau (NBS System / Wikigento) Bargento, Paris le 02/02/09
Sommaire I. Introduction II. Etat des lieux III. Oùse trouve les leviers? IV. Les méthodes d optimisation V. Conclusion
Introduction Magento répond (indéniablement) à un besoin fonctionnel fort des clients finaux : Souplesse de gestion des Produits / Catalogues Fonctions très complètes Design très varié et agréable Basésur un Framework très fort et pérenne : Zend Le créneau était un peu vide depuis OS Commerce Magento va s imposer, c est logique et mérité, donc il faut que l on progresse tous sur les performances!
Constats Cette souplesse et ces fonctionnalités ont un coût très fort en terme de ressources : Un visiteur «moyen»magentoïsécoûte 3 à7 fois plus de ressource CPU / RAM qu en OS Commerce Des goulots d étranglements sont présents Le rendu des pages sur les serveurs Web frontaux L utilisation du B.O tue les performances de la DB Certaines fonctions (comparateur produit ) sont voraces Les clients arrivent en «mode panique»
Pourquoi? Les sources de ces maux peuvent se catégoriser : La culture du développement Les problèmes du Moteur L inadaptation du langage interprété à cet usage La standardisation des environnements de hosting Les problématiques Hardware Mais Magento est une évolution logique et nécessaire, donc tout le monde va (devoir) s adapter
Comment? La culture du développement : Pas de développement dans son coin sans test Pas d outsourcing àdes inconnus (peu compétents) qui écrivent leurs fonctions dans le framework Tests de charge, avant la mise en prod, incontournables Optimisation de la taille, de la factorisation du code et de l organisation des séquences de chargements Gestion de la taille des contenus (non 30 Mo, même en streaming, ce n est pas acceptable comme intro Roger)
Comment? Les problèmes du Moteur : Question : What is the correct algorithm complexity for a full table search? Answer: UsuallyN but definitlynot ~N² «Fragmenter»les produits en de multiples tables complexifie les requêtes alors que cela devrait les simplifier Le rendu des pages, le phtmlet quelques autres points pourraient bénéficier d optimisations
Comment? L inadaptation du langage interprété à cet usage : Le compilateur qui «gommait»la lourdeur de l objet n est pas làpour jouer son rôle Le code PHP / Zend est complexe à«cacher» efficacement Le rendu d une page provoque l enchainement de 12 à14 fonctions en cascade A chaque requête de page, en dehors des caches Rproxy& Opcode, presque toute la séquence d interprétation Magento/Zend/PHP est relancée
Comment? La standardisation des environnements de hosting Les hébergeurs (pas tous) installent des LAMP par défaut sans les optimiser pour Magento Une installation optimale demande de passer du temps à«profiler»le site pour lui donner des réglages spécifiques sur le Rproxy, l APC cache, les workers apache, le service Mysql etc Toutes les couches comptent: hardware, kernel, service, peering, etc Si l une d elle n est pas optimisée, on perd en performance
Comment? Les problématiques Hardware : La différence de performances entre un Intel Xéon 5440 et un AMD Shanghai 2384, pour un frontal web Magento est de 18% (en faveur de l AMD) La conception et l utilisation des caches L2/L3 des processeurs récents, notamment multicore, est complexe (false cache sharing par exemple) On fait 10 fois mieux avec 8 Go de RAM qu avec 2 Go, si le système a étéconçu pour, vive le «Memory Trade-off»
Optimisation Une architecture optimale, c est un début!
Optimisation More Power!
Optimisation Good CPUs!
Optimisation Optimiser le nb de produits/catégories (ne pas faire un produit par longueur de nappe par exemple) Utiliser un backend MyISAM pour le BO, split FO/BO Utiliser des pages statiques pour la home et les 404 Concentrer les JS/CSS en un fichier hors des pages Fédérer les.htaccess dans le fichier du Vhost Passer PHP en mode fast_cgi Mettre àjour régulièrement Magento Entre aucune optimisation et «la totale»(hw, soft, conf, code), on obtient un facteur 4 minimum!
Optimisation Utiliser APC Code cache et memcached Mettre en place un Rproxy Passer Mysql en cluster (tout en RAM) Master² Eviter de cumuler les fonctions lentes ou consommatrices dans la même page Mettre le moins possible d éléments dynamiques de session dans une page, ou les limiter àun bloc Ajuster le cache Mysql(ni trop gros, ni trop petit), 64 Mo pour une petite base, 128 sinon Consulter le guide d optimisation qui arrivera sur Wikigento prochainement, j ai pas la place ici ;-)
Pistes D un point de vue Système & Réseau, on a pas encore tout tenté: Kernel en cache Fully associative et non Direct Map Tester les nouveaux I7 Séparer les DB pour le Front et le Back office Tenter de créer un «compilateur»de site Essayer d autres backends ou d autres softs de DB Etc On cherche, on arrête pas ;)
Conclusion Nous allons tous progresser : Hébergeur spécialisé& optimisé L Opensourcedoit régler le soucis de l interprétation récurrente (notamment Zend/PHP) La matériel va évoluer, les développeurs aussi, Varien va améliorer aussi ses performances Magento va s imposer, c est logique et mérité, donc le chemin nécessaire sur les performances sera parcouru par tous, autant être en avance.
MERCI NBS System : le premier hébergeur spécialisé Magento Retrouvez nos conseils, nos articles et nos tuyaux : www.wikigento.fr Philippe Humeau, Directeur Associé Mail : philippe.humeau@nbs-system.com Sylvain Martin, responsable des ventes Mail : sylvain.martin@nbs-system.com Adrien Urban, responsable hébergement Magento Mail : adrien.urban@nbs-system.com