Architektura N-warstwowa dzieli aplikację na warstwy logiczne i warstwy fizyczne.
Warstwy to sposób oddzielenia obowiązków i zarządzania zależnościami. Każda warstwa ma określoną odpowiedzialność. Wyższa warstwa może korzystać z usług w niższej warstwie, ale nie w drugą stronę.
Warstwy są fizycznie oddzielone, uruchomione na oddzielnych maszynach. W umowie warstwa może mieć swoje modele komunikacji ścisłe lub zrelaksowane. W ścisłym modelu żądanie musi przechodzić przez sąsiadujące warstwy, po jednym po drugim i nie może pominąć żadnej warstwy między. Na przykład z zapory aplikacji internetowej do warstwy internetowej, a następnie do warstwy środkowej 1 itd. Natomiast w przypadku złagodzonego podejścia żądanie może pominąć niektóre warstwy, jeśli jest to konieczne. Ścisłe podejście ma większe opóźnienie i obciążenie, a podejście zrelaksowane ma więcej sprzężeń, a następnie trudniej jest zmienić. System może korzystać z podejścia hybrydowego: w razie potrzeby zarówno złagodzone, jak i ścisłe warstwy.
Warstwa może wywoływać inną warstwę bezpośrednio lub używać wzorców asynchronicznych obsługi komunikatów za pośrednictwem kolejki komunikatów. Mimo że każda warstwa może być hostowana we własnej warstwie, nie jest to wymagane. Kilka warstw może być hostowanych w tej samej warstwie. Fizyczne oddzielenie warstw zwiększa skalowalność i odporność, ale także zwiększa opóźnienie z dodatkowej komunikacji sieciowej.
Tradycyjna aplikacja trójwarstwowa ma warstwę prezentacji, warstwę środkową i warstwę bazy danych. Warstwa środkowa jest opcjonalna. Bardziej złożone aplikacje mogą mieć więcej niż trzy warstwy. Na powyższym diagramie przedstawiono aplikację z dwiema warstwami środkowymi, hermetyzując różne obszary funkcjonalności.
Aplikacja N-warstwowa może mieć architekturę warstwy zamkniętej lub architekturę warstwy otwartej :
- W architekturze zamkniętej warstwy warstwa może wywoływać tylko następną warstwę natychmiast w dół.
- W architekturze warstwy otwartej warstwa może wywołać dowolną z poniższych warstw.
Zamknięta architektura warstwy ogranicza zależności między warstwami. Jednak może to spowodować niepotrzebny ruch sieciowy, jeśli jedna warstwa po prostu przekazuje żądania do następnej warstwy.
Kiedy należy używać tej architektury
Architektury N-warstwowe są zwykle implementowane jako aplikacje typu infrastruktura jako usługa (IaaS), z każdą warstwą działającą w osobnym zestawie maszyn wirtualnych. Jednak aplikacja N-warstwowa nie musi być czystą usługą IaaS. Często korzystne jest korzystanie z usług zarządzanych w niektórych częściach architektury, szczególnie buforowanie, obsługa komunikatów i magazyn danych.
Rozważ architekturę N-warstwową dla:
- Proste aplikacje internetowe.
- Dobry punkt wyjścia, gdy wymagania dotyczące architektury nie są jeszcze jasne.
- Migrowanie aplikacji lokalnej na platformę Azure z minimalną refaktoryzację.
- Ujednolicony rozwój aplikacji lokalnych i aplikacji w chmurze.
Architektury N-warstwowe są bardzo powszechne w tradycyjnych aplikacjach lokalnych, więc jest to naturalne rozwiązanie do migrowania istniejących obciążeń na platformę Azure.
Korzyści
- Przenośność między chmurą i środowiskiem lokalnym oraz między platformami w chmurze.
- Mniej uczenia się dla większości deweloperów.
- Stosunkowo niski koszt dzięki niewzłodnianiu architektury rozwiązania
- Naturalna ewolucja tradycyjnego modelu aplikacji.
- Otwórz środowisko heterogeniczne (Windows/Linux)
Wyzwania
- Łatwo jest korzystać z warstwy środkowej, która po prostu wykonuje operacje CRUD w bazie danych, dodając dodatkowe opóźnienie bez wykonywania żadnej przydatnej pracy.
- Projekt monolityczny uniemożliwia niezależne wdrażanie funkcji.
- Zarządzanie aplikacją IaaS jest bardziej pracy niż aplikacja, która korzysta tylko z usług zarządzanych.
- Zarządzanie zabezpieczeniami sieci w dużym systemie może być trudne.
- Przepływy użytkowników i danych zwykle obejmują wiele warstw, co zwiększa złożoność problemów, takich jak testowanie i obserwowanie.
Najlepsze rozwiązania
- Użyj skalowania automatycznego, aby obsłużyć zmiany obciążenia. Zobacz Autoskalowanie najlepszych rozwiązań.
- Użyj asynchronicznej obsługi komunikatów, aby rozdzielić warstwy.
- Buforuj dane semistatyczne. Zobacz Caching best practices (Najlepsze rozwiązania dotyczące buforowania).
- Skonfiguruj warstwę bazy danych pod kątem wysokiej dostępności przy użyciu rozwiązania, takiego jak zawsze włączone grupy dostępności programu SQL Server.
- Umieść zaporę aplikacji internetowej (WAF) między frontonem a Internetem.
- Umieść każdą warstwę we własnej podsieci i użyj podsieci jako granicy zabezpieczeń.
- Ogranicz dostęp do warstwy danych, zezwalając na żądania tylko z warstw środkowych.
Architektura N-warstwowa na maszynach wirtualnych
W tej sekcji opisano zalecaną architekturę N-warstwową działającą na maszynach wirtualnych.
Każda warstwa składa się z co najmniej dwóch maszyn wirtualnych umieszczonych w zestawie dostępności lub zestawie skalowania maszyn wirtualnych. Wiele maszyn wirtualnych zapewnia odporność na wypadek awarii jednej maszyny wirtualnej. Moduły równoważenia obciążenia służą do dystrybuowania żądań między maszynami wirtualnymi w warstwie. Warstwę można skalować w poziomie, dodając więcej maszyn wirtualnych do puli.
Każda warstwa jest również umieszczana wewnątrz własnej podsieci, co oznacza, że ich wewnętrzne adresy IP należą do tego samego zakresu adresów. Ułatwia to stosowanie reguł sieciowej grupy zabezpieczeń i tabel tras do poszczególnych warstw.
Warstwy internetowe i biznesowe są bezstanowe. Każda maszyna wirtualna może obsłużyć dowolne żądanie dla tej warstwy. Warstwa danych powinna składać się z replikowanej bazy danych. W przypadku systemu Windows zalecamy używanie zawsze włączonych grup dostępności programu SQL Server w celu zapewnienia wysokiej dostępności. W przypadku systemu Linux wybierz bazę danych, która obsługuje replikację, taką jak Apache Cassandra.
Sieciowe grupy zabezpieczeń ograniczają dostęp do każdej warstwy. Na przykład warstwa bazy danych zezwala tylko na dostęp z warstwy biznesowej.
Nuta
Warstwa oznaczona etykietą "Warstwa biznesowa" na naszym diagramie odniesienia jest pseudonimem dla warstwy logiki biznesowej. Podobnie nazywamy warstwę prezentacji warstwą "Warstwa internetowa". W naszym przykładzie jest to aplikacja internetowa, chociaż architektury wielowarstwowe mogą być również używane dla innych topologii (takich jak aplikacje klasyczne). Nazwij warstwy, które najlepiej sprawdzają się dla zespołu, aby komunikować intencję tej warstwy logicznej i/lub fizycznej w aplikacji — można nawet wyrazić, że nazewnictwo w zasobach, które wybierzesz do reprezentowania tej warstwy (np. vmss-appName-business-layer).
Dodatkowe zagadnienia
Architektury N-warstwowe nie są ograniczone do trzech warstw. W przypadku bardziej złożonych aplikacji często ma się więcej warstw. W takim przypadku rozważ użycie routingu warstwy 7 w celu kierowania żądań do określonej warstwy.
Warstwy są granicą skalowalności, niezawodności i zabezpieczeń. Rozważ posiadanie oddzielnych warstw dla usług z różnymi wymaganiami w tych obszarach.
Użyj zestawów skalowania maszyn wirtualnych do skalowania automatycznego.
Poszukaj miejsc w architekturze, w których można używać usługi zarządzanej bez znaczącej refaktoryzacji. W szczególności przyjrzyj się buforowaniu, komunikatom, magazynowi i bazom danych.
W celu zwiększenia bezpieczeństwa umieść sieć DMZ przed aplikacją. Strefa DMZ obejmuje wirtualne urządzenia sieciowe (WUS), które implementują funkcje zabezpieczeń, takie jak zapory i inspekcja pakietów. Aby uzyskać więcej informacji, zobacz Network DMZ reference architecture.
W celu zapewnienia wysokiej dostępności umieść co najmniej dwa urządzenia WUS w zestawie dostępności z zewnętrznym modułem równoważenia obciążenia w celu dystrybucji żądań internetowych między wystąpieniami. Aby uzyskać więcej informacji, zobacz Wdrażanie wirtualnych urządzeń sieciowych o wysokiej dostępności.
Nie zezwalaj na bezpośredni dostęp RDP lub SSH do maszyn wirtualnych z uruchomionym kodem aplikacji. Zamiast tego operatory powinny logować się do serwera przesiadkowego, nazywanego również hostem bastionu. Jest to maszyna wirtualna w sieci używanej przez administratorów do łączenia się z innymi maszynami wirtualnymi. Serwer przesiadkowy ma sieciową grupę zabezpieczeń, która zezwala na protokół RDP lub SSH tylko z zatwierdzonych publicznych adresów IP.
Sieć wirtualną platformy Azure można rozszerzyć na sieć lokalną przy użyciu wirtualnej sieci prywatnej (VPN) typu lokacja-lokacja lub usługi Azure ExpressRoute. Aby uzyskać więcej informacji, zobacz Architektura referencyjna sieci hybrydowej.
Jeśli twoja organizacja używa usługi Active Directory do zarządzania tożsamością, możesz rozszerzyć środowisko usługi Active Directory na sieć wirtualną platformy Azure. Aby uzyskać więcej informacji, zobacz Architektura referencyjna zarządzania tożsamościami.
Jeśli potrzebujesz wyższej dostępności niż zapewnia umowa SLA platformy Azure dla maszyn wirtualnych, zreplikuj aplikację w dwóch regionach i użyj usługi Azure Traffic Manager do pracy w trybie failover. Aby uzyskać więcej informacji, zobacz Uruchamianie maszyn wirtualnych z systemem Linux w wielu regionach.
Powiązane zasoby
- aplikacji N-warstwowej przy użyciu usługi Apache Cassandra
- [Aplikacja N-warstwowa systemu Windows na platformie Azure z programem SQL Server][n-tier-windows-SQL]
- module Microsoft Learn: przewodnik po stylu architektury N-warstwowej
- azure bastion
- Więcej informacji na temat obsługi komunikatów w stylu architektury N-warstwowej na platformie Azure