Web Cloud & DevOps

Cas d’étude : Gérer 20 millions de redirections http en production

by Benoît Vidis 20 août 2019

Les redirections, levier incontournable de la vie des sites

Les redirections http sont une des glues d’internet et nous les utilisons quotidiennement sans vraiment y faire attention.

Les URLs ont un cycle de vie et un mode de diffusion différent de leur contenu associé. Qu’elles soient partagées sur un réseau social, mises en favori, indexées par un moteur de recherche ou même imprimées, les URLs échappent au contrôle de leur créateur et restent potentiellement utilisées pour une durée inconnue.

Si l’adresse d’un contenu se trouve modifiée, ses liens distribués sur internet peuvent être cassés.

Les redirections permettent d’éviter cette situation en ré-aiguillant l’utilisateur vers la nouvelle destination.

Par exemple, si vous tapez “kaliop.fr” dans la barre d’adresse de votre navigateur, vous serez redirigé vers “https://tech.kaliop.com” de manière transparente.

De multiples cas d’usage existent pour qu’une adresse change :

  • Un changement de domaine, comme pour kaliop.fr
  • La réorganisation d’un article dans une autre catégorie qui va modifier son chemin
  • La correction d’un titre, etc.

À cela s’ajoutent d’autres possibles raisons d’avoir recours à des redirections, par exemple :

  • Redirection de protocole http vers https
  • Redirection d’un domaine apex (ex: kaliop.com => www.kaliop.com)
  • Gestion d’URLs courtes, par exemple destinées à l’impression

À mesure q’un site web vie et évolue, le volume de redirections à gérer va en augmentant. Pour des sites qui proposent de nombreux contenus et/ou qui ont un long historique, il devient souvent conséquent.

Si, comme c’est souvent le cas, ces sites ont de plus subi plusieurs refontes où le contenu a à chaque fois été remanié et réorganisé, on peut arriver à des situations où la gestion des redirections représente un challenge technique.

20 millions de redirections

C’est à ce genre de situation que nous avons été confrontés. 

Lors de la refonte de l’ensemble des sites d’un de nos clients (une quarantaine), il s’agissait d’établir un plan de migration d’URLs de la plateforme alors en production vers la nouvelle, tout en maintenant les redirections existantes.

Au total, nous arrivions à un total d’un peu moins d’une vingtaine de millions d’URLs à maintenir, pour la plupart issues de la dernière refonte en cours de développement.

Les redirections existantes étaient configurées d’une part dans la configuration du serveur Apache (200 expressions régulières environ), et d’autre part dans une application PHP/MySQL dédiée (350 000 redirections point à point environ).

Cette situation posait plusieurs problèmes :

  • L’absence de centralisation empêchait d’avoir une vue d’ensemble des redirections existantes,
  • Pas de module d’administration : l’ajout/modification d’une redirection devait passer par une demande au service concerné, puis par une action manuelle,
  • Aucun outil ne permettait de détecter d’éventuelles boucles de redirections.

Suite à ce constat, le cahier des charges qui nous était présenté devait respecter les conditions suivantes:

  • Le traitement des redirections devait être transparent pour l’utilisateur final. Nous nous imposions un temps de réponse maximal de 35ms par requête,
  • Un outil d’administration devait permettre la gestion des redirections : édition, suppression, import/export et détection des boucles de redirection,
  • L’utilisation des redirections devait pouvoir être mesurée et permettre des analyses statistiques,
  • Bien sûr, le tout devait être livré avant le lancement de la refonte des sites.

Quelle solution pour tenir les délais ?

Notre premier réflexe a été de chercher si une solution clé-en-main adaptée existait sur le marché.

Nous n’avons trouvé à l’époque aucun produit capable de gérer un tel volume. Depuis, des services comme redirection.io pourraient être étudiés.

La piste du développement d’une application maison à partir d’un framework classique a rapidement été écartée. Le travail nécessaire n’aurait pas permis de respecter les délais qui nous étaient imposés et le coût en aurait probablement été prohibitif.

S’appuyer sur le module LUA de nginx aurait pu répondre aux exigences de performance et probablement d’analyse, mais n’offrait pas nativement de module d’administration.

Si la plateforme avait été hébergée sur AWS, il aurait été possible d’envisager d’utiliser des lambda@edge pour cloudfront, ce qui n’était pas le cas ici.

Kuzzle et Varnish à la rescousse

Kuzzle est un backend Open Source incubé par Kaliop. C’est grâce à cet outil, intégré avec le Varnish déjà utilisé sur la plateforme, que nous avons pu répondre au challenge qui nous était posé.

Kuzzle est une application Node.js qui s’appuie sur Elasticsearch et Redis, trois technologies réputées pour leurs performances. 

Le traitement des redirections a été implémenté sous la forme d’un plugin Kuzzle, intercalé entre Varnish et les serveurs Web des sites.

Le plugin offrait déjà d’excellentes performances : le temps de réponse moyen était situé entre 15 et 20ms.

En mettant en cache le résultat des redirections dans Varnish, on rendait ce temps de traitement indétectable pour l’utilisateur final.

Schema redirections

La console d’administration de Kuzzle est une application Vue.js, elle aussi Open Source. Grâce à sa nature modulaire, nous avons facilement pu l’utiliser comme base du développement du module d’administration des redirections. Il nous a suffit de modifier les composants existants au besoin et d’ajouter les éléments métier manquants.

Le fait que des briques essentielles telles que l’authentification ou le CRUD soient déjà nativement fournies par Kuzzle nous a fait gagner un temps  de développement précieux.

Restait à gérer la partie concernant les logs destinés aux traitements statistiques. 

Nous nous sommes pour cela appuyés sur la capacité de Varnish à produire des logs personnalisés.

En incluant les métriques désirées aux réponses du plugin de redirection, les logs contenaient toutes les informations nécessaires. Il nous a ensuite suffit de les injecter dans une stack ELK pour en permettre l’exploitation.

Une solution flexible pour aller plus loin

L’application de traitement des redirections a pu être livrée dans les temps, sans qu’aucun des points demandés ne soit sacrifié.

Elle tourne en production sans problème depuis plus de deux ans maintenant.

Kuzzle a été une clé importante de la réussite de ce projet. En fournissant les briques essentielles, nous avons pu nous concentrer sur le métier uniquement.

La performance de ses composants a permis de rendre le traitement transparent pour l’utilisateur. 

Enfin, grâce à la flexibilité de la solution, nous avons pu l’intégrer à un composant existant de la plateforme et améliorer encore les performances tout en fournissant une réponse au besoin de traitement statistique.

Benoît Vidis

Expert DevOps

Spécialisé dans le développement backend et le DevOps, j'adore construire des architectures logicielles et expérimenter de nouvelles technologies.

Commentaires

Ajouter un commentaire

Votre commentaire sera modéré par nos administrateurs

Vous avez un projet ? Nos équipes répondent à vos questions

Contactez-nous