Aplikacja mobilna i web wołają 12 mikroserwisów bezpośrednio
Ekran zamówienia w webie i aplikacji mobilnej robi po 8 żądań do różnych mikroserwisów, część jedno po drugim. Na słabym internecie ładuje się 6 sekund. Backend nie chce zmieniać mikroserwisów pod potrzeby ekranów.
Zanim rozwiniesz: powiedz na głos, jak byś to rozwiązał, i nazwij co najmniej jeden kompromis.
Moje rozwiązanie
Zapisuje się samo w tej przeglądarce. Kopię zrobisz na stronie Notatki.
Pokaż, czego szuka rekruter, i modelową odpowiedź
Co sprawdza rekruter
- Czy znasz wzorzec BFF i umiesz porównać go z GraphQL gateway
- Czy liczysz koszt utrzymania i własność
- Czy myślisz o bezpieczeństwie i cache
Odpowiedź seniora
Proponuję Backend for Frontend: cienką usługę (Node.js, często w rękach zespołu frontendowego), która dla ekranu zamówienia równolegle woła potrzebne mikroserwisy w sieci wewnętrznej i zwraca jedną odpowiedź dopasowaną do widoku. Klient robi jedno żądanie, waterfall znika, a dane wrażliwe i wewnętrzne adresy nie wychodzą do przeglądarki. Osobny BFF dla web i mobile, jeśli ich potrzeby się różnią.
Alternatywa to GraphQL gateway z federacją, który daje elastyczność wielu klientom, ale wymaga więcej inwestycji (schemat, ochrona przed drogimi zapytaniami, cache). Przy jednym-dwóch klientach i stabilnych ekranach BFF jest prostszy.
Koszty: kolejna usługa, więc on-call, monitoring (tracing z OpenTelemetry przez wszystkie wywołania), timeouty i częściowe odpowiedzi, gdy jeden mikroserwis nie działa. Mierzę czas ładowania ekranu przed i po.
Typowe wpadki
- BFF jako miejsce na logikę biznesową, która powinna być w domenie
- Jeden BFF dla wszystkich klientów, który rośnie w nowy monolit
- Brak obsługi częściowej awarii
Dopytają o
- Co zwróci BFF, gdy serwis rekomendacji nie odpowiada?
- Jak wersjonujesz BFF względem aplikacji mobilnej w sklepie?
- Kto jest właścicielem i kto ma dyżury?