Retrouvez le support de présentation utilisé par notre expert Magento, Matthieu Bouchot, lors de l'atelier que l'e-Commerce Academy a tenu sur l'édition 2014 du salon Bargento.
5. BARGENTO 2014!
atelier
Pourquoi
& est-ce vrai que
MAGENTO 1.x!
est considéré comme
une plateforme
LOURDE ?!
6. MAGENTO 1.x : une plateforme lourde ?
Lourd e u r d ’ u n e a p p l i c a t i o n
Indicateurs de mesures :
• volume de sources
• facilité d’apprentissage
• structure de l’application
• temps d’exécution global
• ratio temps d’exécution technique/temps d’exécution métier
• problèmes connus ?
BARGENTO!2014!–!E/COMMERCE!ACADEMY!
7. MAGENTO 1.x : une plateforme lourde ?
Définition de MAGENTO
MAGENTO est :
• une plateforme e-Commerce
• un socle technique (presque) autonome
MAGENTO n’est pas :
• un CMS
• une application Zend Framework
Solution existante
depuis mars 2008
Actuellement en
version 1.9.0.1
9 versions majeures
en édition CE
BARGENTO!2014!–!E/COMMERCE!ACADEMY!
8. MAGENTO 1.x : une plateforme lourde ?
C o m p a r a t i f e n t re MAGENTO CE & EE
MAGENTO CE & EE partagent :
• le même socle technique
• les mêmes modules core (Mage_)
MAGENTO EE a en plus :
• des modules (fonctionnalités) supplémentaires
• support éditeur
BARGENTO!2014!–!E/COMMERCE!ACADEMY!
9. MAGENTO 1.x : une plateforme lourde ?
Volume s de sourc e s
Nombre de modules
65
Nombre de fichiers (sans var et media)
13091
Nombre de dossiers (sans var et media)
4866
Implémentation
PHP > 5.2 POO et Pattern MVC
Nombre de classes total
7187
• dont core Magento
4503
• dont librairies
2653
• dont Zend Framework
2380
Nombre de lignes de code
• dont core Magento
• dont librairies
• dont Zend Framework
1.321.898
740.629
578.791
494.165
BARGENTO!2014!–!E/COMMERCE!ACADEMY!
10. MAGENTO 1.x : une plateforme lourde ?
I n d i c a t e u r s b a s e d e d o n n é e s
Base de données MySQL :
• 341 tables
• 3006 colonnes
• 450 contraintes d’intégrité (foreign keys)
• 723 indexes
• utilisation de l’EAV (sur certaines entités)
BARGENTO!2014!–!E/COMMERCE!ACADEMY!
11. MAGENTO 1.x : une plateforme lourde ?
S t r u c t u re d e l ’ a p p l i c a t i o n
Magento est une plateforme modulaire assurant un maximum de
découplage entre composants, de plus, la structure des modules est
rigoureuse et ne laisse pas de place au hasard.
Vue macro des modules
Structure d’un module
13. MAGENTO 1.x : une plateforme lourde ?
P re m i e r p o i n t b i l a n
Volume de sources/structure BDD
Structure de l’application
Facilité d’apprentissage
D’un point de vue structurel, la plateforme est donc lourde mais offre en
contrepartie :
• beaucoup de fonctionnalités
• un socle technique robuste
BARGENTO!2014!–!E/COMMERCE!ACADEMY!
15. MAGENTO 1.x : une plateforme lourde ?
É t u d e d e p e r f o r m a n c e : p ro t o c o l e ( 2 p a r t i e s )
Technique Magento (incluant)
• chargement des fichiers de classes (autoload)
• chargement de configuration
• chargement des blocks en mémoire (LoadLayout)
• traversée de la couche routage
• calcul des traductions
• calcul des chemins des ressources (template/layout/skin) avec le fallback
Fonctionnel Magento (incluant)
• chargement des entités que l’on souhaite récupérer/afficher
• sauvegarde d’entité que l’on souhaite mettre à jour
• affichage
16. MAGENTO 1.x : une plateforme lourde ?
É t u d e d e p e r f o r m a n c e : p é r i m è t re d ’ é t u d e
Sur les pages/actions suivantes :
• home page
• page catégorie
• page produit
• page panier
• action ajout au panier
• action sauvegarde de commande
BARGENTO!2014!–!E/COMMERCE!ACADEMY!
17. MAGENTO 1.x : une plateforme lourde ?
É t u d e d e p e r f o r m a n c e : c o n t e x t e d ’ é t u d e
Version de l’environnement
MAGENTO 1.9 CE
Nombre de vues magasins
3 (FR, EN, DE)
Catégories
1k
Produits
500k
Clients
1M
Commandes
200k
Caches actifs ?
Oui
Indexes flats actifs ?
Oui
Réf. Machine de test
Core i5 2,4Ghz
Ram 4Go
HD 1To : 5400rpm
BARGENTO!2014!–!E/COMMERCE!ACADEMY!
18. MAGENTO 1.x : une plateforme lourde ?
É t u d e d e p e r f o r m a n c e : p a g e d ’ a c c u e i l
19. MAGENTO 1.x : une plateforme lourde ?
É t u d e d e p e r f o r m a n c e : m é t r i q u e s p a g e d ’ a c c u e i l
Temps total d’exécution en sec.
0,71
Nombre de requêtes SQL
58
Volume d’entrées de caches lues en Ko
83
Volume de données lues en Ko
1055
Autoload de classes (en sec.)
0,16
0,25
Nombre de classes chargées
381
Temps jusqu’à l’éxecution de l’action (en sec.)
• dont chargement de configuration (en sec.)
0,14
0,053
Chargement des blocks en mémoire (en sec.)
0,1
Chargement des templates/layouts/skins (en sec.)
0,007
Traductions (en sec.)
0,003
Temps de traitement métier (controller) en sec.
0,02
Temps de traitement vue (affichage block) en sec.
0,160,18
Métriques
générales
Métriques
techniques
Métriques
métiers
20. MAGENTO 1.x : une plateforme lourde ?
É t u d e d e p e r f o r m a n c e : p a g e c a t é g o r i e
21. MAGENTO 1.x : une plateforme lourde ?
É t u d e d e p e r f o r m a n c e : m é t r i q u e s p a g e c a t é g o r i e
Temps total d’exécution en sec.
0,70
Nombre de requêtes SQL
43
Volume d’entrées de caches lues en Ko
55
Volume de données lues en Ko
1055
Autoload de classes (en sec.)
0,18
0,26
Nombre de classes chargées
336
Temps jusqu’à l’éxecution de l’action (en sec.)
• dont chargement de configuration (en sec.)
0,15
0,064
Chargement des blocks en mémoire (en sec.)
0,1
Chargement des templates/layouts/skins (en sec.)
0,014
Traductions (en sec.)
0,003
Temps de traitement métier (controller) en sec.
0,014
Temps de traitement vue (affichage block) en sec.
0,160,18
Métriques
générales
Métriques
techniques
Métriques
métiers
22. MAGENTO 1.x : une plateforme lourde ?
É t u d e d e p e r f o r m a n c e : p a g e p ro d u i t
23. MAGENTO 1.x : une plateforme lourde ?
É t u d e d e p e r f o r m a n c e : m é t r i q u e s p a g e p ro d u i t
Temps total d’exécution en sec.
0,82
Nombre de requêtes SQL
49
Volume d’entrées de caches lues en Ko
121
Volume de données lues en Ko
1064
Autoload de classes (en sec.)
0,18
0,21
Nombre de classes chargées
418
Temps jusqu’à l’éxecution de l’action (en sec.)
• dont chargement de configuration (en sec.)
0,12
0,048
Chargement des blocks en mémoire (en sec.)
0,08
Chargement des templates/layouts/skins (en sec.)
0,011
Traductions (en sec.)
0,003
Temps de traitement métier (controller) en sec.
0,11
Temps de traitement vue (affichage block) en sec.
0,120,23
Métriques
générales
Métriques
techniques
Métriques
métiers
24. MAGENTO 1.x : une plateforme lourde ?
É t u d e d e p e r f o r m a n c e : p a g e p a n i e r
25. MAGENTO 1.x : une plateforme lourde ?
É t u d e d e p e r f o r m a n c e : m é t r i q u e s p a g e p a n i e r
Temps total d’exécution en sec.
0,85
Nombre de requêtes SQL
55
Volume d’entrées de caches lues en Ko
70
Volume de données lues en Ko
1094
Autoload de classes (en sec.)
0,18
0,18
Nombre de classes chargées
424
Temps jusqu’à l’éxecution de l’action (en sec.)
• dont chargement de configuration (en sec.)
0,13
0,05
Chargement des blocks en mémoire (en sec.)
0,04
Chargement des templates/layouts/skins (en sec.)
0,005
Traductions (en sec.)
0,003
Temps de traitement métier (controller) en sec.
0,44
Temps de traitement vue (affichage block) en sec.
0,090,53
Métriques
générales
Métriques
techniques
Métriques
métiers
26. MAGENTO 1.x : une plateforme lourde ?
É t u d e d e p e r f o r m a n c e : a c t i o n a j o u t e r a u p a n i e r
27. MAGENTO 1.x : une plateforme lourde ?
É t u d e d e p e r f o r m a n c e : m é t r i q u e s a c t i o n a j o u t e r a u p a n i e r
Temps total d’exécution en sec.
0,74
Nombre de requêtes SQL
51
Volume d’entrées de caches lues en Ko
107
Volume de données lues en Ko
845
Autoload de classes (en sec.)
0,18
0,17
Nombre de classes chargées
321
Temps jusqu’à l’éxecution de l’action (en sec.)
• dont chargement de configuration (en sec.)
0,17
0,07
Chargement des blocks en mémoire (en sec.)
NA
Chargement des templates/layouts/skins (en sec.)
NA
Traductions (en sec.)
0
Temps de traitement métier (controller) en sec.
0,53
Temps de traitement vue (affichage block) en sec.
NA0,53
Métriques
générales
Métriques
techniques
Métriques
métiers
28. MAGENTO 1.x : une plateforme lourde ?
É t u d e d e p e r f o r m a n c e : a c t i o n s a u v e g a rde de commande
29. MAGENTO 1.x : une plateforme lourde ?
É t u d e d e p e r f o r m a n c e : m é t r i q u e s a c t . sauv. de commande
Métriques
générales
Temps total d’exécution en sec.
3,5
Nombre de requêtes SQL
112
Volume d’entrées de caches lues en Ko
69
Volume de données lues en Ko
845
Autoload de classes (en sec.)
0,2
0,22
Nombre de classes chargées
437
Temps jusqu’à l’éxecution de l’action (en sec.)
• dont chargement de configuration (en sec.)
0,22
0,06
Chargement des blocks en mémoire (en sec.)
0,003
Chargement des templates/layouts/skins (en sec.)
0
Traductions (en sec.)
0
Temps de traitement métier (controller) en sec.
2,9
Temps de traitement vue (affichage block) en sec.
0,082,98
Métriques
techniques
Métriques
métiers
31. MAGENTO 1.x : une plateforme lourde ?
S e c o n d p o i n t b i l a n
Moyenne classes chargées (en unité)
400
Moyenne temps d’exécution (en sec.)
1s
Moyenne ratio exé. Techniques/exé. Métier (en %)
35%
Moyenne requêtes SQL (en unité)
60
Moyenne volume de données manipulées (en Mo)
1Mo
Magento peut-être considéré comme une plateforme lourde à cause de son
overhead de temps d’exécution, en revanche, c’est quasiment un temps
constant sur toutes les pages.
Il conviendra donc d’être vigilant pour vérifier si des temps de chargements
sont anormalement longs, cela proviendrait de développements spécifiques
ou modules communautaires mal conçus/implémentés.
BARGENTO!2014!–!E/COMMERCE!ACADEMY!
32. MAGENTO 1.x : une plateforme lourde ?
La ré-indexation dans MAGENTO
La ré-indexation MAGENTO a pour particularité :
• de ne s’appliquer qu’aux entités catalogue (produits/catégories) nativement
• d’être nécessaire pour le bon affichage des données sur le front
• de devoir être lancée après chaque import catalogue
• d’accélérer les traitements en lecture côté front
• de permettre l’agrégation de données (ex. promotion catalogue)
33. MAGENTO 1.x : une plateforme lourde ?
M é t r i q u e s r é - i n d e x a t i o n
catalog_product_attribute (en sec.)
1550
catalog_product_price (en sec.)
840
catalog_url (en sec.)
18000
catalog_product_flat (en sec.)
7160
catalog_category_flat (en sec.)
7
catalog_category_product (en sec.)
10000
catalogsearch_fulltext (en sec.)
5400
cataloginventory_stock (en sec.)
220
Bilan : une estimation entre 10h et 15h est nécessaire pour une
ré-indexation totale
34. MAGENTO 1.x : une plateforme lourde ?
Pourq u o i e s t - c e s i l o n g / l e n t ?
• ajout de colonnes (tables flat)
• combinaisons pouvant être « explosives »
Indexe de prix
Nombre de produits
X nombre de groupes clients
X nombre de websites
Flat + Inventory + Category /
Product + Product attribute
Nombre de produits ou catégories
X nombre de websites
• locks au moment d’écrire dans les tables d’index (surtout pour les gros
volumes)
BARGENTO!2014!–!E/COMMERCE!ACADEMY!
35. MAGENTO 1.x : une plateforme lourde ?
S t r a t é g i e d u « t o u t o u r i e n »
Hors E.E. 1.13, MAGENTO n’indexe que :
• produit par produit (en mode automatique)
• en ré-indexation totale
Pas de ré-indexation partielle !
BARGENTO!2014!–!E/COMMERCE!ACADEMY!
36. MAGENTO 1.x : une plateforme lourde ?
I m p a c t d e s i n d e x e s
locks des tables et des enregistrements
deadlocks possibles
Ralentissements liés à des slow queries
import produits long
1
2
3
BARGENTO!2014!–!E/COMMERCE!ACADEMY!
37. MAGENTO 1.x : une plateforme lourde ?
Vue s maga s ins Cus tome r group ?
L’ajout de vues magasins non contrôlé impacte :
• combinatoire excessive sur les tables d’index (rallongement de l’indexation)
• rechargement très couteux de la configuration
L’ajout de groupes clients non contrôlé impacte :
• combinatoire excessive sur la table d’index des prix
BARGENTO!2014!–!E/COMMERCE!ACADEMY!
39. MAGENTO 1.x : une plateforme lourde ?
Tro i s i ème po i n t bi l a n
Les problèmes connus de MAGENTO sont donc :
• limitation sur le nombre de vues magasins
• gestion des indexes qui bride les imports produits
• limitation sur le nombre de groupes clients
BARGENTO!2014!–!E/COMMERCE!ACADEMY!
40. MAGENTO 1.X : une plateforme lourde ?
Conclusion
MAGENTO est donc reconnue et avérée comme
étant une plateforme lourde car :
• exigeante techniquement
• contient beaucoup de traitements techniques spécifiques (pas forcément utile)
• à des problèmes connus très gênants concernant les imports produits
Cependant, le fait que ce soit une plateforme lourde ne permet pas de justifier
systématiquement que cela soit la cause principale de problèmes de
performances.
BARGENTO!2014!–!E/COMMERCE!ACADEMY!