BFF w Node dla frontendu
Strona produktu wykonuje z przeglądarki 9 żądań do różnych mikroserwisów: produkt, ceny, dostępność, opinie, rekomendacje. Na telefonach strona ładuje się wolno, a awaria serwisu rekomendacji powoduje biały ekran. Proponujesz Backend for Frontend.
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 wiesz, co BFF powinien robić, a czego nie
- Czy myślisz o odporności: timeouty, fallbacki, circuit breaker
- Czy pamiętasz o cache, obserwowalności i własności zespołu
Odpowiedź seniora
BFF to cienka warstwa w Node (Fastify albo NestJS) należąca do zespołu frontendu, która dla każdego ekranu zwraca dokładnie potrzebne dane jednym żądaniem. Agreguje wywołania równolegle (Promise.allSettled), przycina pola i ukrywa wewnętrzne adresy serwisów i tokeny. Logika biznesowa zostaje w serwisach domenowych.
Odporność: każde wywołanie ma timeout i budżet czasu całego żądania, dane krytyczne (produkt, cena) zwracają błąd, a niekrytyczne (rekomendacje, opinie) fallback albo pustą sekcję z flagą, którą front pokazuje jako „nie udało się załadować”. Przy powtarzających się błędach circuit breaker (np. opossum) przestaje odpytywać chory serwis. Pula połączeń HTTP z keep-alive.
Cache: odpowiedzi rzadko zmienne w pamięci lub Redis z krótkim TTL i stale-while-revalidate, nagłówki cache dla CDN tam, gdzie dane nie są osobiste. Obserwowalność przez OpenTelemetry: trace od przeglądarki przez BFF do serwisów, metryki czasu każdego wywołania. Typy odpowiedzi BFF współdzielone z frontem.
Typowe wpadki
- Przeniesienie logiki biznesowej do BFF
- Sekwencyjne wywołania zamiast równoległych
- Brak timeoutów, przez co jeden wolny serwis zatrzymuje stronę
- BFF bez właściciela i monitoringu
Dopytają o
- Kiedy wybrałbyś GraphQL zamiast BFF z REST?
- Jak wersjonujesz BFF przy aplikacji mobilnej ze starymi wersjami?
- Jak przekazujesz tożsamość użytkownika do serwisów?