Je suis en train de créer un projet avec une architecture microservices. Et j'ai créé deux microservices.
L'un d'eux concerne l'entité produit, l'autre l'entité facture. Ils ont leurs propres points de terminaison et ils sont connectés ensemble avec la passerelle (j'utilise l'architecture microservices de Jhipster).
Le bill-ms doit accéder à la liste des produits. Je me demande comment je peux communiquer entre ces deux ms. J'ai trois approches en tête :
-
Envoyer une requête depuis bill-ms vers une file d'attente - comme rabbitMQ, pour obtenir ces produits avec ces identifiants depuis product-ms (je ne sais pas quel est le goulot d'étranglement de cette opération).
-
Envoyer une requête à la passerelle pour le service de produit et obtenir le produit à partir de là (je suis inquiet de la latence en raison de la taille des données entre eux et de cette façon, je ne touche pas la base de données directement, donc je dépend toujours de la passerelle).
-
Je peux dupliquer les référentiels, les services et les entités dans bill-ms (c'est une façon horrible, et je pense qu'elle brise la règle de l'architecture ms et la maintenance est très difficile).
Si vous avez d'autres approches, j'apprécierais que vous les partagiez avec moi.
Modifier
- Maintenant je sais quel est le goulot d'étranglement : disons qu'il y a 3 instances de bill-ms et comment rabbitMQ décide quelle instance répondre ? ou comment dois-je dire à ribbon " donnez-moi l'instance gratuite de bill-ms pour souscrire à la requête de rabbitMQ " pour l'équilibrage des charges.
2 votes
Vous pourriez également reconsidérer les limites de vos services, peut-être que vos services ont un grain trop fin. De même, la duplication n'est pas forcément une mauvaise chose, si vous considérez que vos produits peuvent disparaître ou être modifiés dans leur base de données alors que dans le projet de loi, vous voulez qu'ils restent inchangés pendant longtemps, dans ce cas, je ne considérerais pas cela comme une duplication mais seulement comme le stockage de l'information immuable sur le produit dont votre projet de loi a besoin.
0 votes
"J'utilise l'architecture microservices de Jhipster" JHipster est juste une bibliothèque qui n'a pas sa propre architecture
4 votes
Jhipster n'est pas une bibliothèque, c'est un générateur d'applications qui met en œuvre une architecture de microservices au-dessus de Spring Cloud Netflix.
0 votes
La grande question qui se pose est donc la suivante : pourquoi vouloir adopter la voie des microservices alors que le problème est de rendre les données disponibles les unes pour les autres ? Je vous suggère plutôt de commencer par un monolithe correctement modularisé. Ne faites jamais l'option 3 car alors vous n'avez pas besoin de microservices du tout. Et n'ayez pas peur de l'option 2, le monde de Spring Netflix a une tonne de solutions aux problèmes à venir (eureka, feign, ribbon, hystrix, ...).
0 votes
L'utilisation d'un client de découverte équilibré (par Ribbon) pour récupérer une instance de produit-service ou l'option 3 mentionnée ci-dessus semblent être les meilleures options. La duplication des données ne pose aucun problème tant qu'un seul service (propriétaire) les modifie et que les autres services en conservent une copie immuable. Rabbit MQ peut être utilisé pour garder les données dupliquées en synchronisation.