w dniu
architecture
enterprise
sap
- 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ć.
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.
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.
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ń.
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 |
X-B3-TraceId: 4bf92f3577b34da6a3ce929d0e0e4736
X-B3-SpanId: 00f067aa0ba902b7
X-B3-ParentSpanId: b73a56a1d2ee0eb2
X-B3-Sampled: 1
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
, zachowuje ParentSpanId
z Gatewaya i przekazuje trace dalej.
Na końcu, Serwis C kończy trace — a wszystkie kroki są zarejestrowane.
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]
<!-- 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.
✅ 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
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.
Komentarze
Prześlij komentarz