Udostępnij przez


Wzorce projektowe architektury, które obsługują wydajność

Podczas projektowania architektur obciążeń należy używać wzorców branżowych, które odpowiadają typowym wyzwaniom. Wzorce mogą pomóc w podejmowania zamierzonych kompromisów w ramach obciążeń i optymalizowania pod kątem żądanego wyniku. Mogą one również pomóc w ograniczeniu ryzyka wynikającego z określonych problemów, które mogą mieć wpływ na niezawodność, bezpieczeństwo, koszty i operacje. Jeśli nie zostanie to złagodzone, ryzyko ostatecznie doprowadzi do nieefektywności wydajności. Te wzorce są wspierane przez środowisko rzeczywiste, są przeznaczone dla modeli operacyjnych i skalowania w chmurze i są z natury niezależne od dostawcy. Używanie dobrze znanych wzorców jako sposobu standaryzacji projektu obciążenia jest składnikiem doskonałości operacyjnej.

Wiele wzorców projektowych bezpośrednio obsługuje jeden lub więcej filarów architektury. Wzorce projektowe, które obsługują filar wydajności, dotyczą skalowalności, dostrajania wydajności, priorytetyzacji zadań i usuwania wąskich gardeł.

W poniższej tabeli przedstawiono podsumowanie wzorców projektowych architektury, które obsługują cele wydajności.

Wzór Podsumowanie
Asynchroniczne żądanie-odpowiedź Zwiększa szybkość reakcji i skalowalność systemów przez oddzielenie faz żądania i odpowiedzi interakcji dla procesów, które nie potrzebują natychmiastowych odpowiedzi. Korzystając ze wzorca asynchronicznego, można zmaksymalizować współbieżność po stronie serwera. Za pomocą tego wzorca można zaplanować ukończenie pracy w miarę zezwalania na pojemność.
Zaplecza dla frontonów Indywidualizuje warstwę usługi obciążenia, tworząc oddzielne usługi, które są przeznaczone wyłącznie dla określonego interfejsu frontonu. Ta separacja umożliwia optymalizację w sposób, który może nie być możliwy w przypadku warstwy usług udostępnionych. W przypadku różnych obsługi poszczególnych klientów można zoptymalizować wydajność pod kątem ograniczeń i funkcjonalności określonego klienta.
Grodzi Wprowadza segmentację między składnikami w celu odizolowania promienia wybuchu awarii. Ten projekt umożliwia indywidualne skalowanie każdego grodzi, aby spełniały potrzeby zadania hermetyzowanego w grodzie.
Odkładanie do pamięci podręcznej Optymalizuje dostęp do często odczytywanych danych, wprowadzając pamięć podręczną wypełnioną na żądanie. Pamięć podręczna jest następnie używana na kolejnych żądaniach dla tych samych danych. Ten wzorzec jest szczególnie przydatny w przypadku danych z dużą ilością odczytu, które nie zmieniają się często i mogą tolerować pewną ilość nieaktualności. Celem tej implementacji jest zapewnienie lepszej wydajności w systemie przez odciążenie tego typu danych do pamięci podręcznej zamiast określania źródła ich z magazynu danych.
Choreografia Koordynuje zachowanie autonomicznych składników rozproszonych w obciążeniu przy użyciu zdecentralizowanej komunikacji sterowanej zdarzeniami. Ten wzorzec może stanowić alternatywę, gdy wąskie gardła wydajności występują w scentralizowanej topologii aranżacji.
Wyłącznik Zapobiega ciągłym żądaniom do nieprawidłowej lub niedostępnej zależności. Metoda ponawiania próby przy błędzie może prowadzić do nadmiernego wykorzystania zasobów podczas odzyskiwania zależności, a także przeciążyć wydajność zależności, która próbuje odzyskać.
Sprawdzanie oświadczenia Oddziela dane od przepływu obsługi komunikatów, zapewniając sposób oddzielnego pobierania danych związanych z komunikatem. Ten wzorzec poprawia wydajność i wydajność wydawców komunikatów, subskrybentów i samej magistrali komunikatów, gdy system obsługuje duże ładunki danych. Działa przez zmniejszenie rozmiaru komunikatów i zapewnienie użytkownikom pobierania danych ładunku tylko w razie potrzeby i w odpowiednim czasie.
Konkurujący konsumenci Stosuje rozproszone i współbieżne przetwarzanie, aby efektywnie obsługiwać elementy w kolejce. Ten model obsługuje dystrybucję obciążenia we wszystkich węzłach odbiorców i dynamiczne skalowanie oparte na głębokości kolejki.
Konsolidacja zasobów obliczeniowych Optymalizuje i konsoliduje zasoby obliczeniowe, zwiększając gęstość. Ten wzorzec łączy wiele aplikacji lub składników obciążenia w udostępnionej infrastrukturze. Ta konsolidacja maksymalizuje wykorzystanie zasobów obliczeniowych przy użyciu pojemności zapasowego węzła w celu zmniejszenia nadmiernej aprowizacji. Orkiestratory kontenerów są typowym przykładem. Duże (skalowane w pionie) wystąpienia obliczeniowe są często używane w puli zasobów dla tych infrastruktury.
Podział odpowiedzialności poleceń i zapytań (CQRS) Oddziela operacje odczytu i zapisu modelu danych aplikacji. Ta separacja umożliwia ukierunkowane optymalizacje wydajności i skalowania dla konkretnego celu każdej operacji. Ten projekt jest najbardziej przydatny w aplikacjach, które mają wysoki współczynnik odczytu do zapisu.
Sygnatury wdrożenia Zapewnia podejście do wydawania konkretnej wersji aplikacji i jej infrastruktury jako kontrolowanej jednostki wdrożenia na podstawie założenia, że te same lub różne wersje zostaną wdrożone współbieżnie. Ten wzorzec często jest zgodny ze zdefiniowanymi jednostkami skalowania w obciążeniu: ponieważ wymagana jest dodatkowa pojemność poza tym, co zapewnia pojedyncza jednostka skalowania, jest wdrażana dodatkowa sygnatura wdrożenia na potrzeby skalowania w poziomie.
Określanie źródła zdarzeń Traktuje zmianę stanu jako serię zdarzeń, przechwytując je w niezmienialnym dzienniku tylko do dołączania. W zależności od obciążenia ten wzorzec, zwykle w połączeniu z usługą CQRS, odpowiednim projektem domeny i strategicznym tworzeniem migawek, może zwiększyć wydajność. Ulepszenia wydajności są spowodowane niepodzielnymi operacjami tylko do dołączania i unikaniem blokowania bazy danych dla zapisów i odczytów.
Tożsamość federacyjna Delegowanie zaufania do dostawcy tożsamości zewnętrznego dla obciążenia do zarządzania użytkownikami i zapewnienia uwierzytelniania dla aplikacji. Podczas odciążania zarządzania użytkownikami i uwierzytelniania można przeznaczyć zasoby aplikacji na inne priorytety.
Portier Odciąża przetwarzanie żądań przeznaczone specjalnie do wymuszania zabezpieczeń i kontroli dostępu przed przekazaniem żądania do węzła zaplecza i po nim. Ten wzorzec jest często używany do implementowania ograniczania przepustowości na poziomie bramy, a nie implementowania kontroli szybkości na poziomie węzła. Koordynowanie stanu szybkości między wszystkimi węzłami nie jest z natury wydajne.
Agregacja bramy Upraszcza interakcje klientów z obciążeniem przez agregowanie wywołań do wielu usług zaplecza w jednym żądaniu. Ten projekt może spowodować mniejsze opóźnienie niż projekt, w którym klient nawiązuje wiele połączeń. Buforowanie jest również powszechne w implementacjach agregacji, ponieważ minimalizuje wywołania systemów zaplecza.
Odciążanie bramy Odciąża przetwarzanie żądań do urządzenia bramy przed przekazaniem żądania do węzła zaplecza i po nim. Dodanie bramy odciążającej do procesu żądania umożliwia użycie mniejszej ilości zasobów na węzeł, ponieważ funkcje są scentralizowane w bramie. Implementację funkcji odciążonego można zoptymalizować niezależnie od kodu aplikacji. Odciążone funkcje udostępniane przez platformę prawdopodobnie będą wysoce wydajne.
Routing bramy Kieruje przychodzące żądania sieciowe do różnych systemów zaplecza na podstawie intencji żądań, logiki biznesowej i dostępności zaplecza. Routing bramy umożliwia dystrybucję ruchu między węzłami w systemie w celu równoważenia obciążenia.
Geodezja Wdraża systemy działające w trybach dostępności aktywne-aktywne w wielu lokalizacjach geograficznych. Ten wzorzec używa replikacji danych do obsługi idealnego, że każdy klient może nawiązać połączenie z dowolnym wystąpieniem geograficznym. Można jej użyć do obsługi aplikacji z regionu znajdującego się najbliżej rozproszonej bazy użytkowników. Zmniejsza to opóźnienie, eliminując ruch długodystansowy i dlatego, że udostępniasz infrastrukturę tylko użytkownikom, którzy obecnie korzystają z tej samej geode.
Monitorowanie punktu końcowego kondycji Umożliwia monitorowanie kondycji lub stanu systemu przez uwidacznianie punktu końcowego przeznaczonego specjalnie do tego celu. Za pomocą tych punktów końcowych można poprawić równoważenie obciążenia, rozsyłając ruch tylko do węzłów zweryfikowanych jako w dobrej kondycji. Dzięki dodatkowej konfiguracji można również uzyskać metryki dotyczące dostępnej pojemności węzła.
Tabela indeksów Optymalizuje pobieranie danych w rozproszonych magazynach danych, umożliwiając klientom wyszukiwanie metadanych, dzięki czemu dane mogą być pobierane bezpośrednio, unikając konieczności wykonywania pełnego skanowania magazynu danych. Klienci są wskazywani na ich fragmenty, partycje lub punkt końcowy, co może umożliwić dynamiczne partycjonowanie danych na potrzeby optymalizacji wydajności.
Zmaterializowany widok Używa wstępnie skompilowanych widoków danych w celu optymalizacji pobierania danych. Zmaterializowane widoki przechowują wyniki złożonych obliczeń lub zapytań bez konieczności ponownego obliczania aparatu bazy danych lub klienta dla każdego żądania. Ten projekt zmniejsza ogólne zużycie zasobów.
Kolejka priorytetowa Gwarantuje, że elementy o wyższym priorytcie są przetwarzane i wykonywane przed elementami o niższym priorytekcie. Oddzielenie elementów na podstawie priorytetu biznesowego umożliwia skoncentrowanie wysiłków związanych z wydajnością w najbardziej czasochłonnej pracy.
Wydawca/subskrybent Rozdziela składniki architektury, zastępując bezpośrednią komunikację klient-usługa lub klient-usługa z komunikacją za pośrednictwem pośredniego brokera komunikatów lub magistrali zdarzeń. Oddzielenie wydawców od odbiorców umożliwia optymalizowanie obliczeń i kodu specjalnie dla zadania, które użytkownik musi wykonać dla określonego komunikatu.
Queue-Based bilansowanie obciążenia Steruje poziomem przychodzących żądań lub zadań przez buforowanie ich w kolejce i umożliwienie procesorowi kolejki obsługi ich w kontrolowanym tempie. Takie podejście umożliwia zamierzone projektowanie wydajności przepływności, ponieważ pobieranie żądań nie musi być skorelowane z szybkością przetwarzania.
Nadzorca agenta harmonogramu Efektywnie dystrybuuje i redystrybuuje zadania w systemie na podstawie czynników, które można zaobserwować w systemie. Ten wzorzec używa metryk wydajności i pojemności do wykrywania bieżącego użycia i kierowania zadań do agenta, który ma pojemność. Można go również użyć do nadania priorytetowi wykonywania pracy o wyższym priorytcie nad pracą o niższym priorytcie.
Fragmentowanie Kieruje obciążenie do określonego logicznego miejsca docelowego, aby obsłużyć określone żądanie, włączając kolokację na potrzeby optymalizacji. W przypadku używania fragmentowania w strategii skalowania dane lub przetwarzanie są izolowane do fragmentu, więc rywalizują o zasoby tylko z innymi żądaniami kierowanymi do tego fragmentu. Fragmentowanie można również użyć do optymalizacji na podstawie lokalizacji geograficznej.
Sidecar Rozszerza funkcjonalność aplikacji, hermetyzując zadania inne niż podstawowe lub krzyżowe w procesie towarzyszącym, który istnieje obok głównej aplikacji. 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.
Hosting zawartości statycznej Optymalizuje dostarczanie zawartości statycznej do klientów obciążeń przy użyciu platformy hostingu, która jest przeznaczona do tego celu. Odciążanie odpowiedzialności za zewnętrznego hosta pomaga ograniczyć przeciążenie i umożliwia używanie platformy aplikacji tylko do dostarczania logiki biznesowej.
Regulacja przepustowości Nakłada limity szybkości lub przepływności przychodzących żądań do zasobu lub składnika. Gdy system jest pod dużym zapotrzebowaniem, ten wzorzec pomaga ograniczyć przeciążenie, które może prowadzić do wąskich gardeł wydajności. Można go również używać do proaktywnego unikania hałaśliwych scenariuszy sąsiadów.
Klucz valet Przyznaje dostęp ograniczony do zabezpieczeń do zasobu bez używania pośredniego zasobu do serwera proxy dostępu. W ten sposób odciąża przetwarzanie jako wyłączną relację między klientem a zasobem bez wymagania składnika ambasadora, który musi obsługiwać wszystkie żądania klientów w wydajny sposób. Zaletą korzystania z tego wzorca jest najbardziej istotne, gdy serwer proxy nie dodaje wartości do transakcji.

Dalsze kroki

Przejrzyj wzorce projektowe architektury, które obsługują inne filary platformy Azure Well-Architected Framework: