Udostępnij przez


Wzorzec ambasadora

Azure

Tworzenie usług pomocnika, które wysyłają żądania sieci w imieniu usługi lub aplikacji klienta. Usługę ambasadora można traktować jako serwer proxy poza procesem, który znajduje się we współpracy z klientem.

Ten wzorzec może być przydatny do odciążania typowych zadań łączności klienta, takich jak monitorowanie, rejestrowanie, routing, zabezpieczenia (takie jak TLS) i wzorce 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 również umożliwić wyspecjalizowanym zespołowi zaimplementowanie tych funkcji.

Kontekst i problem

Odporne aplikacje oparte na chmurze wymagają takich funkcji jak przerywanie obwodów, routing, pomiary i monitorowanie oraz możliwość aktualizowania konfiguracji związanych 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ż utrzymywany lub nie można go łatwo modyfikować przez zespół deweloperów.

Wywołania sieciowe mogą również wymagać znacznej konfiguracji połączenia, uwierzytelniania i autoryzacji. Jeśli te wywołania są używane w wielu aplikacjach, tworzone przy użyciu wielu języków i struktur, wywołania muszą być skonfigurowane dla każdego z tych wystąpień. Ponadto może być konieczne zarządzanie funkcjami sieci i zabezpieczeń przez centralny zespół w organizacji. Duża baza kodu może być ryzykowna dla tego zespołu w celu zaktualizowania kodu aplikacji, którego nie zna.

Rozwiązanie

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

Diagram wzorca ambasadora

Funkcje odciążone do ambasadora mogą być zarządzane niezależnie od aplikacji. Ambasador można aktualizować i modyfikować bez zakłócania starszej funkcjonalności aplikacji. Umożliwia również oddzielnym zespołom wyspecjalizowanym implementowanie i konserwowanie funkcji zabezpieczeń, sieci lub uwierzytelniania, które zostały przeniesione do ambasadora.

Usługi ambasadorów można wdrożyć jako przyczepkę , aby towarzyszyć cyklowi życia zużywanej aplikacji lub usługi. Alternatywnie, jeśli ambasador jest współużytkowany przez wiele oddzielnych procesów na wspólnym hoście, można go wdrożyć jako demona lub usługę systemu Windows. Jeśli usługa zużywana jest konteneryzowana, ambasador powinien zostać utworzony jako oddzielny kontener na tym samym hoście z odpowiednimi linkami skonfigurowanymi do komunikacji.

Problemy i zagadnienia

  • Serwer proxy dodaje pewne opóźnienia. Rozważ, czy biblioteka klienta wywoływana bezpośrednio przez aplikację jest lepszym podejściem.
  • Rozważ możliwy wpływ na uwzględnienie uogólnionych funkcji na serwerze proxy. Na przykład ambasador może obsługiwać ponawianie prób, ale może to nie być bezpieczne, chyba że wszystkie operacje są idempotentne.
  • Rozważ mechanizm umożliwiający klientowi przekazanie kontekstu do serwera proxy i powrót do klienta. Na przykład dołącz nagłówki żądań HTTP, aby zrezygnować z ponawiania próby lub określić maksymalną liczbę ponownych prób.
  • Zastanów się, jak spakujesz i wdrożysz serwer proxy.
  • Zastanów się, czy należy użyć pojedynczego wystąpienia udostępnionego dla wszystkich klientów, czy wystąpienia dla każdego klienta.

Kiedy należy używać tego wzorca

Użyj tego wzorca, gdy:

  • Należy utworzyć wspólny zestaw funkcji łączności klienta dla wielu języków lub struktur.
  • Należy odciążyć przekrojowe problemy z łącznością klienta dla deweloperów infrastruktury lub innych bardziej wyspecjalizowanych zespołów.
  • Wymagaj obsługi wymagań dotyczących łączności w chmurze lub klastra w starszej aplikacji lub aplikacji, która jest trudna do zmodyfikowania.

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

  • Gdy opóźnienie żądania sieciowego 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ą używane 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. 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 Instynkt samozachowawczy
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 przedstawiono aplikację wysyłającą żądanie do usługi zdalnej za pośrednictwem serwera proxy ambasadora. Ambasador zapewnia routing, przerywanie obwodów i rejestrowanie. Wywołuje usługę zdalną, a następnie zwraca odpowiedź do aplikacji klienckiej:

Przykład wzorca ambasadora