- Pobierz link
- X
- Inne aplikacje
- Pobierz link
- X
- Inne aplikacje
W architekturze mikroserwisów każdy system to zbiór wielu mniejszych komponentów, które komunikują się między sobą najczęściej za pomocą żądań HTTP, wiadomości z kolejek lub gRPC. To świetnie wspiera skalowalność i elastyczność… dopóki coś nie przestanie działać.
- Gdzie utknęło żądanie?
- Który mikroserwis zawiódł?
- Jak długo trwało przetwarzanie w każdym kroku?
Distributed Tracing to wzorzec, który pozwala śledzić żądania przez cały łańcuch mikroserwisów, a standard B3 umożliwia łatwą i jednolitą identyfikację każdego kroku tej podróży.
Na czym polega Distributed Tracing?
Distributed Tracing (śledzenie rozproszone) to mechanizm, który rejestruje ścieżkę żądania przez wiele usług. Każde żądanie otrzymuje unikalny identyfikator, który jest przekazywany między usługami — dzięki temu możemy odtworzyć całą trasę żądania i zmierzyć czas trwania każdego kroku.
Wprowadzenie do standardu B3
B3 to lekki, prosty do wdrożenia standard propagowania trace-id w systemach rozproszonych. Wystarczy dodać kilka nagłówków HTTP, by rozpocząć śledzenie żądań.
Kluczowe nagłówki B3:
Nagłówek | Opis |
---|---|
X-B3-TraceId | Unikalny identyfikator całego śledzenia (trace) |
X-B3-SpanId | Identyfikator konkretnego kroku (span) w ramach trace |
X-B3-ParentSpanId | (opcjonalnie) identyfikator nadrzędnego span |
X-B3-Sampled | Czy trace ma być zarejestrowany (1 = tak) |
X-B3-Flags | Dodatkowa flaga debugowania |
Przykład nagłówków B3 w żądaniu HTTP:
X-B3-TraceId: 4bf92f3577b34da6a3ce929d0e0e4736
X-B3-SpanId: 00f067aa0ba902b7
X-B3-ParentSpanId: b73a56a1d2ee0eb2
X-B3-Sampled: 1
Jak to działa w praktyce?
Schemat przepływu
Wyobraźmy sobie system z trzema mikroserwisami:
Klient → Gateway → Serwis A → Serwis B → Serwis C
Dzięki nagłówkom B3:
-
Klient wysyła żądanie do Gateway z
X-B3-TraceId
. -
Gateway tworzy
X-B3-SpanId
i wysyła je do Serwisu A. -
Serwis A generuje swój
SpanId
, zachowujeParentSpanId
z Gatewaya i przekazuje trace dalej. -
Na końcu, Serwis C kończy trace — a wszystkie kroki są zarejestrowane.
Wizualizacja śladu (trace)
Po zebraniu wszystkich danych (np. za pomocą Jaeger, Zipkin lub Grafana Tempo), możemy zobaczyć wizualnie:
TraceId: 4bf92f3577b34da6a3ce929d0e0e4736
├── Gateway [15 ms]
│ └── Serwis A [30 ms]
│ └── Serwis B [40 ms]
│ └── Serwis C [25 ms]
Implementacja Distributed Tracing z użyciem Spring Boot i Sleuth
<!-- pom.xml -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
# application.yml
spring:
zipkin:
base-url: http://zipkin:9411
sleuth:
sampler:
probability: 1.0
Dzięki Sleuth i Zipkin aplikacja automatycznie:
-
generuje trace-id i span-id,
-
przekazuje nagłówki HTTP,
-
wysyła dane do Zipkina.
Korzyści z wdrożenia Distributed Tracing
✅ Szybsze diagnozowanie problemów
✅ Pomiar czasu odpowiedzi poszczególnych usług
✅ Widoczność zależności między mikroserwisami
✅ Identyfikacja wąskich gardeł
✅ Lepsze wsparcie operacyjne i DevOps
Wnioski i dobre praktyki
- Zawsze przekazuj trace-id i span-id w żądaniach HTTP, gRPC i eventach.
- Testuj czy wszystkie mikroserwisy poprawnie obsługują nagłówki B3.
- Używaj narzędzi jak Zipkin, Jaeger lub Grafana Tempo do analizy trace’ów.
- W systemach rozproszonych bez observability jesteś ślepy.
Podsumowanie
Wzorzec Distributed Tracing to fundament nowoczesnych, obserwowalnych systemów mikroserwisowych. W połączeniu ze standardem B3 umożliwia łatwą propagację identyfikatorów śledzenia między usługami. Dobrze wdrożony trace pozwala nie tylko znaleźć błędy, ale też optymalizować wydajność i rozumieć złożoność architektury.
- Pobierz link
- X
- Inne aplikacje
Komentarze
Prześlij komentarz