Wzorce projektowe oparte na chmurze

Te wzorce projektowe są przydatne do tworzenia niezawodnych, skalowalnych, bezpiecznych aplikacji w chmurze.

Dla każdego wzorca opisano problem rozwiązywany przez ten wzorzec, uwagi dotyczące stosowania wzorca oraz przykład oparty na platformie Microsoft Azure. Większość wzorców obejmuje przykłady kodu lub fragmenty kodu, które pokazują, jak zaimplementować wzorzec na platformie Azure. Jednak większość wzorców jest istotna dla dowolnego systemu rozproszonego, zarówno hostowanego na platformie Azure, jak i na innych platformach w chmurze.

Wyzwania związane z projektowaniem aplikacji w chmurze

Zarządzanie danymi

Zarządzanie danymi

Zarządzanie danymi jest kluczowym elementem aplikacji w chmurze i ma wpływ na większość atrybutów jakości. Dane są zwykle hostowane w różnych lokalizacjach i na wielu serwerach w celu zapewnienia wydajności, skalowalności lub dostępności. Może to stanowić różne wyzwania. Na przykład musi zostać zachowana spójność danych i zwykle konieczne będzie synchronizowanie danych w różnych lokalizacjach.

Projektowanie i implementacja

Projektowanie i implementacja

Dobry projekt obejmuje spójność i spójność w projektowaniu i wdrażaniu składników, łatwość utrzymania w celu uproszczenia administrowania i programowania oraz ponownego wykorzystania składników i podsystemów w innych aplikacjach i scenariuszach. Decyzje podejmowane w fazie projektowania i implementacji znacząco wpływają na jakość i całkowity koszt posiadania aplikacji i usług hostowanych w chmurze.

Ikona obsługi komunikatów

Obsługa komunikatów

Rozproszony charakter aplikacji w chmurze wymaga infrastruktury obsługi komunikatów, która łączy składniki i usługi, najlepiej luźno powiązane w celu zmaksymalizowania skalowalności. Asynchroniczna obsługa komunikatów jest powszechnie używana i zapewnia wiele korzyści, ale przynosi również wyzwania, takie jak porządkowanie komunikatów, zarządzanie komunikatami trucizny, idempotentność i nie tylko.

Katalog wzorców

Wzorce Podsumowanie Kategoria
Ambasador Tworzenie usług pomocnika, które wysyłają żądania sieci w imieniu usługi lub aplikacji klienta. Projektowanie i implementacja,
Doskonałość operacyjna
Warstwa chroniąca przed uszkodzeniem Implementowanie warstwy fasady lub adaptera między nowoczesną aplikacją a starszym systemem. Projektowanie i implementacja,
Doskonałość operacyjna
Asynchroniczne operacje żądanie-odpowiedź Oddzielenie przetwarzania zaplecza od hosta frontonu, kiedy przetwarzanie zaplecza musi być asynchroniczne, a fronton nadal potrzebuje jasnej odpowiedzi. Obsługa komunikatów
Zaplecza dla frontonów Tworzenie oddzielnych usług zaplecza do użycia przez określone aplikacje lub interfejsy frontonu. Projektowanie i implementacja
Gródź Izolowanie elementów aplikacji w pulach, tak aby w przypadku awarii jednego pozostałe nadal działały. Niezawodność
Odkładanie do pamięci podręcznej Ładowanie danych na żądanie do pamięci podręcznej z magazynu danych Zarządzanie danymi,
Efektywność wydajności
Choreografia Pozwól każdej usłudze decydować o czasie i sposobie przetwarzania operacji biznesowych, zamiast polegać na centralnym orkiestratorze. Obsługa komunikatów,
Efektywność wydajności
Wyłącznik Obsługa błędów, których naprawienie może potrwać zmienną ilość czasu podczas nawiązywania połączenia ze zdalną usługą lub zasobem. Niezawodność
Sprawdzanie oświadczenia Podziel duży komunikat na sprawdzanie oświadczenia i ładunek, aby uniknąć przeciążania magistrali komunikatu. Obsługa komunikatów
Transakcja wyrównująca Cofanie pracy wykonywanej przez serię kroków, które razem definiują ostatecznie spójną operację. Niezawodność
Konkurujący odbiorcy Umożliwianie wielu równoczesnym odbiorcom przetwarzania komunikatów odebranych w tym samym kanale obsługi komunikatów. Obsługa komunikatów
Konsolidacja zasobów obliczeniowych Konsolidacja wielu zadań lub operacji w pojedynczą jednostkę obliczeniową Projektowanie i implementacja
CQRS Segregowanie operacji, które odczytują dane z operacji aktualizujących dane, przy użyciu osobnych interfejsów. Zarządzanie danymi,
Projektowanie i implementacja,
Efektywność wydajności
Jednostki skalowania wdrożenia Wdróż wiele niezależnych kopii składników aplikacji, w tym magazynów danych. Niezawodność,
Efektywność wydajności
Konfiguracja obciążenia usługi Edge Duża różnorodność systemów i urządzeń na hali produkcyjnej może utrudnić konfigurację obciążenia. Projektowanie i implementacja
Określanie źródła zdarzeń Używanie magazynu typu „tylko dołączanie” do rejestrowania serii zdarzeń, które opisują działania wykonywane na danych w domenie. Zarządzanie danymi,
Efektywność wydajności
Zewnętrzny magazyn konfiguracji Przenoszenie informacji o konfiguracji z pakietu wdrożeniowego aplikacji do centralnej lokalizacji. Projektowanie i implementacja,
Doskonałość operacyjna
Tożsamość federacyjna Delegowanie uwierzytelniania do zewnętrznego dostawcy tożsamości. Bezpieczeństwo
Strażnik Ochrona aplikacji i usług przy użyciu dedykowanego wystąpienia hosta, które działa jako broker między klientami a aplikacją lub usługą, weryfikuje i oczyszcza żądania oraz przekazuje żądania i dane między nimi. Bezpieczeństwo
Agregacja za pomocą bramy Używanie bramy w celu agregowania wielu indywidualnych żądań w pojedynczym żądaniu. Projektowanie i implementacja,
Doskonałość operacyjna
Odciążanie bramy Odciążanie funkcjonalności usług udostępnionych lub specjalnych na serwerze proxy bramy. Projektowanie i implementacja,
Doskonałość operacyjna
Routing bramy Kierowanie żądań do wielu usług za pomocą pojedynczego punktu końcowego. Projektowanie i implementacja,
Doskonałość operacyjna
Węzły geograficzne Wdróż usługi zaplecza w zestawie węzłów geograficznych, z których każdy może obsłużyć dowolne żądanie klienta w dowolnym regionie. Niezawodność,
Doskonałość operacyjna
Monitorowanie punktu końcowego kondycji Implementowanie testów funkcjonalności w aplikacji, do których zewnętrzne narzędzia mogą uzyskiwać dostęp przez udostępniane punkty końcowe w regularnych odstępach czasu. Niezawodność,
Doskonałość operacyjna
Indeksowanie tabeli Tworzenie indeksów dla pól magazynu danych, do których często odwołują się zapytania. Zarządzanie danymi,
Efektywność wydajności
Wybór lidera Koordynowanie akcji wykonywanych przez kolekcję współpracujących wystąpień zadań w aplikacji rozproszonej poprzez wybranie jednego wystąpienia jako wiodącego, które przyjmuje odpowiedzialność za zarządzanie innymi wystąpieniami. Projektowanie i implementacja,
Niezawodność
Zmaterializowany widok Generowanie wstępnie wypełnionych widoków dla danych w co najmniej jednym magazynie danych, gdy dane nie są idealnie sformatowane dla wymaganych operacji zapytania. Zarządzanie danymi,
Doskonałość operacyjna,
Efektywność wydajności
Potoki i filtry Podział zadania wykonującego złożone przetwarzanie na serię oddzielnych elementów, które mogą być używane ponownie. Projektowanie i implementacja,
Obsługa komunikatów
Kolejka priorytetowa Priorytetyzacja żądań wysyłanych do usługi, tak aby żądania o wyższym priorytecie były odbierane i przetwarzane znacznie szybciej niż te o niższym priorytecie. Obsługa komunikatów,
Efektywność wydajności
Wydawca/subskrybent Umożliwianie aplikacji asynchronicznego informowania o zdarzeniach zainteresowanych odbiorców bez sprzęgania nadawców z odbiorcami. Obsługa komunikatów
Wyrównywanie obciążeń przy użyciu kolejki Używanie kolejki, która pełni rolę bufora między zadaniem i wywoływanym przez nie usługą w celu złagodzenia sporadycznych dużych obciążeń. Niezawodność,
Obsługa komunikatów,
Odporność,
Efektywność wydajności
Wzorzec limitu szybkości Wzorzec ograniczania, aby pomóc uniknąć lub zminimalizować błędy ograniczania przepustowości związane z tymi limitami ograniczania przepustowości i ułatwić dokładniejsze przewidywanie przepływności. Niezawodność
Ponawianie próby Umożliwianie aplikacji obsługi przewidywanych, tymczasowych błędów podczas próby połączenia z zasobem usługi lub sieci poprzez niewidoczne ponawianie operacji, która poprzednio zakończyła się niepowodzeniem. Niezawodność
Saga Zarządzanie spójnością danych między mikrousługami w scenariuszach transakcji rozproszonych. Saga to sekwencja transakcji, która aktualizuje każdą usługę i publikuje komunikat lub zdarzenie w celu wyzwolenia następnego kroku transakcji. Obsługa komunikatów
Agent harmonogramu — nadzorca Koordynowanie zestawu akcji w rozproszonym zestawie usług i innych zasobach zdalnych. Obsługa komunikatów,
Niezawodność
Sekwencyjny konwój Przetwarzanie zestawu powiązanych komunikatów w zdefiniowanej kolejności bez blokowania przetwarzania innych grup komunikatów. Obsługa komunikatów
Dzielenie na fragmenty Dzielenie magazynu danych na zestaw poziomych partycji lub fragmentów. Zarządzanie danymi,
Efektywność wydajności
Przyczepka Wdrażanie składników aplikacji w osobnym procesie lub kontenerze w celu zapewnienia izolacji i hermetyzacji. Projektowanie i implementacja,
Doskonałość operacyjna
Hosting zawartości statycznej Wdrażanie zawartości statycznej w usłudze magazynu opartej na chmurze, która może dostarczyć ją bezpośrednio do klienta. Projektowanie i implementacja,
Zarządzanie danymi,
Efektywność wydajności
Drzewo figowe Przyrostowa migracja starszej wersji systemu przez stopniowe zastępowanie konkretnych elementów funkcjonalności nowymi aplikacjami i usługami. Projektowanie i implementacja,
Doskonałość operacyjna
Ograniczanie przepływności Kontrolowanie zużycia zasobów używanych przez wystąpienie aplikacji, pojedynczą dzierżawę lub całą usługę. Niezawodność,
Efektywność wydajności
Klucz portiera Używanie tokenu lub klucza, który zapewnia klientom ograniczony bezpośredni dostęp do określonego zasobu lub usługi. Zarządzanie danymi,
Bezpieczeństwo