Style architektury
Styl architektury to rodzina architektur, które mają określoną wspólną charakterystykę. Popularnym stylem architektury jest na przykład architektura N-warstwowa. Niedawno popularność zaczęła zyskiwać architektura mikrousług. Style architektury nie wymagają korzystania z konkretnych technologii, ale niektóre technologie są szczególnie odpowiednie dla określonych architektur. Na przykład kontenery są naturalnie dopasowane do mikrousług.
Zidentyfikowaliśmy zestaw stylów architektury, które są zwykle stosowane w aplikacjach w chmurze. Artykuł dotyczący każdego stylu obejmuje:
- Opis i diagram logiczny stylu.
- Zalecenia dotyczące wyboru danego stylu.
- Korzyści, wyzwania i najlepsze rozwiązania.
- Zalecane wdrożenie przy użyciu odpowiednich usług platformy Azure.
Krótki przewodnik po stylach
Ta sekcja zawiera krótki przewodnik po zidentyfikowanych stylach architektury oraz pewne ogólne informacje dotyczące ich używania. Należy pamiętać, że lista nie jest wyczerpująca. Więcej szczegółów znajduje się w powiązanych tematach.
N-warstwowa
Architektura N-warstwowa to tradycyjna architektura aplikacji dla przedsiębiorstw. Zależności są zarządzane przez podzielenie aplikacji na warstwy, które wykonują funkcje logiczne, takie jak prezentacja, logika biznesowa i dostęp do danych. Warstwa może wywoływać tylko te warstwy, które znajdują się poniżej niej. Jednak to ułożenie warstw w poziomie może rodzić wyzwania. Może być trudno wprowadzić zmiany w jednej części aplikacji bez ingerowania w pozostałe części aplikacji. Sprawia to, że częste aktualizacje stają się wyzwaniem, ograniczając szybkość dodawania nowych funkcji.
Architektura N-warstwowa jest naturalnym wyborem w przypadku migrowania istniejących aplikacji, które już używają architektury warstwowej. Z tego powodu architektura N-warstwowa najczęściej występuje w rozwiązaniach typu infrastruktura jako usługa (IaaS) lub aplikacjach korzystających z kombinacji modelu IaaS i usług zarządzanych.
Sieć web-kolejka-proces roboczy
W przypadku czystego rozwiązania PaaS należy rozważyć wybór architektury Sieć web-kolejka-proces roboczy. W przypadku tego stylu aplikacja ma fronton sieci Web, który obsługuje żądania HTTP, oraz wewnętrzny proces roboczy, który wykonuje zadania intensywnie wykorzystujące procesor CPU lub długotrwałe operacje. Fronton komunikuje się z procesem roboczym za pośrednictwem kolejki komunikatów asynchronicznych.
Architektura Sieć web-kolejka-proces roboczy jest odpowiednia dla stosunkowo prostych domen z niektórymi zadaniami intensywnie korzystającymi z zasobów. Podobnie jak architektura N-warstwowa, jest łatwa do zrozumienia. Korzystanie z usług zarządzanych upraszcza wdrożenie i obsługę. Jednak w złożonych domenach zarządzanie zależnościami może być trudne. Fronton i proces roboczy mogą łatwo stać się dużymi, monolitycznymi składnikami, które jest trudno utrzymywać i aktualizować. Tak jak w przypadku architektury N-warstwowej, może to zmniejszyć częstotliwość aktualizacji i ograniczyć wprowadzanie innowacji.
Mikrousługi
Jeśli aplikacja ma bardziej złożoną domenę, należy rozważyć przejście do architektury Mikrousługi. Aplikacja mikrousług składa się z wielu małych, niezależnych usług. Każda usługa implementuje jedną funkcję biznesową. Usługi są luźno powiązane, komunikując się za pomocą kontraktów interfejsów API.
Każda usługa może być tworzona przez mały, dedykowany zespół deweloperów. Poszczególne usługi mogą być wdrażane bez dużej koordynacji między tymi zespołami, co zachęca do częstych aktualizacji. Architektura mikrousług jest bardziej złożona, jeśli chodzi o kompilację i zarządzanie, porównując z architekturą N-warstwową i architekturą Sieć web-kolejka-proces roboczy. Wymaga dojrzałej kultury deweloperskiej i metodyki DevOps. Jeśli jednak ten styl jest wdrażany prawidłowo, może prowadzić do szybszego opracowywania wersji, wprowadzania innowacji i stworzenia bardziej odpornej architektury.
Architektura sterowana zdarzeniami
Architektury sterowane zdarzeniami korzystają z modelu publikowanie-subskrypcja (pub-sub), w którym producenci publikują zdarzenia, a odbiorcy je subskrybują. Producenci są niezależni od odbiorców, a odbiorcy są niezależni od siebie nawzajem.
Architekturę sterowaną zdarzeniami należy rozważyć w przypadku aplikacji, które pozyskują i przetwarzają duże ilości danych z bardzo małymi opóźnieniami, takich jak rozwiązania IoT. Ten styl jest również przydatny, gdy różne podsystemy muszą wykonywać różne typy przetwarzania na tych samych danych zdarzeń.
Dane Big Data, Duże wystąpienia obliczeniowe
Architektury Dane Big Data i Duże wystąpienia obliczeniowe to wyspecjalizowane style architektury dla obciążeń odpowiadającym pewnym określonym profilom. Architektura Dane Big Data dzieli bardzo duże zestawy danych na fragmenty, wykonując przetwarzanie równoległe w obrębie całego zestawu na potrzeby analizy i raportowania. Architektura Duże wystąpienia obliczeniowe, nazywana również obliczeniami o wysokiej wydajności (HPC), wykonuje obliczenia równoległe w wielu rdzeniach (tysiącach rdzeni). Domeny zawierają symulacje, modelowanie i renderowanie 3D.
Style architektury jako ograniczenia
Styl architektury nakłada ograniczenia dotyczące projektu, w tym zestawu elementów, które mogą być wyświetlane, i dozwolonych relacji między tymi elementami. Ograniczenia określają „kształt” architektury, ograniczając środowisko wyborów. Gdy architektura spełnia ograniczenia konkretnego stylu, wyłaniają się określone pożądane właściwości.
Na przykład ograniczenia w architekturze mikrousług obejmują:
- Usługa reprezentuje jeden obszar odpowiedzialności.
- Każda usługa jest niezależna od innych.
- Dane są prywatne dla usługi, która jest ich właścicielem. Usługi nie udostępniają danych.
Dzięki przestrzeganiu tych ograniczeń powstaje system, w którym usługi mogą być wdrażane niezależnie, błędy są izolowane, możliwe są częste aktualizacje i łatwo jest wprowadzać nowe technologie do aplikacji.
Każdy styl architektury ma własne kompromisy. Dlatego przed wybraniem dowolnego stylu architektury upewnij się, że rozumiesz podstawowe zasady i ograniczenia tego stylu. W przeciwnym razie możesz uzyskać projekt, który będzie pozornie zgodny ze stylem, ale nie osiągnie potencjału tego stylu. Musisz zwrócić uwagę bardziej na to, dlaczego wybierasz określony styl architektoniczny niż do sposobu jej implementacji. Ważne jest również pragmatyczne podejście. Czasami lepiej poluzować ograniczenia, niż nalegać na czystość architektury.
Wybór odpowiedniego stylu architektury powinien odbywać się najlepiej z konsensusem osób biorących udział w świadomych obciążeniach. Zespół ds. obciążeń powinien najpierw zidentyfikować charakter problemu, który próbuje rozwiązać. Następnie należy zidentyfikować czynniki biznesowe i odpowiednie cechy architektury (znane również jako wymagania niefunkcjonalne), a następnie określić ich priorytety. Jeśli na przykład potrzebują krótszego czasu na rynek, mogą określić priorytety utrzymania, możliwości testowania i niezawodności dzięki możliwościom szybkiego wdrażania. Lub jeśli zespół ds. obciążeń ma ograniczony budżet, może określić priorytety możliwości i prostotę. Wybór i utrzymanie stylu architektury nie jest jednorazowym działaniem, ale ciągłym podejściem: architektura powinna być stale mierzona, weryfikowana i dostrojona w czasie. Zwykle wiąże się to ze znacznymi kosztami zmiany stylu architektury, więc większe nakłady pracy z góry mogą być uzasadnione w przypadku długoterminowej wydajności zespołu i ograniczania ryzyka.
W poniższej tabeli pokazano, w jaki sposób poszczególne style zarządzają zależnościami, oraz typy domen, które najlepiej nadają się dla każdego z nich.
Styl architektury | Zarządzanie zależnościami | Typ domeny |
---|---|---|
N-warstwowa | Warstwy poziome podzielone według podsieci | Tradycyjna domena dla biznesu. Częstotliwość aktualizacji jest niska. |
Proces roboczy kolejki internetowej | Zadania frontonu i zaplecza rozdzielone za pomocą asynchronicznej obsługi komunikatów. | Stosunkowo prosta domena z pewnymi zadaniami intensywnie korzystającymi z zasobów. |
Mikrousługi | Pionowo (funkcjonalnie) rozdzielone usługi, które wywołują się nawzajem za pośrednictwem interfejsów API. | Skomplikowane domeny. Częste aktualizacje. |
Architektura sterowana zdarzeniami | Producent/odbiorca. Niezależny widok dla podsystemu. | Systemy IoT i czasu rzeczywistego. |
Dane big data | Dzielenie bardzo dużego zestawu danych na małe fragmenty. Równoległe przetwarzanie w lokalnych zestawach danych. | Dane wsadowe i analiza danych w czasie rzeczywistym. Analiza predykcyjna z wykorzystaniem uczenia maszynowego. |
Duże obliczenia | Alokowanie danych do tysięcy rdzeni. | Domeny intensywnie wykorzystujące zasoby obliczeniowe, takie jak symulacje. |
Rozważanie wyzwań i korzyści
Ograniczenia mogą również stawać się wyzwaniaami, dlatego ważne jest, aby mieć na uwadze osiągnięcie kompromisu podczas wdrażania każdego z tych stylów. Warto zadać sobie pytanie, czy korzyści ze stylu architektury przeważają nad wyzwaniami dla danej domeny podrzędnej i kontekstu ograniczonego.
Poniżej przedstawiono niektóre rodzaje wyzwań, które należy wziąć pod uwagę podczas wybierania stylu architektury:
Złożoność. Czy złożoność architektury jest usprawiedliwiona w przypadku Twojej domeny? Z drugiej strony, czy styl nie jest zbyt uproszczony dla domeny? Wyzwaniem tutaj jest ryzyko powstania tzw. systemu „big ball of mud”, gdy architektura nie ułatwia prawidłowego zarządzania zależnościami.
Asynchroniczna obsługa komunikatów i spójność ostateczna. Asynchroniczna obsługa komunikatów może służyć do rozdzielania usług i zwiększenia niezawodności (ponieważ komunikaty mogą być ponawiane) oraz skalowalności. Jednak powoduje to też problemy z zapewnieniem ostatecznej spójności i może generować zduplikowane komunikaty.
Komunikacja między usługami. W przypadku rozdzielania aplikacji na osobne usługi istnieje ryzyko, że komunikacja między usługami będzie powodować niedopuszczalne opóźnienia lub przeciążenie sieci (na przykład w architekturze mikrousług).
Możliwości zarządzania. Jak ciężko jest zarządzać aplikacją, monitorowaniem, wdrażaniem aktualizacji itd.?
Powiązane zasoby
- Dziesięć zasad projektowania dla aplikacji platformy Azure
- Tworzenie aplikacji w chmurze firmy Microsoft
- Najlepsze rozwiązania w aplikacjach w chmurze
- Wzorce projektowe chmury
- Testowanie wydajnościowe i antywzorzec dla aplikacji w chmurze
- Tworzenie architektury rozwiązań wielodostępnych na platformie Azure
- Architektura obciążenia o krytycznym znaczeniu na platformie Azure
- Architektura dla startupów