Architecture de graphes fédérés de Netflix : comment est-elle consultable ?

En 2020, Netflix a annoncé son API Studio et sa fédération GraphQL pour surmonter la complexité du développement de la couche d’agression de l’API. Netflix a expliqué que le double objectif de GraphQL Federation est de fournir une API unifiée aux consommateurs et de fournir une flexibilité et une isolation des services aux développeurs backend.

Essentiellement, l’architecture d’un GraphQL consiste à fournir une couche de passerelle qui rassemble divers services fédérés dans un point de terminaison d’API unifié. En outre, il permet aux équipes de créer et d’exploiter leurs services de graphes de domaine de manière indépendante tout en connectant les domaines sous un schéma GraphQL unifié. Pour cette raison, l’ingénierie de contenu chez Netflix a fait la transition de plusieurs services pour utiliser une plate-forme fédérée GraphQL.

Le problème

Netflix a expliqué les trois unités principales du graphique comme film, production et talent. Des équipes d’ingénierie distinctes possèdent indépendamment ces éléments :

  • Movie : chaque titre dans les données est un objet Movie.
  • Production : Chaque film est confié à un studio de production. L’objet de production suit les facteurs essentiels à la réalisation d’un film, tels que : B. Emplacement, fournisseur et plus.
  • Talent : Ce sont les personnes qui travaillent sur le film, comme les acteurs, les réalisateurs, etc.

Ces entités sont rendues disponibles dans le diagramme. Ensuite, les équipes doivent pouvoir interroger une entité spécifique en fonction des attributs d’entités associées. Par exemple, vous souhaiterez peut-être rechercher tous les films actuellement en production avec l’acteur Ryan Reynolds. C’est le problème de rendre un graphe fédéré consultable. Comme solution, Netflix a développé Studio Search.

Recherche de studio Netflix

La plate-forme Studio Search fait partie du diagramme de combinaison et le rend consultable. La partie est un sous-graphe enraciné dans une entité d’intérêt qui serait interrogée, filtrée, ordonnée et facettée avec une entrée de texte. Cela a été réalisé avec Elasticsearch comme technologie sous-jacente.

L’équipe a pris en compte trois facteurs clés dans la construction de son pipeline d’indices.

  1. La définition du sous-graphe d’intérêt est la recherche primaire
  2. Événements qui informent la plate-forme des modifications apportées aux entités dans le sous-diagramme
  3. Configuration spécifique à l’index

« En bref, notre solution consistait à créer un index pour les sous-graphes d’intérêt. Cet indice doit être mis à jour en temps quasi réel avec les données fournies par les différents services du graphique fédéré », a déclaré l’équipe d’ingénierie de Netflix. GraphQL rend cela possible en fournissant un moyen simple de définir le sous-graphe via une seule requête GraphQL basée sur un modèle. La requête récupère toutes les données qui intéressent l’utilisateur à l’aide de ses recherches.

Architecture

Les événements de modification de la capture de données déclenchent le processus de réindexation des entités individuelles à mesure qu’elles changent pour s’assurer que l’index est à jour. Les équipes Netflix utilisent les connecteurs Netflix CDC. Par conséquent, le graphe fédéré récupèrerait toutes les données indexées et ferait des facteurs nécessaires dans les événements un identifiant d’entité. Lorsque cet ID est inséré dans le modèle de requête GraphQL, il récupère l’entité et les données associées. La recherche élastique, la technologie sous-jacente, est utilisée pour créer des analyseurs de texte qui peuvent être généralisés à tous les domaines. Les informations de type du modèle de requête GraphQL et de la configuration d’index personnalisée sont utilisées.

Enfin, un pipeline de maillage de données est créé sur la base de ces entrées. Un concept plus récent, le maillage de données, est une architecture décentralisée qui marque un changement organisationnel dans la façon dont les entreprises gèrent le Big Data. Il résout les défis du manque de propriété des données et du manque de données de qualité, supprimant les goulots d’étranglement pour encourager la mise à l’échelle de l’organisation. Data Mesh traite les données comme un produit. Chaque source a un propriétaire de produit de données qui, idéalement, pourrait faire partie de l’équipe interfonctionnelle d’ingénieurs de données. Chez Netflix, le maillage se compose de la source d’événements CDC fournie par l’utilisateur, d’un processeur pour enrichir ces événements à l’aide de la requête GraphQL fournie par l’utilisateur et d’un récepteur pour Elasticsearch.

Source de l’image : Netflix

Les applications Studio de Netflix génèrent des événements vers des flux Kafka schématisés dans Data Mesh dans le processus d’architecture. Cela se produit de deux manières. Tout d’abord, le traitement s’effectue via des transactions avec une base de données surveillée par un connecteur CDC qui crée des événements. Alternativement, il crée des événements directement avec un client de maillage de données. Ces événements schématiques sont traités par des processeurs de maillage de données implémentés dans Apache Cadre Flink. Un processeur d’union est utilisé pour combiner les données de plusieurs flux Kafka lorsque les entités ont plusieurs événements. Ensuite, un processeur GraphQL exécute la requête GraphQL fournie par l’utilisateur pour récupérer les documents de la passerelle fédérée. La passerelle fédérée, à son tour, extrait les données des applications Studio. Enfin, les informations extraites de la passerelle sont placées sur un autre sujet Kafka schématisé. Il est ensuite traité par un récepteur Elasticsearch dans le maillage de données et indexé dans l’index Elasticsearch – configuré avec un modèle d’indexation personnalisé pour les champs et les types présents dans le document.

recherches inversées

Les films changent constamment, que ce soit en termes de production ou de détails sur les talents. La fonctionnalité de recherche inversée est une solution pour mettre à jour le modèle lorsqu’une modification est apportée à une entité associée. Le modèle recherche toutes les entités principales susceptibles d’être affectées par la modification pour refléter les modifications. Il déclenche ensuite des événements pour les entités. Le modèle le fait en consultant l’index et en interrogeant toutes les entités principales qui peuvent être liées. Le pipeline observe également un changement de production, “avec ptpId “abc” ; Nous pouvons interroger l’index pour tous les documents avec production.ptpId == “abc” et extraire le movieId”, a expliqué l’équipe. Plus tard, le movieId est propagé au reste du pipeline d’indexation. L’équipe a également trouvé cette fonctionnalité pratique mais pas conviviale.

Leave a Comment