Wzorzec ambasadora

Azure

Tworzenie usług pomocnika, które wysyłają żądania sieci w imieniu usługi lub aplikacji klienta. O usłudze ambasadora można myśleć jak o pozaprocesowym serwerze proxy, który jest kolokowany z klientem.

Ten wzorzec może być przydatny przy przekazywaniu typowych zadań łączności klienta, takich jak monitorowanie, rejestrowanie, routing i zabezpieczanie (np. TLS) oraz we wzorcach odporności w sposób niezależny od języka. Jest często używany ze starszymi aplikacjami lub innymi aplikacjami, które są trudne do zmodyfikowania, w celu rozszerzenia ich możliwości sieciowych. Może on także umożliwić wyspecjalizowanemu zespołowi zaimplementowanie takich funkcji.

Kontekst i problem

Odporne aplikacje bazujące na chmurze wymagają takich funkcji jak wyłączanie, routing, mierzenie i monitorowanie, a także możliwości aktualizowania konfiguracji powiązanej z siecią. Zaktualizowanie starszych aplikacji lub istniejących bibliotek kodu w celu dodania tych funkcji może być trudne lub niemożliwe, ponieważ kod nie jest już obsługiwany lub nie może zostać łatwo zmodyfikowany przez zespół deweloperów.

Wywołania sieciowe mogą także wymagać dużej ilości pracy związanej z konfiguracją na potrzeby łączenia, uwierzytelniania i autoryzacji. Jeśli te wywołania są używane w wielu aplikacjach utworzonych w wielu językach i przy użyciu wielu struktur, te wywołania trzeba konfigurować osobno dla poszczególnych wystąpień aplikacji. Dodatkowo funkcje sieciowe i zabezpieczeń mogą wymagać zarządzania przez centralny zespół w organizacji. Przy dużej bazie kodu aktualizowanie nieznanego kodu aplikacji może być ryzykowne dla tego zespołu.

Rozwiązanie

Umieść struktury i biblioteki klienta w procesie zewnętrznym, który działa jako serwer proxy między Twoją aplikacją i usługami zewnętrznymi. Wdróż ten serwer proxy w tym samym środowisku hosta co aplikacja, aby umożliwić kontrolę nad routingiem, odpornością i funkcjami zabezpieczeń oraz uniknąć wszelkich ograniczeń dostępu związanych z hostem. Wzorca ambasadora możesz też użyć do standaryzacji i rozszerzenia instrumentacji. Serwer proxy może monitorować metryki wydajności, takie jak opóźnienia i użycie zasobów. Monitorowanie to odbywa się w tym samym środowisku hosta, w którym działa aplikacja.

Diagram wzorca ambasadora

Funkcjami, które są przekazywane do ambasadora, można zarządzać niezależnie od aplikacji. Ambasadora można aktualizować i modyfikować bez zakłócania działania starszych funkcji aplikacji. Pozwala to także oddzielnym, wyspecjalizowanym zespołom na implementowanie i konserwowanie funkcji zabezpieczeń, sieciowych lub uwierzytelniania przeniesionych do ambasadora.

Usługi ambasadora można wdrażać jako przyczepkę towarzyszącą cyklowi życia aplikacji lub usługi, która z nich korzysta. Można też, jeśli ambasador jest współużytkowany przez wiele oddzielnych procesów na wspólnym hoście, wdrożyć go jako demon lub usługę systemu Windows. Jeśli usługa korzystająca z ambasadora jest konteneryzowana, ambasador powinien zostać utworzony jako oddzielny kontener na tym samym hoście, ze skonfigurowanymi właściwymi linkami do komunikacji.

Problemy i kwestie do rozważenia

  • Serwer proxy dodaje pewne opóźnienie. Zastanów się, czy biblioteka klienta wywoływana bezpośrednio z aplikacji nie jest lepszym podejściem.
  • Przemyśl potencjalny wpływ ujęcia uogólnionych funkcji w serwerze proxy. Na przykład ambasador może obsługiwać ponowne próby, ale to może nie być bezpieczne, o ile wszystkie operacje nie są idempotentne.
  • Rozważ mechanizm umożliwiający klientowi przekazanie kontekstu do serwera proxy i powrót do klienta. Na przykład uwzględniaj nagłówki żądań HTTP, aby umożliwić rezygnację z ponowienia próby, lub określaj maksymalną liczbę ponowień próby.
  • Zastanów się, jak spakujesz i wdrożysz serwer proxy.
  • Rozważ, czy używać jednego współużytkowanego wystąpienia dla wszystkich klientów, czy oddzielnego wystąpienia dla każdego klienta.

Kiedy używać tego wzorca

Użyj tego wzorca, gdy:

  • Potrzebujesz przygotować typowy zestaw funkcji łączności klienta dla wielu języków lub struktur.
  • Potrzebujesz przekazać całość zagadnień związanych z łącznością klienta deweloperom infrastruktury lub innym bardziej wyspecjalizowanym zespołom.
  • Musisz spełnić wymagania w zakresie łączności chmury lub klastra w starszej aplikacji lub aplikacji trudnej do zmodyfikowania.

Ten wzorzec może być nieodpowiedni w następujących przypadkach:

  • Gdy opóźnienie żądań w sieci ma krytyczne znaczenie. Serwer proxy wprowadza pewne nakłady pracy, choć minimalne, a w niektórych przypadkach może to mieć wpływ na aplikację.
  • Gdy funkcje łączności klienta są wykorzystywane przez jeden język. W takim przypadku lepszym rozwiązaniem może być biblioteka klienta dystrybuowana do zespołów programistycznych jako pakiet.
  • Gdy funkcje łączności nie mogą być uogólnione i wymagają dokładniejszej integracji z aplikacją kliencka.

Projekt obciążenia

Architekt powinien ocenić, jak wzorzec ambasadora może być używany w projekcie obciążenia, aby sprostać celom i zasadom opisanym w filarach platformy Azure Well-Architected Framework. Na przykład:

Filar Jak ten wzorzec obsługuje cele filaru
Decyzje projektowe dotyczące niezawodności pomagają obciążeniu stać się odporne na awarię i zapewnić, że zostanie przywrócony do w pełni funkcjonalnego stanu po wystąpieniu awarii. Punkt korygowania komunikacji sieciowej ułatwiony przez ten wzorzec zapewnia możliwość dodania wzorców niezawodności do komunikacji sieciowej, takich jak ponawianie prób lub buforowanie.

- RE:07 Self-preservation
Decyzje dotyczące projektowania zabezpieczeń pomagają zapewnić poufność, integralność i dostępność danych i systemów obciążenia. Ten wzorzec zapewnia możliwość rozszerzenia zabezpieczeń komunikacji sieciowej, które nie mogły zostać bezpośrednio obsłużone przez klienta.

- SE:06 Kontrolki sieci
- Szyfrowanie SE:07

Podobnie jak w przypadku każdej decyzji projektowej, należy rozważyć wszelkie kompromisy w stosunku do celów innych filarów, które mogą zostać wprowadzone przy użyciu tego wzorca.

Przykład

Na poniższym diagramie pokazano aplikację zgłaszającą żądanie do usługi zdalnej za pośrednictwem serwera proxy ambasadora. Ambasador udostępnia funkcje routingu, wyłącznika i rejestrowania. Wywołuje on usługę zdalną, a następnie zwraca odpowiedź do aplikacji klienta:

Przykład wzorca ambasadora