Wzorce projektowe chmury, 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 umyślnym kompromisie w ramach obciążeń i zoptymalizować pod kątem żądanego wyniku. Mogą 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 rzeczywiste środowisko, są przeznaczone do skalowania w chmurze i modeli operacyjnych i są z natury niezależne od dostawcy. Używanie dobrze znanych wzorców jako sposobu standaryzacji projektu obciążenia jest elementem 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ł.

Wzorce projektowe pod kątem wydajności

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

Wzorce Podsumowanie
Asynchroniczne operacje żądanie-odpowiedź Zwiększa czas odpowiedzi i skalowalność systemów przez oddzielenie faz żądań i odpowiedzi interakcji dla procesów, które nie wymagają natychmiastowych odpowiedzi. Korzystając ze wzorca asynchronicznego, można zmaksymalizować współbieżność po stronie serwera. Możesz użyć tego wzorca, aby 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.
Gródź Wprowadza segmentację między składnikami w celu odizolowania promienia wybuchu awarii. Ten projekt umożliwia indywidualne skalowanie każdego grodzi w celu zaspokojenia potrzeb 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 w kolejnych żądaniach dotyczących tych samych danych. Ten wzorzec jest szczególnie przydatny w przypadku danych z dużą liczbą operacji 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 pozyskiwania 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 topologii scentralizowanej aranżacji.
Wyłącznik Zapobiega ciągłym żądaniom do nieprawidłowej lub niedostępnej zależności. Podejście 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 możliwość oddzielnego pobierania danych powią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 to przez zmniejszenie rozmiaru komunikatów i zapewnienie, że konsumenci pobierają dane ładunku tylko w razie potrzeby i w dogodnym czasie.
Konkurujący odbiorcy 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 odbiorcy i dynamiczne skalowanie oparte na głębokości kolejki.
Konsolidacja zasobów obliczeniowych Optymalizuje i konsoliduje zasoby obliczeniowe przez zwiększenie gęstości. 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 węzła zapasowego 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 polecenia i zapytania (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.
Jednostki skalowania wdrożenia Zapewnia metodę wydawania konkretnej wersji aplikacji i jej infrastruktury jako kontrolowanej jednostki wdrożenia w oparciu o założenie, ż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 niezmiennym dzienniku tylko do dołączania. W zależności od obciążenia ten wzorzec, zwykle w połączeniu z CQRS, odpowiedni projekt domeny i strategiczne tworzenie 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 na potrzeby 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.
Strażnik 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 za pomocą 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. Funkcja udostępniona przez platformę odciążona prawdopodobnie będzie wysoce wydajna.
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 infrastruktura jest współużytkowany tylko wśród użytkowników, którzy obecnie korzystają z tej samej geode.
Monitorowanie punktu końcowego kondycji Umożliwia monitorowanie kondycji lub stanu systemu przez uwidocznianie 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.
Indeksowanie tabeli Optymalizuje pobieranie danych w rozproszonych magazynach danych, umożliwiając klientom wyszukiwanie metadanych w taki sposób, aby dane mogły być pobierane bezpośrednio, unikając konieczności wykonywania pełnego skanowania magazynu danych. Klienci są wskazywani na ich fragment, partycję 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 do 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 Zapewnia, że elementy o wyższym priorytcie są przetwarzane i wykonywane przed elementami o niższym priorytcie. Rozdzielenie elementów na podstawie priorytetu biznesowego umożliwia skoncentrowanie wysiłków związanych z wydajnością na najbardziej wrażliwych na czas pracy.
Wydawca/subskrybent Rozdziela składniki architektury, zastępując bezpośrednią komunikację między klientem a usługą lub klientem-usługą za pośrednictwem pośredniczącego brokera komunikatów lub magistrali zdarzeń. Oddzielenie wydawców od użytkowników umożliwia zoptymalizowanie obliczeń i kodu specjalnie dla zadania, które użytkownik musi wykonać dla określonego komunikatu.
Wyrównywanie obciążeń przy użyciu kolejki Kontroluje poziom żądań przychodzących lub zadań, buforując je w kolejce i pozwalając procesorowi kolejki obsłużyć je 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.
Agent harmonogramu — nadzorca Efektywnie dystrybuuje i redystrybuuje zadania w systemie na podstawie czynników, które są widoczne w systemie. Ten wzorzec używa metryk wydajności i pojemności do wykrywania bieżącego wykorzystania i kierowania zadań do agenta, który ma pojemność. Można go również użyć do określania priorytetów wykonywania pracy o wyższym priorytcie nad pracą o niższym priorytcie.
Dzielenie na fragmenty Kieruje obciążenie do określonego logicznego miejsca docelowego w celu obsługi określonego żądania, umożliwiając kolokację na potrzeby optymalizacji. Gdy używasz fragmentowania w strategii skalowania, dane lub przetwarzanie są izolowane do fragmentu, więc konkuruje ona o zasoby tylko z innymi żądaniami skierowanymi do tego fragmentu. Można również użyć fragmentowania do optymalizacji na podstawie lokalizacji geograficznej.
Przyczepka 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 przeznaczonej 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.
Ograniczanie przepływności Nakłada limity szybkości lub przepływności żądań przychodzących do zasobu lub składnika. Gdy system jest pod dużym zapotrzebowaniem, ten wzorzec pomaga ograniczyć przeciążenia, które mogą prowadzić do wąskich gardeł wydajności. Można go również użyć, aby aktywnie uniknąć hałaśliwych scenariuszy sąsiadów.
Klucz portiera Udziela ograniczonego zabezpieczeń dostępu 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.

Następne kroki

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