Zagadnienia dotyczące architektur N-warstwowych

Ukończone

Przyjrzeliśmy się architekturze N-warstwowej i wdrożyliśmy przykład architektury trójwarstwowej. Zapoznajmy się z korzyściami i wyzwaniami związanymi z tym stylem architektury oraz najlepszymi rozwiązaniami umożliwiającymi optymalizowanie go pod kątem wydajności i bezpieczeństwa.

Świadczenia

Jedną z zalet tego stylu architektury jest jego prostota. Jest to często używany i dobrze zdefiniowany wzorzec architektury związany z wdrożeniami lokalnymi i w chmurze, który może współpracować z szeroką gamą aplikacji.

Ta architektura nie zależy od platformy i odpowiada aplikacjom wdrażanym w systemie Windows lub Linux. Jak pokazano w naszym przykładowym środowisku, możesz użyć usług PaaS lub IaaS w dowolnej warstwie.

Jeśli aplikacja została podzielona na warstwy, każdą z tych warstw można niezależnie skalować, aktualizować lub uaktualniać. Jeśli żądania dotyczące naszej witryny internetowej wzrosną, możemy dodać więcej serwerów internetowych do obciążenia bez wpływu na inne warstwy. Podobnie jeśli liczba żądań przesyłanych do naszej warstwy danych zwiększy się, możemy skalować bazę danych tak, aby miała większą pojemność do obsługi żądań.

Separacja sieci jest naturalnym produktem ubocznym tej architektury. Ponieważ aplikacja jest oddzielona od warstw, należy odizolować każdą warstwę i zezwalać tylko na wymagany dostęp sieciowy. Warstwa prezentacji może zostać uwidoczniona w Internecie, baza danych może być w pełni zabezpieczona za wieloma warstwami sieci, a nasza aplikacja działa w taki sam sposób. Zabezpieczając dostęp sieciowy między warstwami, zmniejszamy obszar ataków aplikacji i zwiększamy jej bezpieczeństwo.

Wyzwania i kwestie do rozważenia

W przypadku rozdzielania aplikacji na wiele warstw należy unikać warstw środkowych, które wykonują wyłącznie operacje na bazach danych. Każda warstwa powinna dodawać określoną wartość. Dodatkowe warstwy dodają złożoność, czas przetwarzania, opóźnienie i ostatecznie opóźniają użytkownika.

Ponieważ interfejsy API dla każdej domeny na poziomie aplikacji nie są oddzielone od poszczególnych usług, muszą być skalowane razem. Jeśli metoda pojedynczej aplikacji wymaga większej mocy obliczeniowej lub musi obsługiwać więcej żądań niż inne, warstwę aplikacji należy skalować w poziomie jako całość, aby zarządzać obciążeniem, a nie poszczególnymi usługami.

W niektórych przypadkach można opracować aplikację jako architekturę N-warstwową, ale nadal wykonywać wdrożenia jako całość. Po pełnym oddzieleniu poszczególnych warstw należy wdrożyć każdą z nich niezależnie. Pełne rozdzielenie obejmuje usunięcie współużytkowanych zależności i większe poleganie na wywołaniach interfejsu API między warstwami. Po poprawnym zakończeniu gwarantuje to, że wdrożenia aplikacji są elastyczne.

Aplikacje w architekturze N-warstwowej często są wdrażane na maszynach wirtualnych. Jest to dobry pierwszy krok, ale modyfikowanie aplikacji w celu korzystania z usług PaaS zapewnia szereg korzyści w zakresie zabezpieczeń, skalowalności i administracji. Ta ewolucja jest często pomijana, a architektury N-warstwowe pozostają rezydentami maszyn wirtualnych.

N-warstwowy to klasyczny styl architektury, ale w wielu scenariuszach jest zastępowany przez inne nowoczesne wzorce projektowe, takie jak architektura mikrousług. Często warto poświęcić trochę czasu, aby ocenić inne architektury, aby sprawdzić, czy są one lepiej dopasowane do aplikacji.

Najlepsze rozwiązania dla architektur N-warstwowych

Istnieje kilka rzeczy, które należy zrobić, aby upewnić się, że architektura N-warstwowa działa z najlepszą wydajnością. Na poniższym diagramie przedstawiono wizualnie, jak można wprowadzić ulepszenia architektury N-warstwowej.

Visualization of N-tier architecture.

Optymalizowanie wydajności

Przyjrzyjmy się sposobom optymalizacji architektury N-warstwowej w zakresie wydajności i zabezpieczeń.

Skalowanie automatyczne

Dzięki aplikacji podzielonej na warstwy możemy użyć funkcji w chmurze, takich jak skalowanie automatyczne, aby dostosować się do obciążenia systemu. Gdy zwiększa się liczba użytkowników lub żądań, należy użyć skalowania automatycznego w wielu warstwach, aby dodać więcej zasobów w celu obsługi żądań. Gdy zmniejsza się liczba żądań, automatyczne skalowanie redukuje zasoby obliczeniowe, a także koszty. Skalowanie automatyczne ułatwia zapewnienie, że użytkownicy mają najlepsze środowisko pracy i że koszty pozostają niskie. Zestawy skalowania maszyn wirtualnych platformy Azure mogą być używane na potrzeby obciążeń opartych na maszynach wirtualnych, a wiele usług PaaS, takich jak usługa aplikacja systemu Azure, ma wbudowane funkcje skalowania automatycznego.

Równoważenie obciążenia

W przypadku skalowania aplikacji za pomocą funkcji skalowania automatycznego użycie równoważenia obciążenia staje się niezbędnym elementem architektury. Dzięki równoważeniu obciążenia w miarę dodawania większej liczby zasobów obliczeniowych do warstwy są one dodawane do dystrybucji modułu równoważenia obciążenia, aby korzystać z dodatkowej mocy obliczeniowej. Z drugiej strony, gdy system ulegnie awarii, zostanie usunięty z obciążenia, aby zminimalizować wpływ użytkownika na niską wydajność lub błędne żądania. Gwarantuje to, że żądania użytkowników są przekazywane do systemów w dobrej kondycji. Azure Load Balancer to wbudowana funkcja oferująca możliwości sieciowe, natomiast usługa Application Gateway oferuje rozwiązanie do równoważenia obciążenia protokołu HTTP z większą liczbą funkcji.

Obsługa wiadomości

Korzystanie z usługi obsługi komunikatów między warstwami ma pozytywny wpływ na wydajność, zwłaszcza w przypadku żądań, które są asynchroniczne w naturze. Usługa umieszcza komunikat w kolejce, gdzie pozostaje do momentu przetworzenia, co spowoduje zresetowanie wpływu obciążenia podrzędnego. Jeśli wystąpi awaria systemu, usługa obsługi komunikatów gwarantuje, że komunikat jest nadal obsługiwany. Komunikat pozostaje w kolejce i jest przetwarzany po powrocie systemu do trybu online. W zależności od wymagań platforma Azure oferuje kilka rozwiązań do obsługi wiadomości do wyboru. Usługa Azure Service Bus, kolejki usługi Azure Storage i centra Azure Event Hubs to niektóre rozwiązania, które warto wziąć pod uwagę w przypadku wybierania usługi do obsługi wiadomości.

Buforowanie danych

Pamięci podręcznej należy używać w przypadku często używanych danych z małą szybkością zmian lub danych, które nie wymagają długoterminowej trwałości, takich jak stan sesji. Buforowanie systemów odbywa się między warstwami i skraca czas pobierania danych tego typu. Azure Cache for Redis to usługa PaaS, która jest dobrym rozwiązaniem w przypadku tego scenariusza.

Optymalizowanie zabezpieczeń

Optymalizacja aplikacji pod kątem zabezpieczeń jest często zadaniem, które nigdy nie jest wykonywane. Mimo że aplikacja jest oddzielona od warstw, nadal muszą istnieć dobrze zaplanowane praktyki zabezpieczeń związane z architekturą. Tym więcej warstw dodajesz, tym więcej trzeba zabezpieczyć, a tym bardziej wprowadzasz złożoność systemu. Istnieje kilka czynności, które należy wykonać w celu zapewnienia, że architektura gwarantuje bezpieczne środowisko uruchamiania aplikacji.

Izolacja sieciowa

Podczas uruchamiania architektury N-warstwowej na maszynach wirtualnych upewnij się, że każda warstwa znajduje się we własnej podsieci. Ta podsieć działa jako granica zabezpieczeń, umożliwiając izolowanie łączności za pośrednictwem list kontroli dostępu do sieci. Podsieć ułatwia również zarządzanie, zapewniając, że nowe systemy w podsieci otrzymują te same reguły. Na platformie Azure odbywa się to natywnie z sieciowymi grupami zabezpieczeń. Podobne zagadnienia należy wziąć pod uwagę w przypadku usług PaaS, ale możliwości integracji sieci różnią w zależności od usługi i należy je oceniać osobno. Najlepsze rozwiązanie to zapewnienie, że każda warstwa może komunikować się tylko z następną warstwą poniżej. Warstwa prezentacji powinna móc komunikować się wyłącznie z warstwą aplikacji, a warstwa aplikacji powinna móc komunikować się wyłącznie z warstwą danych. Zminimalizowanie takiej łączności zapewnia warstwowe podejście do zabezpieczeń sieci i poprawia ogólny stan zabezpieczeń architektury.

Zapora aplikacji internetowej

Dzięki izolacji zabezpieczeń między podsieciami chcesz mieć pewność, że publicznie uwidoczniony fronton jest bezpieczny i zezwala tylko na dostęp do potrzebnych informacji. Warstwę prezentacji należy uwidocznić tylko dla przychodzącego ruchu internetowego. Technologia zapory aplikacji internetowej (WAF) przed warstwą prezentacji zwiększa bezpieczeństwo w tej warstwie. Zapory aplikacji internetowych sprawdzają ruch pod kątem złośliwych działań, zapewniają, że komunikacji jest szyfrowana, oraz zgłaszają alert w przypadku jakiegokolwiek nietypowego działania. Na platformie Azure usługa Application Gateway to moduł równoważenia obciążenia HTTP, który ma wbudowaną zaporę aplikacji internetowej, którą można włączyć.

Sprawdź swoją wiedzę

1.

Która z poniższych czynności może poprawić wydajność aplikacji w architekturze N-warstwowej, zachowując jednocześnie zoptymalizowane koszty?

2.

Które z poniższych czynności mogą poprawić bezpieczeństwo aplikacji?