Skalierbare Webanwendung

Content Delivery Network
Front Door
Functions
Service Bus
Web Apps

Diese Referenzarchitektur zeigt bewährte Methoden zum Verbessern der Skalierbarkeit und Leistung in einer Azure App Service-Webanwendung.

GitHub logo Eine Referenzimplementierung dieser Architektur ist auf GitHub verfügbar.

Aufbau

Web application in Azure with improved scalability

Laden Sie eine Visio-Datei dieser Architektur herunter.

Workflow

Diese Architektur basiert auf der unter Einfache Webanwendung gezeigten Architektur. Sie enthält die folgenden Komponenten:

  • Web-App: Eine typische moderne Anwendung kann sowohl eine Website als auch ein oder mehrere RESTful-Web-APIs enthalten. Eine Web-API kann von Browserclients über AJAX, von systemeigenen Clientanwendungen oder von serverseitigen Anwendungen genutzt werden. Hinweise zum Entwerfen von Web-APIs finden Sie unter API-Entwurfsleitfaden.
  • Front Door. Front Door ist ein Layer-7-Lastenausgleichsmodul. Bei dieser Architektur werden HTTP-Anforderungen an das Web-Front-End geleitet. Mit Front Door wird auch eine Web Application Firewall (WAF) bereitgestellt, mit der die Anwendung vor häufig auftretenden Exploits und Sicherheitsrisiken geschützt wird.
  • Funktions-App. Verwenden Sie Funktions-Apps zum Ausführen von Hintergrundaufgaben. Funktionen werden durch einen Trigger ausgelöst, etwa ein Timerereignis oder eine Nachricht, die in einer Warteschlange platziert wird. Verwenden Sie für zustandsbehaftete Aufgaben mit langer Ausführungsdauer Durable Functions.
  • Warteschlange. Bei der hier gezeigten Architektur platziert die Anwendung Hintergrundaufgaben in einer Warteschlange, indem eine Nachricht in einer Azure Service Bus-Warteschlange abgelegt wird. Die Nachricht löst eine Funktions-App aus. Alternativ können Sie Azure Storage-Warteschlangen verwenden. Einen Vergleich finden Sie unter Storage- und Service Bus-Warteschlangen – Vergleich und Gegenüberstellung.
  • Cache. Speichern Sie semistatische Daten in Azure Cache for Redis.
  • CDN. Verwenden Sie Azure Content Delivery Network (CDN) zum Zwischenspeichern öffentlich verfügbarer Inhalte für geringere Latenz und schnellere Bereitstellung der Inhalte.
  • Datenspeicher. Verwenden Sie Azure SQL-Datenbank für relationale Daten. Ziehen Sie für nicht relationale Daten Cosmos DB in Betracht.
  • Azure Cognitive Search: Verwenden Sie Azure Cognitive Search zum Hinzufügen von Suchfunktionalität, z. B. Suchvorschläge, Fuzzysuche und sprachspezifische Suchen. Azure Search wird normalerweise in Verbindung mit einem anderen Datenspeicher verwendet, insbesondere dann, wenn der primäre Datenspeicher strikte Konsistenz erfordert. Bei dieser Vorgehensweise speichern Sie autorisierende Daten in dem anderen Datenspeicher und den Suchindex in Azure Search. Azure Search kann auch zum Konsolidieren eines einzelnen Suchindex aus mehreren Datenspeichern verwendet werden.
  • Azure DNS: Azure DNS ist ein Hostingdienst für DNS-Domänen, der die Namensauflösung mithilfe der Microsoft Azure-Infrastruktur durchführt. Durch das Hosten Ihrer Domänen in Azure können Sie Ihre DNS-Einträge mithilfe der gleichen Anmeldeinformationen, APIs, Tools und Abrechnung wie für die anderen Azure-Dienste verwalten.

Empfehlungen

Ihre Anforderungen können von der hier beschriebenen Architektur abweichen. Verwenden Sie die Empfehlungen in diesem Abschnitt als Ausgangspunkt.

App Service-Apps

Es wird empfohlen, die Webanwendung und die Web-API als separate App Service-Apps zu erstellen. Dieser Entwurf ermöglicht Ihnen die Ausführung in separaten App Service-Plänen, sodass sie unabhängig voneinander skaliert werden können. Wenn Sie diesen Grad an Skalierbarkeit anfänglich nicht benötigen, können Sie die Apps in demselben Plan bereitstellen und sie später bei Bedarf in separate Pläne verschieben.

Hinweis

Beim Basic-, Standard-, Premium- und Isolated-Plan werden Ihnen die VM-Instanzen im Plan und nicht pro App in Rechnung gestellt. Weitere Informationen finden Sie unter App Service – Preise.

Cache

Sie können die Leistung und Skalierbarkeit verbessern, indem Sie Azure Cache for Redis zum Zwischenspeichern einiger Daten verwenden. Verwenden Sie Azure Cache for Redis für Folgendes:

  • Semistatische Transaktionsdaten
  • Sitzungszustand
  • HTML-Ausgabe Dies kann in Anwendungen nützlich sein, die eine komplexe HTML-Ausgabe rendern.

Ausführlichere Anweisungen zum Entwerfen einer Cachingstrategie finden Sie unter Anleitungen zum Caching.

CDN

Verwenden Sie Azure CDN zum Zwischenspeichern statischer Inhalte. Der wichtigste Vorteil eines CDN ist die verringerte Latenz für Benutzer, da Inhalte auf einem Edgeserver zwischengespeichert werden, der sich in geografischer Nähe zum Benutzer befindet. CDN kann auch die Auslastung der Anwendung verringern, da dieser Datenverkehr nicht von der Anwendung gehandhabt wird.

Wenn Ihre App größtenteils aus statischen Seiten besteht, ziehen Sie die Verwendung von CDN zum Zwischenspeichern der gesamten App in Betracht. Andernfalls speichern Sie statische Inhalte wie Bilder, CSS und HTML-Dateien in Azure Storage, und verwenden Sie CDN zum Zwischenspeichern dieser Dateien.

Hinweis

Azure CDN kann keine Inhalte bereitstellen, die eine Authentifizierung erfordern.

Ausführlichere Anweisungen finden Sie unter Anleitungen zum Content Delivery Network (CDN).

Storage

Moderne Anwendungen verarbeiten häufig große Datenmengen. Für eine Skalierung für die Cloud ist es wichtig, den richtigen Speichertyp auszuwählen. Hier sind einige grundlegende Empfehlungen dafür.

Zu speichernde Objekte Beispiel Empfohlener Speicher
Dateien Bilder, Dokumente, PDF-Dateien Azure Blob Storage
Schlüssel/Wert-Paare Nach Benutzer-ID gesuchte Benutzerprofildaten Azure-Tabellenspeicher
Kurze Nachrichten zum Auslösen der Weiterverarbeitung Bestellanforderungen Azure Queue-Speicher, Service Bus-Warteschlange oder Service Bus-Thema
Nicht relationale Daten mit einem flexiblen Schema, die grundlegende Abfragen erfordern Produktkatalog Dokumentdatenbank, z. B. Azure Cosmos DB, MongoDB oder Apache CouchDB
Relationale Daten, die eine umfassendere Abfrageunterstützung, ein striktes Schema und/oder starke Konsistenz erfordern Produktbestand Azure SQL-Datenbank

Weitere Informationen finden Sie unter Auswählen des richtigen Datenspeichers.

Überlegungen

Skalierbarkeit

Ein großer Vorteil von Azure App Service ist die Möglichkeit, Ihre Anwendung abhängig von der Last zu skalieren. Hier sind einige Punkte aufgeführt, die beim Planen der Skalierung für Ihre Anwendung zu bedenken sind.

App Service-App

Wenn Ihre Lösung mehrere App Service-Apps enthält, sollten Sie deren Bereitstellung in separaten App Service-Plänen in Betracht ziehen. Dieser Ansatz ermöglicht es Ihnen, diese unabhängig voneinander zu skalieren, da sie auf separaten Instanzen ausgeführt werden.

SQL-Datenbank

Erhöhen Sie die Skalierbarkeit einer SQL-Datenbank durch Sharding der Datenbank. Sharding bezeichnet ein horizontales Partitionieren der Datenbank. Durch Sharding können Sie die Datenbank mithilfe von Tools für elastische Datenbanken aufskalieren. Sharding kann unter anderem folgende Vorteile bieten:

  • Besserer Transaktionsdurchsatz
  • Abfragen können schneller für eine Teilmenge der Daten ausgeführt werden

Azure Front Door

Front Door kann SSL-Vorgänge auslagern und reduziert zudem die Gesamtzahl von TCP-Verbindungen mit der Back-End-Web-App. Damit wird die Skalierbarkeit verbessert, weil die Web-App weniger SSL-Handshakes und TCP-Verbindungen verarbeitet. Diese Leistungssteigerungen werden auch dann erzielt, wenn Sie die Anforderungen als HTTPS an die Web-App weiterleiten, weil die Verbindungen in hohem Maß wiederverwendet werden.

Azure Search erspart den Aufwand komplexer Datensuchen aus dem primären Datenspeicher und ermöglicht eine Skalierung zur Handhabung von Lasten. Weitere Informationen finden Sie unter Skalieren von Ressourcenebenen für Abfrage und Indizierung von Workloads in Azure Search.

Sicherheit

Dieser Abschnitt enthält Sicherheitshinweise, die für die in diesem Artikel beschriebenen Azure-Dienste spezifisch sind. Dies ist keine vollständige Liste aller Best Practices in Bezug auf die Sicherheit für Webanwendungen. Weitere Sicherheitshinweise finden Sie unter Sichern einer App in Azure App Service.

Einschränken des eingehenden Datenverkehrs

Konfigurieren Sie die Anwendung so, dass sie nur Datenverkehr aus Front Door akzeptiert. So stellen Sie sicher, dass der gesamte Datenverkehr die Web Application Firewall (WAF) durchläuft, bevor er die App erreicht. Weitere Informationen finden Sie unter Wie kann ich den Zugriff auf mein Back-End nur auf Azure Front Door beschränken?

Ressourcenfreigabe zwischen verschiedenen Ursprüngen (CORS)

Wenn Sie eine Website und Web-API als separate Apps erstellen, kann die Website keine clientseitigen AJAX-Aufrufe an die API vornehmen, sofern Sie CORS nicht aktivieren.

Hinweis

Die Browsersicherheit verhindert, dass eine Webseite AJAX-Anforderungen an eine andere Domäne richtet. Diese Einschränkung wird als Richtlinie des gleichen Ursprungs bezeichnet und verhindert, dass eine schädliche Website sensible Daten von einer anderen Website liest. CORS ist ein W3C-Standard, der einem Server eine weniger strenge Anwendung der Richtlinie des gleichen Ursprungs ermöglicht und einige Anforderungen zwischen verschiedenen Ursprüngen zulässt, während andere abgelehnt werden.

App Services verfügt über integrierte Unterstützung für CORS, ohne dass Anwendungscode geschrieben werden muss. Weitere Informationen finden Sie unter Nutzen einer API-App aus JavaScript mit CORS. Fügen Sie die Website zur Liste der zulässigen Ursprünge für die API hinzu.

Verschlüsselung in der SQL-Datenbank

Verwenden Sie Transparent Data Encryption, wenn in der Datenbank ruhende Daten verschlüsselt werden sollen. Dieses Feature führt eine Ver- und Entschlüsselung einer gesamten Datenbank (einschließlich Sicherungen und Transaktionsprotokolldateien) in Echtzeit durch und erfordert keine Änderungen an der Anwendung. Die Verschlüsselung führt zu höherer Latenz, und es empfiehlt sich daher, die Daten zu trennen, die in einer eigenen Datenbank gesichert werden müssen, und die Verschlüsselung nur für diese Datenbank zu aktiveren.

DevOps

Front-End-Bereitstellung

Diese Architektur basiert auf der unter Einfache Webanwendung veranschaulichten Architektur. Weitere Informationen finden Sie im Abschnitt mit den Überlegungen zu DevOps.

Preise

Verwenden Sie Zwischenspeichern, um die Auslastung von Servern zu verringern, die Inhalte verarbeiten, die sich nicht häufig ändern. Jeder Renderzyklus einer Seite kann sich auf die Kosten auswirken, da er Compute, Arbeitsspeicher und Bandbreite beansprucht. Diese Kosten können mithilfe von Zwischenspeichern erheblich reduziert werden, insbesondere bei statischen Inhaltsdiensten wie z. B. bei einseitigen JavaScript-Apps und Medienstreaming-Inhalten.

Wenn Ihre App statische Inhalte aufweist, verwenden Sie CDN, um die Auslastung der Front-End-Server zu verringern. Verwenden Sie für Daten, die sich nicht häufig ändern, Azure Cache for Redis.

Zustandslose Apps, die für die automatische Skalierung konfiguriert sind, sind kostengünstiger als zustandsbehaftete Apps. Speichern Sie den Sitzungszustand für eine ASP.NET-Anwendung, die ihn nutzt, mit Azure Cache for Redis im Arbeitsspeicher. Weitere Informationen finden Sie unter ASP.NET-Sitzungszustandsanbieter für Azure Cache for Redis. Eine andere Möglichkeit besteht darin, Cosmos DB als Back-End-Zustandsspeicher über einen Sitzungszustandsanbieter zu verwenden. Mehr dazu finden Sie unter Verwenden von Azure Cosmos DB als ASP.NET-Sitzungszustands- und Cacheanbieter.

Weitere Informationen finden Sie im Microsoft Azure Well-Architected Framework unter Grundsätze der Kostenoptimierung.

Ziehen Sie in Erwägung, für eine Funktions-App einen dedizierten App Service-Plan zu nutzen, damit Hintergrundaufgaben nicht in denselben Instanzen ausgeführt werden, die auch HTTP-Anforderungen verarbeiten. Werden Hintergrundaufgaben nur zeitweilig ausgeführt, empfiehlt sich die Nutzung eines Verbrauchstarifs. Bei diesem Tarif erfolgt die Abrechnung basierend auf der Anzahl der Ausführungen und genutzten Ressourcen und nicht auf Stundenbasis.

Verwenden Sie den Preisrechner, um Ihre Kosten zu ermitteln.

Nächste Schritte