Todavía estoy tratando de entender la arquitectura de microservicios ya que estoy acostumbrado a un enfoque monolítico
Supongamos que intentamos construir un sistema de reserva Uber extremadamente simplificado . Para simplificar las cosas que digamos que tienen 3 servicios y un API puerta de entrada para el cliente: Booking
, Drivers
, Notification
y tenemos el siguiente flujo de trabajo:
Al crear una nueva reserva:
- Compruebe si el usuario existente ya tiene una reserva
- Obtenga una lista de los controladores disponibles
- Enviar notificación a los conductores para recoger la reserva
- El conductor recoge la reserva.
Digamos que todos los mensajes se realizan a través de una llamada http en lugar de un bus de mensajes como kafka para simplificar las cosas.
Entonces, en este caso, pensé que el Booking
servicio puede verificar las reservas existentes. Pero entonces, ¿quién debería recibir la lista de controladores y notificaciones disponibles? Estoy pensando en hacerlo a nivel de puerta de enlace, pero ahora la lógica está dividida en dos lugares:
Gateway
- obtener una lista de los controladores disponibles + enviar notificacionesBooking
- verificar reserva existente
Y estoy bastante seguro de que la puerta de enlace no es el lugar adecuado para hacerlo, pero siento que si lo estamos haciendo en el Booking
servicio, ¿está estrechamente acoplado?
Para hacerlo más complicado, ¿qué sucede si tenemos otro proyecto que quiere reutilizar el sistema de reservas pero con su propia lógica de negocios? Es por eso que pensé en hacerlo a nivel de puerta de enlace para que la nueva puerta de enlace del proyecto pueda tener su propia lógica de negocios separada de la existente.
Otra forma de hacerlo, supongo, es que cada proyecto tenga su propio servicio de reserva que hablará con el servicio central de reservas, pero no estoy seguro de cuál es el mejor enfoque aquí :-)