Wzorzec przyczepki

Azure

Wdrażanie składników aplikacji w osobnym procesie lub kontenerze w celu zapewnienia izolacji i hermetyzacji. Ten wzorzec może również umożliwić, aby aplikacje składały się ze składników i technologii heterogenicznych.

Ten wzorzec jest nazywany Przyczepką, ponieważ jest podobny do przyczepki dołączanej do motocykla. We wzorcu przyczepka jest dołączona do aplikacji nadrzędnej i udostępnia funkcje pomocnicze dla aplikacji. Przyczepki dotyczy też ten sam cykl życia, co aplikacji nadrzędnej, ponieważ jest tworzona i wycofywana wraz z elementem nadrzędnym. Wzorzec przyczepki czasami jest nazywany wzorcem pomocnika i jest to wzorzec dekompozycji.

Kontekst i problem

Aplikacje i usługi często wymagają powiązanych funkcji, takich jak monitorowanie, rejestrowanie, konfigurowanie i usługi sieciowe. Te zadania peryferyjne można zaimplementować jako osobne składniki lub usługi.

Jeśli są one ściśle zintegrowane z aplikacją, mogą działać w tym samym procesie co aplikacja, co w celu wydajnego korzystania z udostępnionych zasobów. Oznacza to jednak, że nie są one dobrze odizolowane, a awaria w jednym z tych składników może mieć wpływ na inne składniki lub całą aplikację. Ponadto zwykle muszą być implementowane przy użyciu tego samego języka co aplikacja nadrzędna. W efekcie składnik i aplikacja są ściśle wzajemnie zależne od siebie.

Jeśli aplikacja zostanie podzielona na usługi, każda usługa może wówczas zostać utworzona za pomocą innego języka i technologii. Chociaż daje to większą elastyczność, oznacza to, że każdy składnik ma swoje własne zależności i wymaga charakterystycznych dla języka bibliotek, aby uzyskać dostęp do podstawowej platformy i wszelkich zasobów współdzielonych z aplikacją nadrzędną. Ponadto wdrożenie tych funkcji jako oddzielnych usług może wprowadzić opóźnienie do aplikacji. Zarządzanie kodem i zależnościami dla tych interfejsów specyficznych dla języka mogą również znacznie zwiększyć złożoność, szczególnie w przypadku hostingu, wdrażania i zarządzania.

Rozwiązanie

Kolokuj spójny zestaw zadań z podstawową aplikacją, ale umieść je wewnątrz własnego procesu lub kontenera, udostępniając jednorodny interfejs dla usług platformy w różnych językach.

Diagram wzorca przyczepki

Usługa przyczepki nie musi być częścią aplikacji, ale jest z nią połączona. Przechodzi ona wszędzie tam, gdzie przejdzie aplikacja nadrzędna. Przyczepki obsługują procesy lub usługi, które zostały wdrożone wraz z główną aplikacją. W motocyklu przyczepka jest dołączona do jednego motocykla i każdy motocykl może mieć własną przyczepkę. W ten sam sposób usługa przyczepki dzieli swój los z aplikacją nadrzędną. Dla każdego wystąpienia aplikacji wystąpienie przyczepki jest wdrażane i hostowane obok niej.

Do zalet używania wzorca przyczepki należą:

  • Przyczepka jest niezależna od swojej głównej aplikacji w sensie środowiska uruchomieniowego i języka programowania, dzięki czemu nie musisz opracowywać jednej przyczepki dla każdego języka.

  • Przyczepka może mieć dostęp do tych samych zasobów co główna aplikacja. Na przykład przyczepka może monitorować zasoby systemowe używane zarówno przez przyczepkę, jak i główną aplikację.

  • Ze względu na bliskość aplikacji podstawowej nie ma znaczącego opóźnienia podczas komunikacji między nimi.

  • Nawet w przypadku aplikacji, które nie zapewniają mechanizmu rozszerzalności, można użyć przyczepki, aby rozszerzyć funkcjonalność, dołączając ją jako własny proces w tym samym hoście lub podkontenerze co aplikacja podstawowa.

Wzorzec przyczepki jest często używany z kontenerami i nazywany kontenerem przyczepki lub kontenerem pomocnika.

Problemy i kwestie do rozważenia

  • Rozważ wdrożenie i format pakowania, który będzie używany do wdrażania usług, procesów lub kontenerów. Kontenery szczególnie dobrze nadają się na wzorzec przyczepki.
  • Podczas projektowania usługi przyczepki należy ostrożnie podejmować decyzje o mechanizmie komunikacji międzyprocesowej. Spróbuj użyć technologii niezależnych od języka lub struktury, chyba że wymagania dotyczące wydajności spowodują, że będzie to niepraktyczne.
  • Przed umieszczeniem funkcji w przyczepce należy wziąć pod uwagę, czy działałyby lepiej jako osobna usługa lub bardziej tradycyjny demon.
  • Należy również wziąć pod uwagę to, czy funkcje można zaimplementować jako bibliotekę lub przy użyciu tradycyjnego mechanizmu rozszerzenia. Biblioteki charakterystyczne dla języka mogą mieć większy poziom integracji i mniejsze obciążenie sieci.

Kiedy używać tego wzorca

Użyj tego wzorca, gdy:

  • Podstawowa aplikacja używa heterogenicznego zestawu języków i struktur. Składnik znajdujący się w usłudze przyczepki może być używany przez aplikacje napisane w różnych językach za pomocą różnych struktur.
  • Składnik jest własnością zdalnego zespołu lub innej organizacji.
  • Składnik lub funkcja musi znajdować się na tym samym hoście co aplikacja.
  • Potrzebna jest usługa, która współużytkuje ogólny cykl życia aplikacji głównej, ale można ją niezależnie aktualizować.
  • Potrzebna jest precyzyjna kontrola limitów zasobów dla określonego zasobu lub składnika. Na przykład można ograniczyć ilość pamięci, z której korzysta określony składnik. Możesz wdrożyć składnik jako przyczepkę i zarządzać wykorzystaniem pamięci niezależnie od głównej aplikacji.

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

  • Gdy komunikacja międzyprocesowa musi być zoptymalizowana. Komunikacja między usługami aplikacji nadrzędnej i przyczepki obejmuje pewien narzut, a zwłaszcza opóźnienia w wywołaniach. Może to nie być akceptowalnym kompromisem dla intensywnie używanych interfejsów.
  • Dla małych aplikacji, gdzie koszt zasobu dla wdrożenia usługi przyczepki dla każdego wystąpienia nie jest wart korzyści z izolacji.
  • Gdy usługa potrzebuje skalowania innego niż główne aplikacje lub niezależnego od nich. Jeśli tak, może lepiej będzie wdrożyć funkcję jako osobną usługę.

Projekt obciążenia

Architekt powinien ocenić, w jaki sposób wzorzec przyczepki 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 dotyczące projektowania zabezpieczeń pomagają zapewnić poufność, integralność i dostępność danych i systemów obciążenia. Hermetyzując to zadanie i wdrażając je poza procesem, można zmniejszyć obszar powierzchni poufnych procesów tylko do kodu potrzebnego do wykonania zadania. Możesz również użyć przyczepek, aby dodać krzyżowe mechanizmy kontroli zabezpieczeń do składnika aplikacji, który nie jest natywnie zaprojektowany z tej funkcji.

- Segmentacja SE:04
- Szyfrowanie SE:07
Doskonałość operacyjna pomaga zapewnić jakość obciążeń dzięki ustandaryzowanym procesom i spójności zespołu. Ten wzorzec zapewnia podejście do implementowania elastyczności integracji narzędzi, które może zwiększyć widoczność aplikacji bez konieczności stosowania bezpośrednich zależności implementacji przez aplikację. Umożliwia ona niezależne rozwijanie funkcji przyczepki i utrzymywanie jej niezależnie od cyklu życia aplikacji.

- OE:04 Narzędzia i procesy
- System monitorowania OE:07
Wydajność pomaga wydajnie sprostać zapotrzebowaniu dzięki optymalizacjom skalowania, danych, kodu. Zadania krzyżowe można przenosić do pojedynczego procesu, który może być skalowany w wielu wystąpieniach głównego procesu, co zmniejsza konieczność wdrażania zduplikowanych funkcji dla każdego wystąpienia aplikacji.

- PE:07 Kod i infrastruktura

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

Wzorzec przyczepki ma zastosowanie do wielu scenariuszy. Kilka typowych przykładów:

  • Interfejs API infrastruktury. Zespół deweloperów infrastruktury tworzy usługę, która jest wdrażana wraz z każdą aplikacją zamiast charakterystycznej dla języka biblioteki klienta, aby uzyskać dostęp do infrastruktury. Usługa jest ładowana jako przyczepka i zapewnia wspólną warstwę usług infrastruktury, takich jak rejestrowanie, dane środowiska, magazyn konfiguracji, odnajdywanie, moduł sprawdzania kondycji i usługi programu alarmowego. Przyczepka monitoruje również środowisko i proces (lub kontener) hosta aplikacji nadrzędnej oraz rejestruje informacje w scentralizowanej usłudze.
  • Zarządzanie serwerem NGINX/HAProxy. Wdróż serwer NGINX z usługą przyczepki, która monitoruje stan środowiska, a następnie aktualizuje plik konfiguracji NGINX i powtarza proces, gdy są potrzebne zmiany stanu.
  • Przyczepka usługi ambasador. Wdróż usługę ambasador jako przyczepkę. Aplikacja wykonuje wywołania za pośrednictwem usługi ambasador, która obsługuje rejestrowanie żądania, routing, przerwy w obwodzie i inne funkcje związane z łącznością.
  • Odciążający serwer proxy. Umieść serwer proxy NGINX przed wystąpieniem usługi node.js, aby obsługiwał zawartość plików statycznych dla usługi.