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.
Obciążenia w chmurze są podatne na fallacie przetwarzania rozproszonego. Oto kilka przykładów fallacie projektowania chmury:
- Sieć jest niezawodna
- Opóźnienie wynosi zero
- Przepustowość jest nieskończona
- Sieć jest bezpieczna
- Topologia nie zmienia się
- Istnieje jeden administrator
- Przechowywanie wersji składników jest proste
- Implementacja możliwości obserwacji może być opóźniona
Wzorce projektowe nie eliminują takich pojęć, jak te, ale mogą pomóc zwiększyć świadomość, rekompensaty i środki zaradcze. Każdy wzorzec chmury ma własne kompromisy. Należy zwrócić uwagę bardziej na to, dlaczego wybierasz określony wzorzec niż do sposobu jego implementacji.
Wyzwania związane z projektowaniem aplikacji w chmurze
Zarządzanie danymiZarzą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 implementacjaDobry projekt obejmuje spójność i spójność w projektowaniu i wdrażaniu składników, konserwację w celu uproszczenia administrowania i programowania oraz możliwość ponownego użycia 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. |
|
Obsługa wiadomościRozproszony 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. Obsługa komunikatów asynchronicznych 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 inne. |
Katalog wzorców
Wzorzec | 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 wiadomości |
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 wiadomości |
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 wiadomości |
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 sklepowej 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 wiadomości |
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 wiadomości |
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ść |
Ponów próbę | 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 wiadomości |
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 wiadomości |
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 |