Architekturstil für n-schichtige AnwendungenN-tier architecture style

Eine n-schichtige Architektur unterteilt eine Anwendung in logische Ebenen und physische Schichten.An N-tier architecture divides an application into logical layers and physical tiers.

Logisches Diagramm einer n-schichtigen Architektur

Ebenen sind eine Möglichkeit, Zuständigkeiten zu trennen und Abhängigkeiten zu verwalten.Layers are a way to separate responsibilities and manage dependencies. Jede Ebene ist mit einer bestimmten Zuständigkeit verknüpft.Each layer has a specific responsibility. Eine höhere Ebene kann Dienste in einer niedrigeren Ebene verwenden, nicht jedoch umgekehrt.A higher layer can use services in a lower layer, but not the other way around.

Schichten sind physisch getrennt und befinden sich auf verschiedenen Computern.Tiers are physically separated, running on separate machines. Eine Schicht kann eine andere Schicht direkt aufrufen oder asynchrones Messaging verwenden (Nachrichtenwarteschlange).A tier can call to another tier directly, or use asynchronous messaging (message queue). Jede Ebene kann auf einer eigenen Schicht gehostet werden, dies ist jedoch nicht erforderlich.Although each layer might be hosted in its own tier, that's not required. Verschiedene Ebenen können auf der gleichen Schicht gehostet werden.Several layers might be hosted on the same tier. Die physische Trennung der Schichten verbessert die Skalierbarkeit und Resilienz, erhöht jedoch aufgrund der zusätzlichen Netzwerkkommunikation die Latenz.Physically separating the tiers improves scalability and resiliency, but also adds latency from the additional network communication.

Eine herkömmliche dreischichtige Anwendung besteht aus einer Präsentationsschicht, einer Logikschicht und einer Datenschicht.A traditional three-tier application has a presentation tier, a middle tier, and a database tier. Die Logikschicht ist optional.The middle tier is optional. Komplexere Anwendungen können mehr als drei Schichten aufweisen.More complex applications can have more than three tiers. Das Diagramm oben zeigt eine Anwendung mit zwei Logikschichten, die verschiedene Funktionalitätsbereiche kapseln.The diagram above shows an application with two middle tiers, encapsulating different areas of functionality.

Eine n-schichtige Anwendung kann auf einer Architektur mit geschlossenen Ebenen oder einer Architektur mit offenen Ebenen basieren:An N-tier application can have a closed layer architecture or an open layer architecture:

  • In einer Architektur mit geschlossenen Ebenen kann eine Ebene nur die direkt darunter liegende Ebene aufrufen.In a closed layer architecture, a layer can only call the next layer immediately down.
  • In einer Architektur mit offenen Ebenen kann eine Ebene jede darunter liegende Ebene aufrufen.In an open layer architecture, a layer can call any of the layers below it.

Eine Architektur mit geschlossenen Ebenen begrenzt die Abhängigkeiten zwischen den Ebenen.A closed layer architecture limits the dependencies between layers. Sie kann jedoch unnötigen Netzwerkdatenverkehr verursachen, wenn eine Ebene Anforderungen einfach nur an die nächste Ebene übergibt.However, it might create unnecessary network traffic, if one layer simply passes requests along to the next layer.

Einsatzmöglichkeiten für diese ArchitekturWhen to use this architecture

N-schichtige Architekturen werden in der Regel als IaaS-Anwendungen (Infrastructure-as-a-Service) implementiert, und jede Schicht wird auf einem separaten Satz virtueller Computer ausgeführt.N-tier architectures are typically implemented as infrastructure-as-service (IaaS) applications, with each tier running on a separate set of VMs. Eine n-schichtige Anwendung muss jedoch nicht ausschließlich auf IaaS basieren.However, an N-tier application doesn't need to be pure IaaS. Häufig ist es von Vorteil, für einige Teile der Architektur verwaltete Dienste zu verwenden – dies gilt insbesondere für Caching, Messaging und Datenspeicherung.Often, it's advantageous to use managed services for some parts of the architecture, particularly caching, messaging, and data storage.

Eine n-schichtige Architektur eignet sich gut für folgende Zwecke:Consider an N-tier architecture for:

  • Einfache WebanwendungenSimple web applications.
  • Migrieren einer lokalen Anwendung zu Azure mit minimalem UmgestaltungsaufwandMigrating an on-premises application to Azure with minimal refactoring.
  • Einheitliche Entwicklung lokaler und cloudbasierter AnwendungenUnified development of on-premises and cloud applications.

N-schichtige Architekturen sind bei herkömmlichen lokalen Anwendungen sehr häufig anzutreffen und eignen sich daher ideal für die Migration vorhandener Workloads zu Azure.N-tier architectures are very common in traditional on-premises applications, so it's a natural fit for migrating existing workloads to Azure.

VorteileBenefits

  • Portierbarkeit zwischen cloudbasierten und lokalen Umgebungen sowie zwischen CloudplattformenPortability between cloud and on-premises, and between cloud platforms.
  • Geringer Lernaufwand für die meisten EntwicklerLess learning curve for most developers.
  • Natürliche Weiterentwicklung des herkömmlichen AnwendungsmodellsNatural evolution from the traditional application model.
  • Offen für heterogene Umgebungen (Windows/Linux)Open to heterogeneous environment (Windows/Linux)

HerausforderungenChallenges

  • Es passiert nur allzu leicht, dass eine Logikschicht verwendet wird, die nur CRUD-Vorgänge in der Datenbank ausführt und damit die Latenz erhöht, ohne wirklich nützliche Aufgaben zu erledigen.It's easy to end up with a middle tier that just does CRUD operations on the database, adding extra latency without doing any useful work.
  • Das monolithische Design verhindert die unabhängige Bereitstellung von Features.Monolithic design prevents independent deployment of features.
  • Die Verwaltung einer IaaS-Anwendung verursacht mehr Arbeit als eine Anwendung, die nur verwaltete Dienste verwendet.Managing an IaaS application is more work than an application that uses only managed services.
  • Die Verwaltung der Netzwerksicherheit in einem umfangreichen System kann schwierig sein.It can be difficult to manage network security in a large system.

Bewährte MethodenBest practices

  • Verwenden Sie die automatische Skalierung, um Änderungen der Last zu verarbeiten.Use autoscaling to handle changes in load. Weitere Informationen finden Sie unter Bewährte Methoden bei der automatischen Skalierung.See Autoscaling best practices.
  • Verwenden Sie asynchrones Messaging, um Schichten zu entkoppeln.Use asynchronous messaging to decouple tiers.
  • Speichern Sie halbstatische Daten zwischen.Cache semistatic data. Weitere Informationen finden Sie unter Bewährte Methoden beim Caching.See Caching best practices.
  • Konfigurieren Sie die Datenbankschicht mithilfe einer Lösung wie SQL Server-Always On-Verfügbarkeitsgruppen für die Hochverfügbarkeit.Configure the database tier for high availability, using a solution such as SQL Server Always On availability groups.
  • Platzieren Sie eine Web Application Firewall (WAF) zwischen Front-End und Internet.Place a web application firewall (WAF) between the front end and the Internet.
  • Platzieren Sie jede Schicht in einem eigenen Subnetz, und verwenden Sie das Subnetz als Sicherheitsgrenze.Place each tier in its own subnet, and use subnets as a security boundary.
  • Beschränken Sie den Zugriff auf die Datenschicht, indem Sie Anforderungen nur aus den Logikschichten zulassen.Restrict access to the data tier, by allowing requests only from the middle tier(s).

N-schichtige Architektur auf virtuellen ComputernN-tier architecture on virtual machines

In diesem Abschnitt wird eine empfohlene n-schichtige Architektur beschrieben, die auf virtuellen Computern ausgeführt wird.This section describes a recommended N-tier architecture running on VMs.

Physisches Diagramm einer n-schichtigen Architektur

Jede Schicht besteht aus mindestens zwei virtuellen Computern, die sich in einer Verfügbarkeitsgruppe oder einer VM-Skalierungsgruppe befinden.Each tier consists of two or more VMs, placed in an availability set or virtual machine scale set. Mehrere virtuelle Computer sorgen für Resilienz, falls ein virtueller Computer ausfällt.Multiple VMs provide resiliency in case one VM fails. Für die Verteilung von Anforderungen auf die virtuellen Computer in einer Schicht werden Lastenausgleichsmodule verwendet.Load balancers are used to distribute requests across the VMs in a tier. Eine Schicht kann durch Hinzufügen weiterer virtueller Computer zum Pool horizontal skaliert werden.A tier can be scaled horizontally by adding more VMs to the pool.

Jede Schicht wurde zudem in einem eigenen Subnetz platziert, sodass sich die internen IP-Adressen innerhalb des gleichen Adressbereichs befinden.Each tier is also placed inside its own subnet, meaning their internal IP addresses fall within the same address range. So lassen sich Regeln und Routingtabellen für Netzwerksicherheitsgruppen problemlos auf einzelne Schichten anwenden.That makes it easy to apply network security group rules and route tables to individual tiers.

Die Web- und die Businessschicht sind zustandslos.The web and business tiers are stateless. Jeder virtuelle Computer kann jede Anforderung für diese Schicht verarbeitet.Any VM can handle any request for that tier. Die Datenschicht sollte aus einer replizierten Datenbank bestehen.The data tier should consist of a replicated database. Unter Windows empfiehlt sich SQL Server sowie die Verwendung von Always On-Verfügbarkeitsgruppen, um Hochverfügbarkeit zu erzielen.For Windows, we recommend SQL Server, using Always On availability groups for high availability. Unter Linux wählen Sie eine Datenbank aus, die Replikation unterstützt, z.B. Apache Cassandra.For Linux, choose a database that supports replication, such as Apache Cassandra.

Netzwerksicherheitsgruppen beschränken den Zugriff auf die einzelnen Schichten.Network security groups restrict access to each tier. Die Datenbankschicht z.B. gestattet nur den Zugriff aus der Businessschicht.For example, the database tier only allows access from the business tier.

Weitere Informationen zur Ausführung n-schichtiger Anwendungen in Azure:For more information about running N-tier applications on Azure:

Weitere ÜberlegungenAdditional considerations

  • N-schichtige Architekturen sind nicht auf drei Schichten beschränkt.N-tier architectures are not restricted to three tiers. Bei komplexeren Anwendungen ist es üblich, mehrere Schichten zu verwenden.For more complex applications, it is common to have more tiers. Ziehen Sie in diesem Fall ein Layer-7-Routing in Betracht, um Anforderungen an eine bestimmte Schicht weiterzuleiten.In that case, consider using layer-7 routing to route requests to a particular tier.

  • Schichten sind die Grenzen für Skalierbarkeit, Resilienz und Sicherheit.Tiers are the boundary of scalability, reliability, and security. Ziehen Sie in Betracht, separate Schichten für Dienste mit unterschiedlichen Anforderungen in diesen Bereichen einzurichten.Consider having separate tiers for services with different requirements in those areas.

  • Verwenden Sie für die automatische Skalierung VM-Skalierungsgruppen.Use virtual machine scale sets for autoscaling.

  • Suchen Sie nach Stellen in der Architektur, an denen Sie ohne größere Umgestaltung einen verwalteten Dienst verwenden können.Look for places in the architecture where you can use a managed service without significant refactoring. Untersuchen Sie in diesem Zusammenhang insbesondere die Bereiche Caching, Messaging, Speicher und Datenbanken.In particular, look at caching, messaging, storage, and databases.

  • Um die Sicherheit zu erhöhen, platzieren Sie eine Netzwerk-DMU vor der Anwendung.For higher security, place a network DMZ in front of the application. Die DMZ umfasst virtuelle Netzwerkgeräte (Network Virtual Appliances, NVAs), die Sicherheitsfunktionen wie z.B. Firewalls und Paketüberprüfung implementieren.The DMZ includes network virtual appliances (NVAs) that implement security functionality such as firewalls and packet inspection. Weitere Informationen finden Sie in der Referenzarchitektur für Netzwerk-DMZs.For more information, see Network DMZ reference architecture.

  • Um Hochverfügbarkeit zu erreichen, platzieren Sie mindestens zwei NVAs in einer Verfügbarkeitsgruppe, und richten Sie ein externes Lastenausgleichsmodul ein, um Internetanforderungen auf die Instanzen zu verteilen.For high availability, place two or more NVAs in an availability set, with an external load balancer to distribute Internet requests across the instances. Weitere Informationen finden Sie unter Bereitstellen hochverfügbarer virtueller Netzwerkgeräte.For more information, see Deploy highly available network virtual appliances.

  • Lassen Sie keinen direkten RDP- oder SSH-Zugriff auf virtuelle Computer zu, die Anwendungscode ausführen.Do not allow direct RDP or SSH access to VMs that are running application code. Operatoren sollten sich stattdessen bei einer Jumpbox anmelden, die auch als „Bastion Host“ bezeichnet wird.Instead, operators should log into a jumpbox, also called a bastion host. Dies ist ein virtueller Computer im Netzwerk, über den Administratoren eine Verbindung mit anderen virtuellen Computern herstellen.This is a VM on the network that administrators use to connect to the other VMs. Die Jumpbox verfügt über eine Netzwerksicherheitsgruppe, die RDP- oder SSH-Zugriff nur von zugelassenen öffentlichen IP-Adressen gestattet.The jumpbox has a network security group that allows RDP or SSH only from approved public IP addresses.

  • Sie können das virtuelle Azure-Netzwerk auf Ihr lokales Netzwerk ausweiten. Verwenden Sie hierfür ein Site-to-Site-VPN (Virtual Private Network) oder Azure ExpressRoute.You can extend the Azure virtual network to your on-premises network using a site-to-site virtual private network (VPN) or Azure ExpressRoute. Weitere Informationen finden Sie in der Referenzarchitektur für hybride Netzwerke.For more information, see Hybrid network reference architecture.

  • Wenn Ihre Organisation Active Directory für die Identitätsverwaltung verwendet, empfiehlt es sich möglicherweise, die Active Directory-Umgebung auf das Azure-VNET auszuweiten.If your organization uses Active Directory to manage identity, you may want to extend your Active Directory environment to the Azure VNet. Weitere Informationen finden Sie in der Referenzarchitektur zur Identitätsverwaltung.For more information, see Identity management reference architecture.

  • Wenn Sie eine höhere Verfügbarkeit benötigen, als die Azure-SLA für virtuelle Computer bietet, replizieren Sie die Anwendung in zwei Regionen, und verwenden Sie für das Failover den Azure Traffic Manager.If you need higher availability than the Azure SLA for VMs provides, replicate the application across two regions and use Azure Traffic Manager for failover. Weitere Informationen finden Sie unter Ausführen von Windows-VMs in mehreren Regionen oder Ausführen von Linux-VMs in mehreren Regionen.For more information, see Run Windows VMs in multiple regions or Run Linux VMs in multiple regions.