Services de paiement à Bazel Monorepo

Black Friday Promotion


Comment réussir la migration d'un microservice critique vers monorepo

Par Shalini Oruganti

TL; DR: Bazel monorepo est une initiative d'ingénierie chez Coinbase. Our Payments est l'une des premières équipes à migrer vers monorepo un service Ruby on Rails critique pour un important chemin de fer de paiement UE / Royaume-Uni. Après avoir résolu divers défis, nous avons réussi à migrer notre service.

Antécédents

La mission de l'équipe Coinbase Payments est de permettre aux clients de transférer de l'argent dans et hors de la crypto-économie avec une expérience agréable. Lorsque nous concevons des systèmes de paiement, nous prenons en compte plusieurs facteurs, y compris, mais sans s'y limiter, l'évolutivité, la sécurité et les processeurs de paiement de secours.

Nous disposons actuellement de plusieurs microservices qui s'intègrent à nos partenaires de paiement. Le code de ces services se trouve dans de nombreux petits référentiels. À mesure que Coinbase se développe géographiquement, nous prenons en charge plus de méthodes de paiement, ce qui peut souvent signifier plus de microservices. Cependant, la plupart de nos microservices suivent des modèles de conception établis, ce qui entraîne une réplication de code fréquente.

Nous réfléchissons continuellement à des moyens d'améliorer nos systèmes et nos outils en gardant à l'esprit les objectifs de haut niveau suivants:

  • Réduisez le coût des modifications apportées aux projets de paiement.
  • Assurez-vous que les services payants reçoivent immédiatement les mises à jour et les correctifs de sécurité.
  • Augmentez la réutilisation du code dans les services de paiement.
  • Alignez-vous sur les initiatives de l'ingénierie.

Plus tôt cette année, Coinbase Engineering a décidé d'utiliser un monorepe Bazel. L'équipe des paiements a décidé de tirer parti des fonctionnalités et des outils de sécurité, de fiabilité de classe mondiale que notre équipe de productivité des développeurs a mis au point pour le monorepe de Bazel en migrant nos microservices. Notre première initiative a été de migrer un service Ruby on Rails critique pour un important chemin de fer de paiement UE / Royaume-Uni qui traite environ 2 millions de paiements d'une valeur de 3,5 milliards de dollars par an en monorepo.

Défis

Cependant, la migration d'un système de paiement déjà mis en place vers monorepo doit prendre en compte une variété de défis tels que:

  • Traitez déjà les paiements en temps réel.
  • Respectez les SLO et les SLA prédéfinis.
  • De nouvelles fonctionnalités et corrections de bogues sont ajoutées et implémentées.
  • Intégrations avec des services tiers sur lesquels nous n'avons aucun contrôle.

Pour surmonter ces défis, nous commençons par définir une migration réussie. Les critères suivants ont été définis:

  • Notre projet doit fonctionner avec les nouveaux outils monorepo: Notre service est une application Ruby on Rails et nous utilisons des outils Rails standard pour notre SDLC. Cependant, au sein de Monorepo, nous utilisons Bazel pour construire et tester. Par conséquent, bon nombre de nos configurations ont dû être modifiées pour être compatibles avec les nouveaux outils.
  • Notre projet CI doit fonctionner depuis monorepo: Le nombre d'étapes que nous avons dans nos projets CI a augmenté dans monorepo. Nous devions passer du temps à comprendre quelles étaient ces étapes. Monorepo a également utilisé un autre système IC. Notre projet de migration consistait à apporter des modifications pour s'adapter avec succès au nouveau système CI et à ajouter la configuration et le code pour passer ces étapes supplémentaires au service migré.
  • Nos implémentations de service devraient fonctionner à partir de monorepo: Monorepo utilise un outil de déploiement différent, nous devions donc nous assurer que notre projet puisse être déployé avec succès dans des environnements de développement, de test et de production à l'aide des nouveaux outils.
  • Notre service se connecte aux mêmes ressources AWS qu'auparavant: En fonction du réseau de paiement qui transfère l'argent d'un payeur vers un bénéficiaire, les paiements passent par différents états. Certains de ces états sont des états intermédiaires et nous ne pouvons pas nous permettre de perdre ces informations avant qu'un paiement n'atteigne son état terminal. Nous ne pouvions pas non plus nous permettre de planifier une migration de données dans le cadre de ce projet. Par conséquent, il est devenu vital que nous disposions des outils appropriés pour implémenter notre service depuis monorepo, qui peut se connecter au même cache et aux mêmes bases de données.

Après avoir identifié ces exigences critiques, nous avons également conservé un historique des commit git dans les deux référentiels en tant que norme personnelle élevée. Il nous a fallu environ six semaines pour mettre en place les nouveaux outils, rendre notre projet compatible avec ces outils et migrer toute la logique métier.

L'étape suivante consistait à préparer le déploiement et à arrêter tous les commits dans notre ancien référentiel. Ensuite, nous déployons le service en développement et testons le flux de paiement de bout en bout. Une fois l'équipe satisfaite et convaincue qu'il y a une parité à 100% dans les outils et les fonctionnalités, nous avons procédé à la mise en œuvre du service en production. Pour faciliter l'intégration dans l'utilisation de nouveaux outils, nous formons également de nouveaux ingénieurs pour travailler dans ce service.

conclusion

Nous avons réussi à migrer notre premier microservice de paiement vers monorepo, et aujourd'hui, il traite avec succès le même volume de paiements qu'auparavant sans erreur.

À l'avenir, nous prévoyons de migrer davantage de nos services vers monorepo pour résoudre nos défis liés à la gestion des dépendances et à la réutilisation du code. Nous travaillons également en étroite collaboration avec notre équipe d'infrastructure pour combler les lacunes et ajouter de nouvelles fonctionnalités avant de migrer davantage de services Ruby. Suivez-nous pour plus d'articles sur les composants approfondis de notre monorepo dans les mois à venir.

Si vous souhaitez résoudre des défis techniques complexes comme celui-ci, Coinbase recrute.

Ce site Web contient des liens vers des sites Web tiers ou d'autres contenus à des fins d'information uniquement («Sites tiers»). Les sites tiers ne sont pas sous le contrôle de Coinbase, Inc. et de ses affiliés («Coinbase»), et Coinbase n'est pas responsable du contenu de tout site tiers, y compris, mais sans s'y limiter, les liens contenus dans un tiers. Site tiers, ou tout changement ou mise à jour d'un site tiers. Coinbase n'est pas responsable de la transmission Internet ou de toute autre forme de transmission reçue d'un site tiers. Ces liens vous sont fournis par Coinbase uniquement à titre de commodité, et l'inclusion de tout lien n'implique pas l'approbation, l'approbation ou la recommandation par Coinbase du site ou de l'association avec ses opérateurs.


Les services de paiement sur Bazel monorepo ont été initialement publiés sur le blog Coinbase sur Medium, où les gens poursuivent la conversation en mettant en évidence et en répondant à cette histoire.

Black Friday Promotion

Cours Crypto
Logo
Enable registration in settings - general