Wciąż próbuję owinąć głowę architekturą mikrousług, ponieważ jestem przyzwyczajony do monolitycznego podejścia
Załóżmy, że staramy się zbudować niezwykle uproszczony system rezerwacji Uber. Aby uprościć my powiedzmy mamy 3 obsługę oraz API bramy dla klienta: Booking
, Drivers
, Notification
i mamy następujący obieg:
Podczas tworzenia nowej rezerwacji:
- Sprawdź, czy istniejący użytkownik ma już rezerwację
- Uzyskaj listę dostępnych sterowników
- Wyślij powiadomienie do kierowców, aby odebrać rezerwację
- Kierowca odbiera rezerwację
Powiedzmy, że wszystkie wysyłanie wiadomości odbywa się za pośrednictwem połączenia http, a nie przez komunikator typu kafka, aby wszystko było proste.
W tym przypadku pomyślałem, że Booking
usługa może sprawdzić istniejącą rezerwację. Ale kto powinien otrzymywać listę dostępnych sterowników i powiadomień? Myślę o zrobieniu tego na poziomie bramy, ale teraz logika jest jakby podzielona na dwa miejsca:
Gateway
- pobierz listę dostępnych sterowników + wyślij powiadomieniaBooking
- sprawdź istniejącą rezerwację
I jestem prawie pewien, że brama nie jest właściwym miejscem, aby to zrobić, ale czuję, że jeśli robimy to w Booking
serwisie, staje się ściśle powiązana?
Aby to skomplikować, co się stanie, jeśli mamy inny projekt, który chce ponownie wykorzystać system rezerwacji, ale z własną logiką biznesową? Właśnie dlatego pomyślałem o zrobieniu tego na poziomie bramy, aby nowa brama projektu mogła mieć własną logikę biznesową oddzielną od istniejącej.
Innym sposobem, jak sądzę, jest to, aby każdy projekt miał własną usługę rezerwacji, która będzie rozmawiać z podstawową usługą rezerwacji, ale nie jestem pewien, jakie jest najlepsze podejście tutaj :-)