J'essaie toujours de comprendre la structure des microservices depuis que je suis habitué à une approche monolithique
Supposons que nous essayions de construire un système de réservation Uber extrêmement simplifié . Pour simplifier les choses , nous disons que nous avons 3 services et une api de passerelle pour le client: Booking
, Drivers
, Notification
et nous avons le flux de travail suivant:
Lors de la création d'une nouvelle réservation:
- Vérifiez si l'utilisateur existant a déjà une réservation
- Obtenir la liste des pilotes disponibles
- Envoyer une notification aux chauffeurs pour récupérer la réservation
- Le chauffeur récupère la réservation
Disons que toute la messagerie se fait via un appel http plutôt qu'un bus de messagerie comme kafka pour garder les choses simples.
Donc, dans ce cas, je pensais que le Booking
service pouvait vérifier la réservation existante. Mais alors, qui devrait recevoir la liste des pilotes disponibles et la notification? Je pense à le faire au niveau de la passerelle, mais maintenant la logique est en quelque sorte divisée en deux endroits:
Gateway
- obtenir la liste des pilotes disponibles + envoyer des notificationsBooking
- vérifier la réservation existante
Et je suis presque sûr que la passerelle n'est pas le bon endroit pour le faire, mais j'ai l'impression que si nous le faisons dans le Booking
service, cela devient étroitement couplé?
Pour compliquer les choses, que se passe-t-il si nous avons un autre projet qui veut réutiliser le système de réservation mais avec sa propre logique métier en plus? C'est pourquoi j'ai pensé à le faire au niveau de la passerelle pour que la nouvelle passerelle de projet puisse avoir sa propre logique métier distincte de celle existante.
Je suppose qu'une autre façon de le faire est que chaque projet ait son propre service de réservation qui communiquera avec le service de réservation principal, mais je ne suis pas sûr de la meilleure approche ici :-)