Sto ancora cercando di avvolgere la mia testa attorno all'architettura dei microservizi da quando sono abituato a un approccio monolitico
Supponiamo di provare a costruire un sistema di prenotazione Uber estremamente semplificato . Per semplificare le cose che diciamo che abbiamo 3 servizi e un gateway API per il cliente: Booking
, Drivers
, Notification
e noi abbiamo il seguente flusso di lavoro:
Quando si crea una nuova prenotazione:
- Controlla se l'utente esistente ha già una prenotazione
- Ottieni l'elenco dei driver disponibili
- Invia una notifica ai conducenti per ritirare la prenotazione
- L'autista ritira la prenotazione
Diciamo che tutta la messaggistica viene effettuata tramite una chiamata http anziché un bus di messaggistica come kafka per semplificare le cose.
Quindi, in questo caso, ho pensato che il Booking
servizio potesse fare il controllo per la prenotazione esistente. Ma allora chi dovrebbe ottenere l'elenco dei driver disponibili e le notifiche? Sto pensando di farlo a livello di gateway, ma ora la logica è in qualche modo divisa in due parti:
Gateway
- Ottieni l'elenco dei driver disponibili + invia notificheBooking
- verifica la prenotazione esistente
E sono abbastanza sicuro che il gateway non sia il posto giusto per farlo, ma mi sento come se lo stiamo facendo nel Booking
servizio, sta diventando strettamente accoppiato?
Per renderlo più complicato, cosa succede se abbiamo un altro progetto che vuole riutilizzare il sistema di prenotazione ma con la sua stessa logica aziendale? Ecco perché ho pensato di farlo a livello di gateway in modo che il nuovo gateway di progetto possa avere una propria logica aziendale separata da quella esistente.
Un altro modo di farlo suppongo sia che ogni progetto abbia un proprio servizio di prenotazione che parlerà con il servizio di prenotazione principale, ma non sono sicuro quale sia l'approccio migliore qui :-)