Hébergement
Magento 2 sur Kubernetes
L'approche headless de Zento utilise un frontend PWA avec un backend Magento 2. Tandis que le frontend PWA
La fondation Magento 2 de l'application Zento est exécutée sur des clusters Kubernetes créés en utilisant le service AWS EKS (Elastic Kubernetes Service).
Comment fonctionne l'hébergement traditionnel ?
Les applications web traditionnelles s'exécutent sur un serveur et toutes les visites sont dirigées vers l'adresse IP de ce serveur. Cette stratégie d'avoir un serveur dédié présente des difficultés pour tenir et s'adapter à la charge lorsque le trafic augmente. De la même manière, la capacité prévue doit être assez importante pour pouvoir bien fonctionner pendant des périodes où le nombre de demandes dépassent les moyennes, alors que pendant les promotions ou les soldes cela peut s'avérer insuffisant pour tenir pendant ces pics de trafic. Un autre problème avec cette approche est la fiabilité, car en cas de souci technique sur ce serveur dédié tout le site web devient inaccessible, un cas classique de point de défaillance unique.
Une meilleure configuration est d'avoir plusieurs serveurs dédiés avec un distributeur de charge (load balancer) qui peut monter les capacités avec des nouveaux serveurs en cas de besoin. Même si cette approche est plus fiable et peut augmenter les ressources disponibles, un nouveau type de problèmes concerne l'actualisation et la synchronisation continue de multiples serveurs. L'augmentation des capacités peut aussi prendre un certain temps (en général entre 5 et 20 minutes pour une configuration Magento) ce qui peut être trop lent pour des pics soudains de trafic.
En conclusion, l'hébergement traditionnel est lent ou ne permet pas la montée en charge, trop peu adaptable ou difficilement tenu à jour, mais dans tous les cas trop coûteux.
Comment fonctionne Kubernetes ?
Kubernetes est un service de conteneurs. Les applications sont packagées dans des petits conteneurs Docker appelés pods (vous pouvez imaginer ces conteneurs comme des mini-serveurs faisant tourner l'application, là où ils sont déployés). Ces pods sont déployés dans des nœuds Kubernetes (qui sont essentiellement des serveurs dédiés à héberger des dizaines de pods).
Lorsqu'une application a besoin de monter en charge, des nouveaux pods sont démarrés en quelques secondes et prennent en charge le trafic entrant. Une fois le pic de trafic passé, les pods sont éteints et les ressources sont rendues disponibles à nouveau pour le nœud. Dans la grappe Kubernetes (aussi appelée cluster) des nouveaux nœuds sont ajoutés en quelques minutes si le nombre de pods continue d'augmenter, pouvant accepter le déploiement des nouveaux pods si nécessaire.
Un autre aspect très important concerne les mises à jour applicatives, car cette technologie permet de créer des pods avec la nouvelle version du code pour remplacer les anciens pods en quelques secondes, sans aucune interruption. Cette approche très propre permet une façon élégante de déployer des applications en utilisant des composants qui servent un seul but, plutôt que d'avoir un seul serveur remplir plusieurs rôles.
Ensemble avec Serverless, Kubernetes est actuellement la meilleure technologie pour héberger des applications web.
Avec la solution Zento, les magasins en ligne sont distribués sur des nombreux nœuds Kubernetes (dans le cloud) et peuvent monter en charge avec le trafic en quelques secondes, tout en maintenant un environnement isolé, propre et sécurisé. Si pour une raison ou une autre un nœud devient indisponible, les magasins ne sont pas affectés, la distribution des pods permettant de démarrer des nouveaux pods sur d'autres nœuds qui sont toujours fonctionnels.
Comment sont gérés les fichiers média par Zento ?
Un des problèmes majeurs pour déplacer Magento depuis un serveur unique sur plusieurs serveurs ou dans le cas de Zento vers Kubernetes est la gestion des fichiers média. Mis à part le code applicatif, Magento dépend de l'existence d'un répertoire média sur disque pour stocker toutes les images et les fichiers concernant les produits du magasin. Les données sont essentiellement colocalisées avec le code de l'application, ce qui n'est pas une bonne pratique.
La solution générique à ce problème est d'utiliser un stockage partagé accessible depuis tous les serveurs (techniquement il s'agit de
monter une unité NFS4
) qui permet de persister des données entre les serveurs, tout en gardant l'apparence d'un répertoire unique pour Magento. En revanche, cette approche est lente et augmente la probabilité d'avoir des erreurs.
Zento propose une meilleure approche : la couche de stockage disque de Magento a été remplacée par un chargement des fichiers média directement sur AWS S3, ce qui permet au frontend d'utiliser directement les ressources depuis S3 via le CDN. Cette méthode est très efficace pour les pods Magento Kubernetes (qui hébergent maintenant seulement le code de l'application), très rapide pour le chargement du frontend et extrêmement fiable, AWS S3 étant un des services Internet les plus solides.
Le stockage des fichiers média sur S3 permet au frontend Zento de demander des versions redimensionnées et optimisées des images, générées et mises en caches à la volée avec des fonctions Serverless. Vous pouvez lire plus sur le traitement des images dans l'article wiki
Le flux de trafic de Zento pour Magento 2
Toutes les visites adressées à Magento sont acheminées depuis le CDN CloudFront vers un distributeur de charge applicatif AWS (Application Load Balancer ou ALB). Basée sur le host, ce composant sait comment transférer le trafic vers le bon namespace et service dans EKS, ou le trafic est distribué entre les pods.
Les pods m2-http du magasin sont responsables seulement de servir le trafic. Ils ne font jamais tourner des lots de tâches lourdes qui pourraient affecter leurs performances pour répondre aux demandes des visiteurs.
Comment sont exécutées les tâches lourdes ?
Le fonctionnement de Magento demande plusieurs opérations assez intensives qui sont exécutées dans des batch jobs. Contrairement aux serveurs dédiés, dans Zento ces tâches ne sont jamais exécutées sur des pods qui servent le trafic live, mais plutôt sur des pods spécifiques.
Magento 2 possède un système de file d'attente pour ce genre de tâches. Par exemple, pour exécuter une tâche de création ou mise à jour de 10 000 produits, 10 000 tâches sont ajoutées dans une file d'attente pour les pods consommateur qui les traitent une par une. L'infrastructure Kubernetes de Zento démarre plusieurs pods de ce type, capables d'exécuter des tâches en parallèle pour finir plus rapidement le fil d'attente et qui sont arrêtés automatiquement lorsque la liste est vide.
Conclusion
Zento fait tourner Magento dans une configuration de pointe utilisant Kubernetes pour que votre magasin puisse :
- monter en charge en quelques secondes si nécessaire
- éliminer les goulots d'étranglement
- fonctionner de manière fiable et stocker les fichiers média proprement
- exécuter des tâches lourdes en isolation, sans affecter l'expérience utilisateur
- déployer les mises à jour de manière transparente, sans perte de disponibilité
Ces fonctionnalités sont importantes pour assurer une très bonne expérience des visiteurs, avec une boutique en ligne très rapide à tout moment, sans ralentissements ou interruptions, ce qui pour vous en tant que commerçant permet d'augmenter les conversions.