Gestion des dépendances complexes avec une architecture distribuée sur eBay

L’équipe d’ingénieurs d’eBay a récemment expliqué comment un système de publication évolutif a été créé. La solution de publication utilise une architecture distribuée pour publier plus de 3 000 bibliothèques dépendantes en environ deux heures. L’équipe utilise Jenkins pour faire la publication en combinaison avec des scripts Groovy.

Comme nous l’ont appris Randy Shoup (vice-président de l’ingénierie et architecte en chef chez eBay) et Mark Weinberg (vice-président, Core Product Engineering), eBay avait des difficultés systémiques à partager les dépendances clés, ce qui équivalait à des monolithes distribués. À la fin de l’année dernière, eBay a commencé à migrer ses anciennes bibliothèques vers un code source mavenisé. L’équipe d’ingénierie a dû tenir compte des relations de dépendance compliquées entre les bibliothèques avant la publication.

Le principe d’une version de bibliothèque est que toutes ses dépendances doivent déjà avoir été publiées, mais étant donné le grand nombre de bibliothèques candidates et les relations d’interdépendance compliquées, il y aura un impact significatif sur les performances de publication si l’ordre de publication de la bibliothèque n’est pas publié. bien orchestrer.

Comprendre la séquence de publication de la bibliothèque est essentiel pour garantir des performances de publication optimales. La cartographie des relations de dépendance pour un grand nombre de bibliothèques produit un graphique acyclique dirigé (DAG) illustré ci-dessous :

Source – Blog technique d’eBay sur l’ingénierie

Dans le schéma ci-dessus, une bibliothèque est représentée par un nœud (cercle) et les bibliothèques dépendantes sont reliées par des lignes. Lorsque la bibliothèque représentée par le numéro un est publiée, deux, trois et quatre peuvent être publiées en parallèle. Les bibliothèques affichées en bleu sont publiées séparément car elles ne dépendent pas d’autres bibliothèques.

À l’aide du service central, le système de publication distribuée calcule le DAG, puis met en file d’attente tous les nœuds avec la même priorité dans une séquence parallèle pour la publication. De plus, le nœud avec plus de nœuds parents a la première priorité pour la libération. Le service central utilise ensuite le nombre optimal de nœuds Jenkins pour effectuer le partage.

L’équipe d’ingénieurs d’eBay a développé le “mode pull” de Jenkins pour les versions parallèles.

Source – Blog technique d’eBay sur l’ingénierie

Chaque travail Jenkins a un script Groovy. Les nœuds Jenkins utilisent le service central pour récupérer la bibliothèque candidate lorsque le partage est déclenché. Après approbation et rapport des résultats, la bibliothèque candidate suivante est récupérée pour approbation.

L’équipe d’ingénieurs d’eBay a déclaré que l’architecture distribuée ci-dessus ne se limite pas aux tâches liées à la publication. Compte tenu de leur nature générique, voici quelques autres cas applicables pour l’architecture distribuée

  • Exécutez des cas de test d’intégration distribuée et créez des résultats résumés après l’exécution
  • Collecte/analyse simultanée de données à partir de différents canaux pour générer des rapports

Dans le contexte des dépendances avec les microservices, nous avons vu à QCon Plus en novembre 2021 qu’un nombre croissant de dépendances sont gérées entre les microservices étroitement couplés. Ce besoin de publication simultanée est dû au fait que tous les microservices dépendants doivent être testés ensemble dans un lot.

Une conversation intéressante sur Hacker News montre que le fait d’avoir plusieurs référentiels de code source dans un système distribué est également une énorme source de frustration. HN user wreath mentionne que “Synchroniser et attendre le déploiement/la publication (du référentiel) (s’il s’agit d’une bibliothèque) juste pour ajouter une petite fonctionnalité gaspille facilement quelques heures de la journée et, surtout, affaiblit les capacités cognitives par le changement de contexte.

Pour plus de détails sur la nouvelle architecture de publication d’eBay, consultez un article récent du blog d’ingénierie d’eBay : Une architecture distribuée légère pour gérer des milliers de publications de bibliothèque sur eBay

Leave a Comment