
Dans les coulisses
Black Friday Week 2024 : toute l’actu de Digitec Galaxus
par Jana Pense
Le Black Friday ne fait pas qu’augmenter le rythme cardiaque des fans de shopping, il donne aussi des frissons aux équipes d’ingénierie logicielle de Digitec Galaxus. L’objectif est clair : la boutique doit pouvoir faire face à l’afflux massif de visiteurs. Les préparatifs commencent dès l’été.
Avant de rejoindre Digitec Galaxus cet automne en tant qu’ingénieur logiciel, je me suis toujours demandé, lors des grandes journées de promotion comme le Black Friday ou le Cyber Monday, ce qui se passait en coulisses. Cette année, je peux non seulement satisfaire ma curiosité, mais aussi vous faire parcourir les étapes de la préparation. En tant que développeur au sein de l’équipe responsable de notre communauté, je suis en effet au cœur de l’action cette année.
C’est par une chaude journée de juillet que tout commence : le comité d’organisation des journées de promotion de cette année se réunit pour la première fois et fait un premier forecast. Ces questions se posent : à combien de clients devons-nous nous attendre ? Quels sont les préparatifs à effectuer ? À quels scénarios spéciaux les équipes doivent-elles se préparer ? Quels sont les dangers ? Grâce aux conclusions de ces analyses, le Product Development (notre service interne de développement logiciel) vous permet de faire vos achats le plus facilement possible pendant la semaine du Black Friday.
Dans les mois qui suivent, le Category Management se donne à fond et traque les meilleures offres. Il va de soi que les objets de convoitise doivent être en stock à temps pour les jours de promotion. En même temps, notre équipe logistique déplace par précaution les offres promotionnelles dans le système de stockage automatisé. Ainsi, les produits commandés parviennent plus rapidement au service d’emballage et vous sont envoyés immédiatement.
Notre boutique ne fonctionne pas sur une quelconque boîte en fer blanc dans nos bureaux. Nous hébergeons pratiquement tous nos systèmes de boutique en ligne dans ce que l’on appelle un cluster Kubernetes sur le cloud Microsoft Azure. En termes simples, un cluster Kubernetes se compose d’un grand nombre de serveurs virtuels, également appelés nœuds. Nos systèmes fonctionnent sur ces serveurs. Pendant 358 jours par an, la configuration standard suffit. Pendant la semaine du Black Friday, nous nous attendons toutefois à une augmentation massive du trafic sur nos boutiques. Pour les jours de pointe, nous ajoutons donc des nœuds supplémentaires au cluster afin de renforcer nos systèmes. Cette démarche est efficace et écologique, car les serveurs peuvent être loués par d’autres clients du cloud Azure après la semaine de promotion et ne restent pas inutilisés.
Mais les serveurs supplémentaires ne sont pas les seuls à être demandés. Nos équipes de développement doivent également préparer les fonctionnalités relevant de leur compétence à cette charge importante. Dans mon cas, il s’agit de charger et d’ajouter des commentaires ou des évaluations. Pour cela, nous utilisons un outil qui nous permet de simuler une charge utile élevée afin de tester le comportement de notre boutique dans ce scénario. Ces résultats et le nombre supposé d’utilisateurs nous montrent où il y a encore des goulots d’étranglement dans le système. Peu avant la semaine de promotion, nous faisons du shopping et louons les nœuds supplémentaires afin d’être parés pour la grande ruée.
L’année dernière, notre boutique a été fermée pendant une courte période après minuit lors du Black Friday. Pour en trouver la cause, nous devons jeter un coup d’œil à la structure de la boutique. Notre boutique est divisée en plusieurs parties. Ce que vous voyez à l’écran est ce que l’on appelle le front-end. J’y travaille aussi tous les jours. Pour cette partie, nous utilisons React JS, Server Side Rendering avec Next JS, Styled Components et Apollo pour les requêtes réseau. Ensuite, il y a le middleware GraphQL. Ici, nous acceptons toutes les demandes du front-end, nous les transmettons aux systèmes back-end concernés et nous renvoyons les réponses dans le format demandé par le front-end. Les systèmes back-end font en sorte que la magie opère en coulisses. Dans ces systèmes, nous veillons à ce que toutes les données soient stockées au bon endroit et éditées rapidement.
Entre les back-ends et le middleware GraphQL, nous utilisons un Redis Cache pour le stockage temporaire de données fréquemment consultées, par exemple sur les produits. Nous réduisons ainsi la charge sur nos bases de données (MongoDB, SQL Server) et autres systèmes.
L’année dernière, notre système GraphQL était monté en puissance au point de fonctionner simultanément sur 2000 serveurs virtuels et d’effectuer plusieurs dizaines de milliers de requêtes par seconde sur le cache Redis en question. À un certain moment, le cache ne pouvait plus traiter les demandes et des erreurs se produisaient. À cela s’ajoutait une erreur d’application qui répétait ces mêmes demandes à l’infini. La charge s’en est trouvée encore multipliée et le cache était arrivé à ses limites. En conséquence, un grand nombre de requêtes atterrissaient dans la base de données, ce qui ralentissait énormément la boutique et entraînait finalement un bref temps d’arrêt. Bien sûr, nous ne nous laisserons pas faire. Depuis cet incident, nous avons revu notre stratégie de mise en cache et faisons désormais confiance à un cache multi-niveaux.
Nous utilisons désormais un LRU In-Memory Cache (en anglais) comme premier niveau de cache. Les produits les plus consultés y sont stockés temporairement. Cela permet d’amortir les pics de demandes adressées à notre cache Redis. Nous avons également corrigé l’erreur d’application de l’année dernière, de sorte qu’une demande erronée ne sera réessayée qu’une seule fois. Cela nous permet d’éviter de surcharger le cache Redis.
Depuis le Black Friday et le Cyber Monday 2021, nous avons en outre revu et simplifié le système back-end pour les « Special Deals ». Nous utilisons cette fonctionnalité non seulement pour les offres de la semaine du Black Friday, mais aussi pour les offres du jour que nous vous proposons tout au long de l’année. Grâce à cette simplification, nous espérons avoir moins de problèmes de rapidité du côté de l’offre.
Voilà pour la théorie, la pratique suivra lors du Black Friday. Peu avant le lancement des offres, les équipes font évoluer manuellement certaines parties de leurs systèmes, comme les caches ou les bases de données, vers des tailles définies au préalable. Pour le Black Friday, nous voulons jouer la carte de la sécurité et nous intervenons manuellement à ces mêmes endroits critiques afin de garantir la disponibilité d’un nombre suffisant de serveurs pour faire face à la vague initiale après minuit. Pour les autres pièces, notre système crée automatiquement plus de capacité en cas de goulot d’étranglement. Nos serveurs sont donc prêts à l’attaque.
Ensuite, les fonctions de la boutique qui ne sont pas essentielles pour le Black Friday sont désactivées via des « feature flags ». Pour une fois, le flux en direct ne vous tiendra pas au courant de qui commande quoi et d’où. De même, nous renonçons aux recommandations de produits et aux articles de la communauté.
Nous déposons les offres promotionnelles dans nos systèmes internes sous la forme de ce que nous appelons des campagnes publicitaires. Nous définissons une période de validité pour tous les produits et déterminons leur disponibilité. Ensuite, nous laissons le système travailler pour nous. Il affiche automatiquement les offres dans la boutique et les grise lorsqu’elles ne sont plus disponibles.
Ce à quoi nous ne renonçons pas non plus pendant la semaine de promotion, c’est notre Continuous Deployment. Nous ne pratiquons pas le « gel des codes ». Si, en tant que développeur, je souhaite valider une modification dans le système de versionnement et qu’un collaborateur ou une collaboratrice du secteur de la boutique concerné le confirme, vous verrez, en tant que client·e·s, la modification en l’espace de quelques minutes. Nous faisons ici confiance à nos essais automatisés, qui sont effectués avant chaque validation, ainsi qu’à la responsabilité de nos équipes d’ingénierie.
Dans la nuit du mardi (notre premier jour de promotion cette année), la nuit du Black Friday ainsi que la nuit du Cyber Monday, il y aura des équipes pour les appels d’urgence à minuit. Des développeurs et des développeuses de tous les domaines de la boutique y sont présents et peuvent réagir immédiatement si quelque chose ne va pas.
J’ai répondu à beaucoup de mes questions de novice, en vous faisant parcourir les étapes de la préparation. J’attends maintenant avec impatience ma première semaine du Black Friday. Ressentez-vous la même chose ou voulez-vous en savoir plus sur moi ? Je ne dévoile aucune offre, mais je répondrai volontiers aux questions techniques dans les commentaires.
Quand je ne suis pas en train de pousser des pixels ou d'organiser des octets, on me voit souvent avec mes drones FPV faits maison. Des Action Cams démontées aux grosses caméras de cinéma, je fais voler à peu près tout ce qui peut prendre des vidéos ou des photos.