Projektuję aplikację przy użyciu Mikro-usług i nie jestem pewien, jaki jest najlepszy mechanizm gromadzenia danych z wielu usług.
Wierzę, że są dwie opcje:
- Zintegruj mechanizm komunikacji „między usługami”, który umożliwia usługom bezpośrednią rozmowę. Interfejs API Gateway wywoływałby pojedynczą usługę, która następnie wywołuje inne usługi w celu gromadzenia danych, zanim zwróci skonsolidowaną odpowiedź do interfejsu API Gateway. Interfejs API zwraca odpowiedź do osoby dzwoniącej. (Musiałyby to być połączenia synchroniczne, gdy połączenie z usługą B wymaga odpowiedzi od usługi A. IE Oddziel osobę i usługi adresowe.)
- Niech brama API wywołuje bezpośrednio każdą usługę i konsoliduje dane w interfejsie API przed zwróceniem odpowiedzi.
Opieram się na drugiej opcji, ponieważ rozmowa między usługami wprowadziłaby sprzężenie, w którym to przypadku równie dobrze mogłabym po prostu zaprojektować aplikację monolityczną. Istnieje jednak kilka poważnych wad, które mogę oderwać od głowy z tą opcją:
Posiadanie przez API wykonywania wielu wywołań do wielu usług zwiększa obciążenie serwera API, szczególnie gdy niektóre z tych połączeń są blokowane.
Ta metoda oznaczałaby, że interfejs API musiałby być „świadomy” tego, co aplikacja próbuje zrobić (IE Logic musiałaby zostać zaprogramowana w interfejsie API, aby obsługiwała wywoływanie usług, a następnie konsolidację danych), a nie tylko działają jak głupi „punkt końcowy” dla mikrousług.
Chciałbym wiedzieć, jakie jest standardowe podejście do tego problemu i czy istnieje inna trzecia opcja, której mi brakuje?