- Pobierz link
- X
- Inne aplikacje
- Pobierz link
- X
- Inne aplikacje
W architekturze mikroserwisów (MSA) bardzo często mikroserwisy muszą komunikować się z zewnętrznymi usługami lub innymi mikroserwisami. W takich przypadkach kluczowe jest zapewnienie stabilności, bezpieczeństwa i odpowiedniej kontroli nad ruchem wychodzącym.
Jednym z rozwiązań ułatwiających te zadania jest Ambassador Pattern (wzorzec ambasador), który pozwala na odciążenie głównej logiki mikroserwisu i lepsze zarządzanie połączeniami z innymi systemami.
W tym artykule omówię:
- Jak działa wzorzec ambasador?
- Kiedy warto go stosować?
- Przykłady implementacji w Kubernetes i Spring Cloud
Jak działa wzorzec Ambassador?
Ambassador Pattern zakłada, że zamiast bezpośredniego łączenia się z zewnętrznymi usługami, mikroserwis deleguje połączenia do specjalnej warstwy proxy (ambasadora). Proxy obsługuje komunikację, dodając dodatkowe funkcjonalności, takie jak:
✅ Monitoring i logowanie ruchu
✅ Buforowanie żądań
✅ Circuit Breaker dla zwiększenia odporności
✅ Autoryzacja i kontrola dostępu
✅ Obsługa retrysów i time-outów
Z perspektywy mikroserwisu, ambasador działa jak lokalny serwis, a w rzeczywistości przekazuje żądania do rzeczywistego odbiorcy.
Kiedy warto stosować wzorzec Ambasador?
🔹 Gdy mikroserwis komunikuje się z zewnętrznymi API lub usługami
🔹 Gdy chcemy dodać mechanizmy odporności, np. Circuit Breaker lub Retry Logic
🔹 Gdy chcemy przechwycić ruch i logować zdarzenia na poziomie proxy
🔹 Gdy chcemy uprościć kod mikroserwisu i uniknąć bezpośredniej integracji z komponentami sieciowymi
Dzięki oddzieleniu odpowiedzialności za komunikację, możemy utrzymać czysty kod mikroserwisu, a konfiguracja ambasadora może być łatwo zmieniana bez konieczności ingerencji w główny serwis.
Przykład implementacji w Kubernetes – Ambassador Sidecar
W środowisku Kubernetes, wzorzec ambasador jest najczęściej realizowany za pomocą kontenera sidecar, który działa obok mikroserwisu w tym samym podzie.
Przykładowy manifest dla ambasadora w Kubernetes (Envoy Proxy)
apiVersion: v1
kind: Pod
metadata:
name: my-microservice
labels:
app: my-microservice
spec:
containers:
- name: my-microservice
image: my-microservice:latest
ports:
- containerPort: 8080
- name: ambassador
image: envoyproxy/envoy:latest
ports:
- containerPort: 9901
volumeMounts:
- name: envoy-config
mountPath: /etc/envoy
volumes:
- name: envoy-config
configMap:
name: envoy-config
🔹 Pierwszy kontener (my-microservice) to aplikacja biznesowa.
🔹 Drugi kontener (ambasador – Envoy Proxy) przejmuje ruch wychodzący i zarządza komunikacją.
Dzięki temu mikroserwis nie musi zajmować się takimi aspektami jak retry logic, circuit breaker czy monitoring – wszystkim zarządza ambasador.
Przykład w Spring Cloud – Ambassador Pattern z Resilience4j
W Spring Cloud możemy zaimplementować wzorzec Ambasador za pomocą Resilience4j, który zapewnia obsługę Circuit Breaker, Retry i Rate Limiting.
@CircuitBreaker(name = "externalService", fallbackMethod = "fallbackResponse")
@Retry(name = "externalService", maxAttempts = 3)
public String callExternalService() {
return restTemplate.getForObject("https://api.external.com/data", String.class);
}
public String fallbackResponse(Exception e) {
return "Fallback: Serwis niedostępny";
}
✅ Circuit Breaker – zapobiega przeciążeniu systemu, blokując wywołania do usługi, gdy wykryje jej awarię.
✅ Retry Logic – podejmuje kilka prób ponownego wykonania żądania w przypadku błędu.
Dzięki temu mikroserwis nie musi samodzielnie obsługiwać problemów z siecią, a cała logika odpornościowa jest zarządzana przez warstwę ambasadora.
Korzyści z zastosowania wzorca Ambasador
✅ Lepsza separacja odpowiedzialności – mikroserwis skupia się na logice biznesowej, a ambasador zarządza komunikacją.
✅ Odporność na błędy sieciowe – retry logic, circuit breaker i load balancing poprawiają stabilność systemu.
✅ Bezpieczeństwo – ambasador może obsługiwać autoryzację i szyfrowanie ruchu.
✅ Łatwiejsza skalowalność – warstwa proxy może być dynamicznie konfigurowana i skalowana niezależnie od mikroserwisów.
Ambassador a API Gateway
Być może zwróciłeś uwagą na podobieństwo wzorca Ambasador do omawianego przeze mnie innego wzorca MSA - API Gateway. Jednak wzorce te, mają różne zastosowania i uzupełniają się w architekturze mikroserwisów.
Podsumowanie
🔹 Ambassador Pattern to skuteczny sposób na zarządzanie komunikacją mikroserwisów z zewnętrznymi usługami.
🔹 W Kubernetes ambasador jest często realizowany jako sidecar proxy, np. Envoy Proxy.
🔹 W Spring Cloud można wykorzystać Resilience4j do obsługi circuit breaker i retry logic.
🔹 Wzorzec ambasador pozwala na odporność, monitoring i bezpieczeństwo połączeń wychodzących, co znacząco zwiększa stabilność systemów opartych na MSA.
- Pobierz link
- X
- Inne aplikacje
Komentarze
Prześlij komentarz