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 zawiera przykłady lub fragmenty kodu, które pokazują sposób implementacji wzorca na platformie Azure. Jednak większość z tych wzorców jest odpowiednia dla dowolnego systemu rozproszonego, hostowanego na platformie Azure lub na innych platformach w chmurze.

Wyzwania związane z projektowaniem aplikacji w chmurze

Data management

Zarządzanie danymi

Zarządzanie danymi to kluczowy element aplikacji w chmurze, który ma wpływ na większość atrybutów jakości. Dane są zazwyczaj hostowane w różnych lokalizacjach i na wielu serwerach, z powodów takich jak wydajność, skalowalność i dostępność, i może to rodzić szereg wyzwań. Na przykład musi zostać zachowana spójność danych i zwykle konieczne będzie synchronizowanie danych w różnych lokalizacjach.

Design and implementation

Projektowanie i implementacja

Dobry projekt obejmuje kilka czynników, takich jak spójność i zgodność projektu i wdrożenia składników, łatwość konserwacji i obsługi w celu uproszczenia administracji i projektowania, a także możliwość ponownego wykorzystania podsystemów i składników w innych aplikacjach i w innych scenariuszach. Decyzje podjęte w fazie projektowania i implementacji mają ogromy wpływ na jakość i całkowity koszt posiadania aplikacji i usług hostowanych w chmurze.

Messaging icon

Obsługa komunikatów

Rozproszony charakter aplikacji w chmurze wymaga infrastruktury obsługi komunikatów, która łączy składniki i usługi, najlepiej w luźno powiązany sposób w celu zapewnienia maksymalnej skalowalności. Asynchroniczna obsługa komunikatów jest powszechnie używana i oferuje wiele korzyści, ale także niesie ze sobą wyzwania, takie jak porządkowanie komunikatów, zarządzanie skażonymi komunikatami, idempotentność i inne.

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
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
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
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ść
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