Planification, automatisation et Monorepo : comment Monzo effectue les migrations de code sur 2 800 microservices
Les produits Monzo sont pris en charge par une vaste plate-forme basée sur des microservices de plus de 2 800 services. La société s’appuie sur une planification et une automatisation lourde pour piloter les migrations de code à grande échelle et exploite le service de configuration pour prendre en charge les avancées progressives et les restaurations rapides en cas de problèmes. Les migrations sont gérées par une équipe centrale plutôt que par des équipes de propriétaires de services afin d’éviter les retards et les incohérences.
Le vaste portefeuille de microservices de Monzo pose des défis uniques lors du déploiement de changements radicaux, tels que la mise à jour des versions de bibliothèque pour plus de cohérence et de fraîcheur. L’entreprise a choisi de centraliser les migrations de code dans la plupart des cas pour accélérer les migrations et améliorer la cohérence entre les services.
L’équipe responsable de l’exécution des migrations a établi des principes pour appliquer les changements à grande échelle, notamment en rendant les migrations transparentes pour les propriétaires de services, en évitant les temps d’arrêt, en déployant progressivement pour réduire le rayon d’explosion et en appliquant la règle des 80/20 pour l’automatisation afin d’éviter une diminution des rendements en cas d’utilisation inhabituelle. cas. La société a fortement standardisé sa pile de développement, en choisissant Go comme langage de programmation et en adoptant le monorepo pour tout son code source.
Utilisation d’un wrapper de bibliothèque pour basculer entre les bibliothèques (Source : Blog d’ingénierie Monzo)
Will Sewellingénieur plateforme chez Monzo, décrit un processus typique de déploiement d’une nouvelle bibliothèque, en utilisant comme exemple la migration d’OpenTracing vers OpenTelemetry. Pour tout changement important, l’équipe de migration présenterait une proposition dans Slack ou lors de la réunion de révision de l’architecture pour sensibiliser et solliciter les commentaires de l’organisation d’ingénierie avant de commencer le travail.
L’équipe utilise une combinaison de mises à jour automatiques du code à l’aide d’outils de remplacement de code spécifiques à la langue et de mises à jour manuelles pour tout cas d’utilisation inhabituel. Pour basculer entre les bibliothèques externes, l’équipe s’assure que le wrapper est d’abord déployé sur tous les services. Ensuite, il utilise un service de configuration pour changer progressivement d’implémentation pour un ensemble particulier d’utilisateurs ou un pourcentage de requêtes.
InfoQ a contacté Sewell pour en savoir plus sur la plateforme de microservices de Monzo, compte tenu de sa taille et de la nature du secteur bancaire.
InfoQ : Vous avez mentionné que Monzo utilise un monorepo pour héberger sa base de code. Compte tenu du grand nombre de services, comment avez-vous modifié vos processus et outils CI/CD pour prendre en charge cette approche ?
Will Sewell: [your answer here]
InfoQ : Quels conseils donneriez-vous aux entreprises confrontées à la prolifération des microservices ? Quelles pratiques, techniques ou outils devraient être leurs premières priorités pour améliorer la création et la gestion de leur plateforme de microservices ?
Will Sewell: [your answer here]
InfoQ : Travaillez-vous ou envisagez-vous de travailler sur des améliorations de l’approche de migration de code ?
Will Sewell: [your answer here]