Ainda estou tentando entender a arquitetura de microsserviços, já que estou acostumada a uma abordagem monolítica
Suponha que tentemos criar um sistema de reservas Uber extremamente simplificado . Para simplificar as coisas que nós vamos dizer que temos 3 serviços e um gateway de API para o cliente: Booking
, Drivers
, Notification
e nós temos o seguinte fluxo de trabalho:
Ao criar uma nova reserva:
- Verifique se o usuário existente já tem uma reserva
- Obter lista de drivers disponíveis
- Enviar notificação aos motoristas para retirar a reserva
- Motorista pega a reserva
Digamos que todas as mensagens sejam feitas por meio de uma chamada http em vez de um barramento de mensagens como o kafka para simplificar as coisas.
Portanto, nesse caso, achei que o Booking
serviço pode fazer a verificação da reserva existente. Mas quem deve estar recebendo a lista de drivers e notificações disponíveis? Estou pensando em fazê-lo no nível do gateway, mas agora a lógica está dividida em dois lugares:
Gateway
- obtenha lista de drivers disponíveis + envie notificaçõesBooking
- verifique a reserva existente
E tenho certeza de que o gateway não é o lugar certo para fazê-lo, mas sinto que, se estamos fazendo isso no Booking
serviço, está se tornando fortemente associado?
Para torná-lo mais complicado, o que acontece se tivermos outro projeto que deseja reutilizar o sistema de reservas, mas com sua própria lógica de negócios? Foi por isso que pensei em fazê-lo no nível do gateway, para que o novo gateway do projeto possa ter sua própria lógica de negócios separada da existente.
Outra maneira de fazer isso, suponho, é que cada projeto tenha seu próprio serviço de reservas, que conversará com o serviço principal de reservas, mas não tenho certeza de qual é a melhor abordagem aqui :-)