Eine N-Ebene-Architektur unterteilt eine Anwendung in logische Ebenen und physischen Ebenen.
Ebenen sind eine Möglichkeit, Zuständigkeiten zu trennen und Abhängigkeiten zu verwalten. Jede Ebene hat eine bestimmte Verantwortung. Eine höhere Ebene kann Dienste in einer niedrigeren Ebene verwenden, aber nicht umgekehrt.
Ebenen werden physisch getrennt, die auf separaten Computern ausgeführt werden. Vertraglich kann die Stufe ihre Kommunikationsmodelle streng oder entspannt haben. Im strikten Modell muss eine Anforderung benachbarte Ebenen durchlaufen, eine von einer ebene, und zwischen diesen kann keine Ebene dazwischen übersprungen werden. Beispielsweise von der Webanwendungsfirewall zur Webebene, dann zur mittleren Ebene 1 usw. Im Gegensatz dazu kann die Anforderung im entspannten Ansatz einige Ebenen überspringen, wenn dies erforderlich ist. Der strenge Ansatz hat mehr Latenz und Mehraufwand, und der entspannte Ansatz hat mehr Kopplungen und anschließend ist es schwieriger zu ändern. Ein System kann einen Hybridansatz verwenden: bei Bedarf sowohl entspannte als auch strenge Stufen.
Eine Ebene kann direkt eine andere Ebene aufrufen oder asynchronen Messagingmuster über eine Nachrichtenwarteschlange verwenden. Obwohl jede Ebene möglicherweise in einer eigenen Ebene gehostet wird, ist dies nicht erforderlich. Mehrere Ebenen können auf derselben Ebene gehostet werden. Durch die physische Trennung der Ebenen wird die Skalierbarkeit und Resilienz verbessert, aber auch die Latenz durch die zusätzliche Netzwerkkommunikation erhöht.
Eine herkömmliche dreistufige Anwendung verfügt über eine Präsentationsleiste, eine mittlere Ebene und eine Datenbankebene. Die mittlere Ebene ist optional. Komplexere Anwendungen können mehr als drei Ebenen aufweisen. Das obige Diagramm zeigt eine Anwendung mit zwei mittleren Ebenen, die verschiedene Funktionalitätsbereiche kapseln.
Eine N-Ebene-Anwendung kann eine geschlossene Layerarchitektur oder eine offene Layerarchitekturhaben:
- In einer geschlossenen Layerarchitektur kann eine Ebene nur die nächste Ebene sofort nach unten aufrufen.
- In einer offenen Layerarchitektur kann eine Ebene jede der darunter liegenden Ebenen aufrufen.
Eine geschlossene Layerarchitektur begrenzt die Abhängigkeiten zwischen Ebenen. Es kann jedoch unnötigen Netzwerkdatenverkehr erzeugen, wenn eine Ebene einfach Anforderungen an die nächste Ebene übergibt.
Wann diese Architektur verwendet werden soll
N-Tier-Architekturen werden in der Regel als IaaS-Anwendungen (Infrastructure-as-Service) implementiert, wobei jede Ebene auf einer separaten Gruppe von VMs ausgeführt wird. Eine N-Tier-Anwendung muss jedoch nicht reine IaaS sein. Häufig ist es vorteilhaft, verwaltete Dienste für einige Teile der Architektur zu verwenden, insbesondere zwischenspeichern, Messaging und Datenspeicher.
Berücksichtigen Sie eine N-Ebene-Architektur für:
- Einfache Webanwendungen.
- Ein guter Ausgangspunkt, wenn architekturliche Anforderungen noch nicht klar sind.
- Migrieren einer lokalen Anwendung zu Azure mit minimaler Umgestaltung.
- Einheitliche Entwicklung lokaler und Cloudanwendungen.
N-Tier-Architekturen sind in herkömmlichen lokalen Anwendungen sehr üblich, daher ist es eine natürliche Lösung für die Migration vorhandener Workloads zu Azure.
Nützt
- Portabilität zwischen Cloud und lokal und zwischen Cloudplattformen.
- Weniger Lernkurve für die meisten Entwickler.
- Relativ niedrige Kosten, indem die Lösung nicht neu erstellt wird
- Natürliche Weiterentwicklung aus dem herkömmlichen Anwendungsmodell.
- Offen für heterogene Umgebung (Windows/Linux)
Herausforderungen
- Es ist einfach, mit einer mittleren Ebene zu enden, die nur CRUD-Vorgänge in der Datenbank ausführt und zusätzliche Latenz hinzufügt, ohne eine nützliche Arbeit auszuführen.
- Das monolithische Design verhindert die unabhängige Bereitstellung von Features.
- Das Verwalten einer IaaS-Anwendung ist mehr Arbeit als eine Anwendung, die nur verwaltete Dienste verwendet.
- Es kann schwierig sein, die Netzwerksicherheit in einem großen System zu verwalten.
- Benutzer- und Datenflüsse erstrecken sich in der Regel über mehrere Ebenen und fügen Komplexität zu Bedenken wie Tests und Observability hinzu.
Bewährte Methoden
- Verwenden Sie die automatische Skalierung, um Änderungen beim Laden zu behandeln. Weitere Informationen finden Sie unter bewährten Methoden für die automatische Skalierung.
- Verwenden Sie asynchronen Messaging-, um Ebenen zu entkoppeln.
- Zwischenspeichern semistatischer Daten. Siehe bewährte Methoden zum Zwischenspeichern.
- Konfigurieren Sie die Datenbankebene für hohe Verfügbarkeit mithilfe einer Lösung wie SQL Server AlwaysOn-Verfügbarkeitsgruppen.
- Platzieren Sie eine Webanwendungsfirewall (WAF) zwischen dem Front-End und dem Internet.
- Platzieren Sie jede Ebene in ihrem eigenen Subnetz, und verwenden Sie Subnetze als Sicherheitsgrenze.
- Beschränken Sie den Zugriff auf die Datenebene, indem Sie Anforderungen nur von der mittleren Ebene(n) zulassen.
N-Tier-Architektur auf virtuellen Computern
In diesem Abschnitt wird eine empfohlene N-Tier-Architektur beschrieben, die auf virtuellen Computern ausgeführt wird.
Jede Ebene besteht aus zwei oder mehr virtuellen Computern, die in einem Verfügbarkeitssatz oder einem Skalierungssatz für virtuelle Computer platziert werden. Mehrere VMs bieten Resilienz für den Fall, dass ein virtueller Computer fehlschlägt. Lastenausgleichsgeräte werden verwendet, um Anforderungen über die virtuellen Computer in einer Ebene zu verteilen. Eine Ebene kann horizontal skaliert werden, indem dem Pool weitere virtuelle Computer hinzugefügt werden.
Jede Ebene wird auch in einem eigenen Subnetz platziert, was bedeutet, dass ihre internen IP-Adressen innerhalb desselben Adressbereichs liegen. Dies erleichtert das Anwenden von Regeln für Netzwerksicherheitsgruppen und das Weiterleiten von Tabellen auf einzelne Ebenen.
Die Web- und Geschäftsebenen sind zustandslos. Jeder virtuelle Computer kann jede Anforderung für diese Ebene verarbeiten. Die Datenebene sollte aus einer replizierten Datenbank bestehen. Für Windows empfehlen wir SQL Server unter Verwendung von AlwaysOn-Verfügbarkeitsgruppen für hohe Verfügbarkeit. Wählen Sie für Linux eine Datenbank aus, die die Replikation unterstützt, z. B. Apache Cassandra.
Netzwerksicherheitsgruppen beschränken den Zugriff auf jede Ebene. Beispielsweise ermöglicht die Datenbankebene nur den Zugriff von der Geschäftsebene.
Anmerkung
Die Ebene mit der Bezeichnung "Geschäftsebene" in unserem Referenzdiagramm ist ein Moniker für die Geschäftslogikebene. Ebenso wird die Präsentationsebene auch als "Webebene" bezeichnet. In unserem Beispiel ist dies eine Webanwendung, obwohl mehrstufige Architekturen auch für andere Topologien (z. B. Desktop-Apps) verwendet werden können. Benennen Sie Ihre Ebenen, was am besten für Ihr Team geeignet ist, um die Absicht dieser logischen und/oder physischen Ebene in Ihrer Anwendung zu kommunizieren . Sie könnten sogar die Benennung in Ressourcen ausdrücken, die Sie für die Darstellung dieser Ebene auswählen (z. B. vmss-appName-business-layer).
Weitere Überlegungen
N-Ebenen-Architekturen sind nicht auf drei Ebenen beschränkt. Für komplexere Anwendungen ist es üblich, mehr Ebenen zu haben. In diesem Fall sollten Sie das Layer-7-Routing verwenden, um Anforderungen an eine bestimmte Ebene weiterzuleiten.
Ebenen sind die Grenzen der Skalierbarkeit, Zuverlässigkeit und Sicherheit. Erwägen Sie, separate Ebenen für Dienste mit unterschiedlichen Anforderungen in diesen Bereichen zu haben.
Verwenden Sie Skalierungssätze für virtuelle Computer für automatische Skalierung.
Suchen Sie nach Orten in der Architektur, an denen Sie einen verwalteten Dienst ohne erhebliche Umgestaltung verwenden können. Sehen Sie sich insbesondere Zwischenspeicherung, Messaging, Speicher und Datenbanken an.
Um höhere Sicherheit zu gewährleisten, platzieren Sie ein Netzwerk-DMZ vor der Anwendung. Das DMZ umfasst virtuelle Netzwerkgeräte (VIRTUAL Appliances, NVAs), die Sicherheitsfunktionen wie Firewalls und Paketüberprüfung implementieren. Weitere Informationen finden Sie unter Netzwerk-DMZ-Referenzarchitektur.
Platzieren Sie für hohe Verfügbarkeit zwei oder mehr NVAs in einem Verfügbarkeitssatz mit einem externen Lastenausgleich, um Internetanforderungen über die Instanzen hinweg zu verteilen. Weitere Informationen finden Sie unter Bereitstellen von hochverwendbarten virtuellen Netzwerkgeräten.
Lassen Sie keinen direkten RDP- oder SSH-Zugriff auf VMs zu, die Anwendungscode ausführen. Stattdessen sollten sich Operatoren bei einem Jumpbox anmelden, auch als Bastionhost bezeichnet. Dies ist ein virtueller Computer im Netzwerk, den Administratoren zum Herstellen einer Verbindung mit anderen virtuellen Computern verwenden. Der Jumpbox verfügt über eine Netzwerksicherheitsgruppe, die RDP oder SSH nur von genehmigten öffentlichen IP-Adressen zulässt.
Sie können das virtuelle Azure-Netzwerk über ein standortbasiertes privates Netzwerk (VPN) oder Azure ExpressRoute auf Ihr lokales Netzwerk erweitern. Weitere Informationen finden Sie unter Hybrid-Netzwerkreferenzarchitektur.
Wenn Ihre Organisation Active Directory zum Verwalten der Identität verwendet, sollten Sie Ihre Active Directory-Umgebung auf das Azure VNet erweitern. Weitere Informationen finden Sie unter Identitätsverwaltungsreferenzarchitektur.
Wenn Sie eine höhere Verfügbarkeit benötigen als die azure SLA für VMs, replizieren Sie die Anwendung in zwei Regionen, und verwenden Sie Azure Traffic Manager für Failover. Weitere Informationen finden Sie unter Ausführen von Linux-VMs in mehreren Regionen.
Verwandte Ressourcen
- N-Tier-Anwendung mit Apache Cassandra
- [Windows N-Tier-Anwendung in Azure mit SQL Server][n-tier-windows-SQL]
- Microsoft Learn-Modul: Tour durch den N-Tier-Architekturstil
- Azure Bastion
- Weitere Informationen zum Messaging in einem N-Tier-Architekturstil in Azure