web-dev-qa-db-fra.com

Comment gérez-vous les concepts partagés dans une architecture de microservices?

Je recherche des modèles architecturaux pour une application que je développe et une approche microservice semble être un bon choix mais je ne sais pas comment gérer les interactions entre les services.

L'application traite principalement les utilisateurs, les profils appartenant aux utilisateurs, les photos et les balises qui représentent un à plusieurs profils dans une photo. Il y aurait peut-être des méthodes pour renvoyer des photos téléchargées par un utilisateur, retourner des photos qui contiennent un certain profil balisé, etc.

C'est ma première tentative de conception d'une architecture basée sur les microservices et je viens d'une histoire d'inspiration monolithique modèle de domaine . Dans ce monde, les contrôleurs assembleraient ces objets de domaine ensemble, mais j'ai du mal à comprendre comment cela fonctionnerait de manière microservice.

40
anjunatl

Habituellement, les services appellent d'autres services lorsqu'ils ont besoin d'accéder à leurs données. Chaque donnée doit appartenir à un service particulier qui sera le seul point d'entrée pour accéder à ces données et les modifier. Certains services seront simples et correspondent généralement étroitement à votre modèle de domaine (par exemple, un service de gestion des utilisateurs) tandis que d'autres seront de haut niveau et utiliseront des données d'autres services (par exemple, l'affichage d'une liste de photos avec des informations sur les utilisateurs qui les ont téléchargés). ).

Dans votre cas d'utilisation, vous devez commencer par l'extérieur et penser aux opérations que vous souhaitez mettre à la disposition de votre utilisateur via une API (s'il s'agit d'un service backend) ou quelles opérations devraient être disponibles dans l'interface graphique s'il s'agit d'une application Web. Notez que la partie GUI est souvent une application standard avec ses propres contrôleurs: les opérations peuvent être appelées via REST (comme dans AngularJS), mais ces points de terminaison sont conçus uniquement pour l'utilisation de l'application GUI et ne sont pas microservices au sens commun.

Supposons que vous souhaitiez afficher des photos avec des informations sur les téléverseurs. Vous pouvez avoir un service utilisateur qui renvoie des informations sur un utilisateur en fonction de son identifiant et un service photo qui peut répertorier des photos (par exemple en recherchant selon certains critères). La liste des photos contiendrait pour chaque photo l'ID de l'utilisateur qui télécharge. De cette façon, ces deux services ne sont pas couplés - le service photo ne connaît que les ID utilisateur mais rien sur les données utilisateur elles-mêmes. En plus de ces deux services, vous pouvez créer un troisième service avec une opération telle que "lister les photos avec des informations sur les uploaders" qui appellera les deux autres services et combinera les données qu'ils renvoient. Alternativement, cette opération peut être effectuée par votre application Web au lieu d'un service.

34
Michał Kosmulski

L'application traite principalement les utilisateurs, les profils appartenant aux utilisateurs, les photos et les balises qui représentent un à plusieurs profils dans une photo. Il y aurait peut-être des méthodes pour renvoyer des photos téléchargées par un utilisateur, retourner des photos qui contiennent un certain profil balisé, etc.

Eh bien, le service de profil ne doit pas fonctionner avec l'objet utilisateur. Il peut ne connaître que l'ID de l'utilisateur pour lequel il lui est demandé de renvoyer des données, pas plus. De cette façon, vous n'aurez pas besoin d'interaction entre le service utilisateur et le service de profil.

Si cela ne répond pas à votre question, pourriez-vous clarifier ce point en décrivant la situation exacte à laquelle vous faites face?

4