1
votes

Conception de microservices de commerce électronique

Je conçois un e-commerce en utilisant une architecture de micro-services. Supposons que j'ai deux contextes: un catalogue de produits, un inventaire et une tarification. Il me semble clair qu'ils ont une responsabilité claire. Mais pour servir la vitrine (la liste des produits), je dois faire une demande pour le catalogue de produits, obtenir une liste d'identifiants, puis l'utiliser pour interroger les micro-services d'inventaire pour vérifier l'état de l'inventaire (en stock ou en rupture de stock). En plus de cela, je dois faire une demande à Pricing pour obtenir le prix de chaque produit.

Donc, fondamentalement, servir une fonctionnalité fondamentale me fait exécuter trois requêtes (comme une jointure) dans trois micro services. J'ai lu sur l'architecture des micro-services et lorsque vous avez affaire à de nombreuses «jointures», il est possible que ces contextes soient un seul. Mais, OMI, il me semble clair que chaque contexte a un ensemble de responsabilités différent.

L'autre option est de créer un micro service «recherche» qui agrège toutes ces informations (produit + prix + inventaire). Nous pouvons utiliser un événement de domaine pour notifier à la microseconde "recherche" que quelque chose a changé. Ainsi, nous pouvons résoudre le cas d'exposition avec une seule demande. Cela ressemble à un CQRS.

La question est ...

Y a-t-il une approche correcte?

Lequel est le meilleur? Des compromis?


1 commentaires

Cela répondra probablement à votre question plus en détail: stackoverflow.com/a/54676222/1235935


4 Réponses :


0
votes

Mise à jour du 14 février 2019

Cela répondra probablement à votre question plus en détail https://stackoverflow.com/a/54676222/1235935 < / p>


Je pense que la bonne approche ici est d'utiliser Event Sourcing pour pré-agréger les données de la vitrine avec la description du produit, l'inventaire et le prix. Un microservice séparé n'est probablement pas nécessaire. Ces données pré-agrégées (ou vue matérialisée) peuvent être stockées dans le même microservice qui gère la demande de l'utilisateur pour afficher les produits (probablement le service de création de commande).

Les événements peuvent être générés par la capture de données de changement (CDC) basée sur les journaux à partir de la base de données du produit, des services d'inventaire et de tarification et en les écrivant dans leurs rubriques respectives dans une plate-forme de streaming structurée par journaux (par exemple, Kafka ou AWS Kinesis) comme mentionné ici . Cela garantira également des garanties "Lisez votre propre écriture" dans les produits, l'inventaire et les services de tarification


0 commentaires

0
votes

vous pouvez essayer d'inclure des informations provenant de différents contextes de domaine dans d'autres contextes de domaine

Le domaine de votre catalogue de produits contiendra donc # d'articles, le prix de l'inventaire et les domaines de tarification.

Ce sera en lecture seule (objets de valeur) et devrait être mis à jour par les événements des domaines d'inventaire et de tarification.

Dans votre cas d'utilisation, la source fiable de vérité sera transportée dans le domaine de l'inventaire. Par conséquent, en cas d'échec de synchronisation, l'inventaire rejettera toute commande en raison de sa disponibilité.


0 commentaires

0
votes

Dans votre cas, je pense qu'il est préférable de créer un microservice de recherche distinct pour agréger les données de chacun d'entre eux, car la recherche provient généralement de plusieurs domaines tels que le produit, l'inventaire et ....

et vous pouvez utiliser les événements d'un autre microservice (Event Sorucing) pour remplir les données de la recherche.


0 commentaires

0
votes

Il semble que vous ayez besoin d'afficher dans une vue des informations provenant de différents microservices (contextes).

Vous pouvez utiliser la technique de composition ViewModel, où un composant d'infrastructure (un gestionnaire de requêtes) intercepte la requête http et permet aux microservices de participer à la réponse, à la recherche d'un microservice qui dit "hé, j'ai cette information" (l'inventaire a le informations sur le stock, prix sur le prix, etc.). Ce composant d'infrastructure compose un modèle de vue dynamique à la volée, avec les informations provenant de différents microservices.

Je ne l'ai jamais implémenté, mais regardez cette vidéo qui l'explique, de 17h35 à 21h00

https://www.youtube.com/watch?v=KkzvQSuYd5I

J'espère que cela aide.


0 commentaires