Freigeben über


Zuverlässiges Web-App-Muster für Java

Azure App Service
Azure Front Door

Dieser Artikel enthält Anleitungen für die Implementierung des zuverlässigen Web App-Musters. Dieses Muster beschreibt, wie Web-Apps für die Cloudmigration geändert werden (Replatform). Es stellt präscriptive Architektur, Code und Konfigurationsanleitungen bereit, die den Prinzipien des Azure Well-Architected Framework-entsprechen.

Gründe für das Muster für zuverlässige Web-Apps für Java

Das Zuverlässige Web App-Muster ist eine Reihe von Prinzipien und Implementierungstechniken, die definieren, wie Sie Web-Apps replatformieren sollten, wenn Sie sie in die Cloud migrieren. Sie konzentriert sich auf die minimalen Codeupdates, die Sie für eine erfolgreiche Ausführung in der Cloud benötigen. Die folgende Anleitung verwendet eine Referenzimplementierung als Beispiel. Es folgt der Replatform-Reise des fiktiven Unternehmens Contoso Fiber, um Geschäftskontext für Ihre Reise bereitzustellen. Vor der Implementierung des Zuverlässigen Web App-Musters für Java verfügte Contoso Fiber über ein monolithisches lokales Kundenkontoverwaltungssystem (CAMS), das das Spring Boot Framework verwendet hat.

Tipp

GitHub-Logo. Es gibt eine Referenzimplementierung (Beispiel-App) des zuverlässigen Web-App-Musters. Sie stellt den Endzustand der zuverlässigen Web App-Implementierung dar. Es handelt sich um eine Web-App mit Produktionsniveau, die alle in diesem Artikel beschriebenen Code-, Architektur- und Konfigurationsupdates enthält. Stellen Sie die Referenzimplementierung bereit, um die Implementierung des zuverlässigen Web-App-Musters anzuleiten.

Implementieren des zuverlässigen Web-App-Musters

Dieser Artikel enthält Architektur, Code und Konfigurationsanleitungen für die Implementierung des zuverlässigen Web App-Musters. Verwenden Sie die folgenden Links, um zu den spezifischen Anleitungen zu wechseln, die Sie benötigen:

  • Geschäftskontext. Richten Sie diese Anleitung mit Ihrem Geschäftskontext aus, und erfahren Sie, wie Sie sofortige und langfristige Ziele definieren, die die Umformung von Entscheidungen fördern.
  • Architekturleitfaden. Erfahren Sie, wie Sie die richtigen Clouddienste auswählen und eine Architektur entwerfen, die Ihren Geschäftsanforderungen entspricht.
  • Codeleitfaden. Implementieren Sie drei Entwurfsmuster, um die Zuverlässigkeit und Leistungsfähigkeit Ihrer Web-App in der Cloud zu verbessern: "Wiederholen", "Schaltschalter" und Cache-Aside Muster.
  • Konfigurationsleitfaden. Konfigurieren von Authentifizierung und Autorisierung, verwalteten Identitäten, rechteisierten Umgebungen, Infrastruktur als Code und Überwachung.

Geschäftskontext

Der erste Schritt beim Umzug einer Web-App auf eine andere Plattform besteht darin, Ihre Geschäftsziele zu definieren. Sie sollten sofortige Ziele festlegen, z. B. Ziele auf Serviceebene (Service Level Objectives, SLO) und Kostenoptimierungsziele sowie zukünftige Ziele für Ihre Webanwendung. Diese Ziele sind für Ihre Wahl von Clouddiensten und die Architektur Ihrer Webanwendung in der Cloud relevant. Definieren Sie ein Ziel-SLO für Ihre Web-App (z. B. 99,9% Uptime). Berechnen Sie die zusammengesetzte SLA für alle Dienste, die sich auf die Verfügbarkeit Ihrer Web-App auswirken.

Beispielsweise wollte Contoso Fiber seine lokale CAMS-Web-App erweitern, um andere Regionen zu erreichen. Um die erhöhte Auslastung der Web-App zu bewältigen, hat das Unternehmen die folgenden Ziele festgelegt:

  • Wenden Sie kostengünstige Codeänderungen mit hohem Wert an.
  • Erreichen Sie einen SLO von 99,9%.
  • Übernehmen Sie DevOps-Methoden.
  • Erstellen Sie kostenoptimierte Umgebungen.
  • Verbessern Sie Zuverlässigkeit und Sicherheit.

Contoso Fiber hat festgestellt, dass seine lokale Infrastruktur keine kostengünstige Lösung für die Skalierung der Anwendung darstellte. Sie haben beschlossen, dass die Migration ihrer CAMS-Webanwendung zu Azure die kostengünstigste Möglichkeit war, ihre unmittelbaren und zukünftigen Ziele zu erreichen.

Anleitung zur Architektur

Das zuverlässige Web-App-Muster verfügt über einige wesentliche Architekturelemente. Sie benötigen DNS zum Verwalten der Endpunktauflösung, einer Webanwendungsfirewall zum Blockieren bösartigen HTTP-Datenverkehrs und eines Lastenausgleichs zum Weiterleiten und Schützen eingehender Benutzeranforderungen. Die Anwendungsplattform hostet Ihren Web-App-Code und führt Aufrufe an alle Back-End-Dienste über private Endpunkte in einem virtuellen Netzwerk aus. Ein Tool zur Anwendungsleistungsüberwachung erfasst Metriken und Protokolle, um Ihre Web-App zu verstehen.

Diagramm mit den wesentlichen Architekturelementen des Zuverlässigen Web App-Musters.

Abbildung 1. Wesentliche Architekturelemente des zuverlässigen Web-App-Musters

Entwerfen der Architektur

Entwerfen Sie Ihre Infrastruktur so, dass Ihre Wiederherstellungsmetrikenunterstützt werden, z. B. Ihr Wiederherstellungszeitziel (RTO) und das Wiederherstellungspunktziel (Recovery Point Objective, RPO). Das RTO wirkt sich auf die Verfügbarkeit aus und muss Ihre SLO unterstützen. Ermitteln Sie ein RPO, und konfigurieren Sie Datenredundanz, um das RPO zu erfüllen.

  • Entscheiden Sie sich für die Zuverlässigkeit der Infrastruktur. Ermitteln Sie, wie viele Verfügbarkeitszonen und Regionen Ihre Verfügbarkeitsanforderungen erfüllen müssen. Fügen Sie Verfügbarkeitszonen und Regionen hinzu, bis die zusammengesetzte SLA Ihre SLO erfüllt. Das zuverlässige Web-App-Muster unterstützt mehrere Regionen für eine aktive oder passive Konfiguration. Die Referenzimplementierung verwendet beispielsweise eine aktiv-passive Konfiguration, um eine SLO von 99,9 % zu erfüllen.

    Konfigurieren Sie für eine Web-App mit mehreren Regionen Ihren Lastenausgleich so, dass der Datenverkehr an die zweite Region weitergeleitet wird, um je nach Geschäftsbedarf eine aktive oder passive Konfiguration zu unterstützen. Die beiden Regionen erfordern dieselben Dienste, mit Ausnahme einer Region, ein virtuelles Hubnetzwerk, das die Regionen verbindet. Verwenden Sie eine Hub-and-Spoke-Netzwerktopologie, um freigegebene Ressourcen wie eine Netzwerkfirewall zu zentralisieren und gemeinsam zu nutzen. Wenn Sie über virtuelle Computer verfügen, fügen Sie dem virtuellen Hubnetzwerk einen Bastionhost hinzu, um sie mit verbesserter Sicherheit zu verwalten. (Siehe Abbildung 2.)

    Diagramm, das das zuverlässige Web-App-Muster mit einer zweiten Region und einer Hub-and-Spoke-Topologie zeigt.

    Abbildung 2. Das zuverlässige Web-App-Muster mit einer zweiten Region und einer Hub-and-Spoke-Topologie

  • Wählen Sie eine Netzwerktopologie aus. Wählen Sie die richtige Netzwerktopologie für Ihre Web- und Netzwerkanforderungen aus. Wenn Sie mehrere virtuelle Netzwerke verwenden möchten, verwenden Sie eine Hub-and-Spoke-Netzwerktopologie. Es bietet Kosten-, Verwaltungs- und Sicherheitsvorteile und Hybridkonnektivitätsoptionen für lokale und virtuelle Netzwerke.

Wählen Sie die richtigen Azure-Dienste aus.

Wenn Sie eine Web-App in die Cloud verschieben, sollten Sie Azure-Dienste auswählen, die Ihren Geschäftlichen Anforderungen entsprechen, und die Features der lokalen Web-App erfüllen. Diese Ausrichtung trägt dazu bei, den Replatforming-Aufwand zu minimieren. Sie könnten beispielsweise Dienste verwenden, mit denen Sie das Datenbankmodul beibehalten und vorhandene Middleware und Frameworks unterstützen können. In den folgenden Abschnitten finden Sie Anleitungen für die Auswahl der richtigen Azure-Dienste für Ihre Web-App.

Vor dem Verschieben in die Cloud war die CAMS-Web-App von Contoso Fiber beispielsweise eine lokale monolithische Java-Web-App. Es war eine Spring Boot-App mit einer PostgreSQL-Datenbank. Die Web-App erfüllte die Aufgabe einer branchenspezifischen Support-App. Sie ist für Mitarbeiter zugänglich. Die Mitarbeitenden von Contoso Fiber verwalten über die Anwendung Supportfälle ihrer Kunden. Die Web-App litt unter häufigen Problemen hinsichtlich Skalierbarkeit und Funktionsbereitstellung. Dieser Ausgangspunkt, die geschäftlichen Ziele und das SLO lagen der Auswahl der Dienste zugrunde.

  • Anwendungsplattform: Verwenden Sie Azure App Service als Ihre Anwendungsplattform. Contoso Fiber hat Azure App Service als Anwendungsplattform aus den folgenden Gründen ausgewählt:

    • Natürliche Entwicklung. Contoso Fiber hat eine Spring Boot-Datei jar auf ihrem lokalen Server bereitgestellt und wollte die Menge der Umrüstung für dieses Bereitstellungsmodell minimieren. App Service stellt eine robuste Unterstützung für die Ausführung von Spring Boot-Apps bereit. Daher war die Verwendung von App Service ein natürlicher Schritt für Contoso Fiber. Azure Container Apps ist auch eine attraktive Alternative für diese App. Weitere Informationen finden Sie unter Was ist Azure Container Apps? und Java in Azure Container Apps (Übersicht).
    • Hohe SLA. App Service bietet eine hohe SLA, die die Anforderungen für die Produktionsumgebung erfüllt.
    • Reduzierter Verwaltungsaufwand. App Service ist eine vollständig verwaltete Hostinglösung.
    • Containerisierungsfunktion. Der App-Dienst funktioniert mit privaten Containerimageregistrierungen wie azure Container Registry. Contoso Fiber kann diese Registrierungen verwenden, um die Web-App in der Zukunft zu containerisieren.
    • Automatische Skalierung Die Web-App kann auf der Grundlage des Benutzerdatenverkehrs schnell nach oben, unten, in und out skalieren.
  • Identitätsverwaltung: Verwenden Sie Microsoft Entra ID als Ihre Identitäts- und Zugriffsverwaltungslösung. Contoso Fiber hat sich aus den folgenden Gründen für Microsoft Entra ID entschieden:

    • Authentifizierung und Autorisierung. Die Anwendung muss Mitarbeiter des Callcenters authentifizieren und autorisieren.
    • Skalierbarkeit. Die Microsoft Entra-ID wird skaliert, um größere Szenarien zu unterstützen.
    • Benutzeridentitätssteuerelement. Mitarbeiter des Callcenters können ihre vorhandenen Unternehmensidentitäten verwenden.
    • Unterstützung des Autorisierungsprotokolls. Microsoft Entra-ID unterstützt OAuth 2.0 für verwaltete Identitäten.
  • Datenbank: Verwenden Sie einen Dienst, mit dem Sie dasselbe Datenbankmodul beibehalten können. Verwenden Sie die Datenspeicher-Entscheidungsstruktur, um Ihre Auswahl zu leiten. Contoso Fiber hat azure Database für PostgreSQL und das flexible Serverbereitstellungsmodell aus den folgenden Gründen ausgewählt:

    • Zuverlässigkeit. Das flexible Serverbereitstellungsmodell unterstützt zonenredundante Hohe Verfügbarkeit in mehreren Verfügbarkeitszonen. Diese Konfiguration verwaltet einen betriebsbereiten Standbyserver in einer anderen Verfügbarkeitszone innerhalb derselben Azure-Region. Die Konfiguration repliziert Daten synchron auf den Standbyserver.
    • Regionsübergreifende Replikation. Azure Database for PostgreSQL bietet ein Lesereplikatfeature, mit dem Sie Daten asynchron in eine schreibgeschützte Replikatdatenbank in einer anderen Region replizieren können.
    • Leistung Azure Database for PostgreSQL bietet vorhersehbare Leistung und intelligente Optimierung, die Ihre Datenbankleistung durch Die Verwendung realer Nutzungsdaten verbessert.
    • Reduzierter Verwaltungsaufwand. Es ist ein vollständig verwalteter Azure-Dienst, der Verwaltungsverpflichtungen reduziert.
    • Migrationsunterstützung. Es unterstützt die Datenbankmigration von lokalen Einzelserver-PostgreSQL-Datenbanken. Contoso kann das Migrationstool verwenden, um den Migrationsprozess zu vereinfachen.
    • Konsistenz mit lokalen Konfigurationen. Es unterstützt verschiedene Communityversionen von PostgreSQL, einschließlich der Version, die Contoso Fiber derzeit verwendet.
    • Resilienz. Die flexible Serverbereitstellung erstellt automatisch Serversicherungen und speichert sie in zonenredundanten Speicher (ZRS) innerhalb derselben Region. Contoso kann ihre Datenbank zu einem beliebigen Zeitpunkt wiederherstellen, der sich innerhalb des Aufbewahrungszeitraums für die Sicherung befindet. Die Funktionalität für Sicherung und Wiederherstellung bietet ein besseres RPO (d. h. akzeptablen Umfang des Datenverlusts), als Contoso Fiber lokal erzielen könnte.
  • Anwendungsleistungsüberwachung: Verwenden Sie Application Insights, um die Telemetrie in Ihrer Anwendung zu analysieren. Contoso Fiber hat sich aus den folgenden Gründen für Application Insights entschieden:

    • Integration in Azure Monitor. Es bietet die beste Integration in Azure Monitor.
    • Anomalieerkennung Es erkennt automatisch Leistungsanomalien.
    • Fehlerbehebung. Es hilft Ihnen, Probleme in der ausgeführten App zu diagnostizieren.
    • Überwachung. Sie sammelt Informationen darüber, wie Benutzer die App verwenden, und ermöglicht es Ihnen, benutzerdefinierte Ereignisse auf einfache Weise nachzuverfolgen.
    • Sichtbarkeitslücke. Die lokale Lösung hat keine Anwendungsleistungsüberwachungslösung. Application Insights bietet eine einfache Integration in die Anwendungsplattform und in den Code.
  • Cache: Wählen Sie aus, ob Der Web App-Architektur ein Cache hinzugefügt werden soll. Azure-Cache für Redis ist die primäre Azure-Cachelösung. Es ist ein verwalteter Speicher im Arbeitsspeicher, der auf der Redis-Software basiert. Contoso Fiber hat Azure Cache für Redis aus den folgenden Gründen hinzugefügt:

    • Geschwindigkeit und Lautstärke. Sie bietet hohen Datendurchsatz und Lesevorgänge mit geringer Latenz für häufig verwendete, langsam ändernde Daten.
    • Vielfältige Unterstützung. Es handelt sich um einen einheitlichen Cachespeicherort, den alle Instanzen der Web-App verwenden können.
    • Externer Datenspeicher. Von den lokalen Anwendungsservern wurde eine VM-lokale Zwischenspeicherung durchgeführt. Bei diesem Setup wurden häufig verwendete Daten nicht ausgelagert, und Daten konnten nicht ungültig gemacht werden.
    • Nichtstickige Sitzungen. Der Cache ermöglicht es der Web-App, den Sitzungszustand zu externalisieren und nichtstickige Sitzungen zu verwenden. Die meisten Java-Web-Apps, die lokal ausgeführt werden, verwenden clientseitige Zwischenspeicherung im Arbeitsspeicher. Die zwischengespeicherte clientseitige Zwischenspeicherung wird nicht gut skaliert und erhöht den Speicherbedarf auf dem Host. Mit Azure Cache für Redis verfügt Contoso Fiber über einen vollständig verwalteten, skalierbaren Cachedienst, um die Skalierbarkeit und Leistung ihrer Anwendungen zu verbessern. Contoso verwendete ein Cachestraktionsframework (Spring Cache) und benötigte nur minimale Konfigurationsänderungen, um den Cacheanbieter auszutauschen. Dadurch konnten sie von einem Ehcache-Anbieter zum Redis-Anbieter wechseln.
  • Lastenausgleich: Webanwendungen, die Plattform als Dienstlösungen (PaaS) verwenden, sollten je nach Web-App-Architektur und -Anforderungen Azure Front Door, Azure-Anwendungsgateway oder beides verwenden. Verwenden Sie die Entscheidungsstruktur des Load Balancer , um das richtige Lastenausgleichsmodul auszuwählen. Contoso Fiber benötigt einen Lastenausgleich der Ebene 7, der den Datenverkehr über mehrere Regionen und eine Web-App mit mehreren Regionen weiterleiten kann, um den SLO von 99,9%zu erfüllen. Contoso hat Azure Front Door aus den folgenden Gründen ausgewählt:

    • Globaler Lastenausgleich. Es ist ein Lastenausgleich der Ebene 7, der den Datenverkehr über mehrere Regionen weiterleiten kann.
    • Webanwendungsfirewall. Sie ist nativ in die Azure-Webanwendungsfirewall integriert.
    • Routingflexibilität. Es ermöglicht dem Anwendungsteam, den Eingangsschritt zu konfigurieren, um zukünftige Änderungen in der Anwendung zu unterstützen.
    • Verkehrsbeschleunigung. Es verwendet Anycast, um den nächstgelegenen Azure-Anwesenheitspunkt zu erreichen und die schnellste Route zur Web-App zu finden.
    • Benutzerdefinierte Domänen. Sie unterstützt benutzerdefinierte Domänennamen mit flexibler Domänenüberprüfung.
    • Integritätstests: Die Anwendung benötigt intelligente Integritätssondenüberwachung. Azure Front Door ermittelt anhand der Ergebnisse des Tests den besten Ursprung für die Weiterleitung Ihrer Clientanforderungen.
    • Unterstützung für die Überwachung. Azure Front Door unterstützt integrierte Berichte mit einem all-in-one-Dashboard sowohl für Azure Front Door als auch für Sicherheitsmuster. Sie können Warnungen konfigurieren, die in Azure Monitor integriert werden. Azure Front Door ermöglicht es der Anwendung, jede Anforderung und fehlerhafte Integritätssonden zu protokollieren.
    • DDoS-Schutz. Es verfügt über einen integrierten DDoS-Schutz der Ebene 3-4.
    • Netzwerk für die Inhaltsübermittlung. Er positioniert Contoso Fiber für die Verwendung eines Inhaltsübermittlungsnetzwerks. Das Netzwerk zur Bereitstellung von Inhalten ermöglicht die Beschleunigung der Website.
  • Web Application Firewall: Verwenden Sie Azure Web Application Firewall, um zentralisierten Schutz vor gängigen Exploits und Sicherheitsrisiken für Ihre Webanwendungen bereitzustellen. Contoso Fiber hat sich aus den folgenden Gründen für Azure Web Application Firewall entschieden:

    • Globaler Schutz. Es bietet einen verbesserten globalen Web App-Schutz, ohne die Leistung zu beeinträchtigen.
    • Botnetschutz. Das Team kann Einstellungen überwachen und konfigurieren, um Sicherheitsbedenken im Zusammenhang mit Botnets zu beheben.
    • Parität mit lokal. Die lokale Lösung wurde hinter einer Von der IT verwalteten Webanwendungsfirewall ausgeführt.
    • Benutzerfreundlichkeit. Die Webanwendungsfirewall ist in Azure Front Door integriert.
  • Geheimnisverwaltung: Verwenden Sie Azure Key Vault, wenn Sie geheime Schlüssel in Azure verwalten müssen. Contoso Fiber hat sich aus den folgenden Gründen für Key Vault entschieden:

    • Verschlüsselung. Es unterstützt ruhende und während der Übertragung verschlüsselung.
    • Unterstützung für verwaltete Identitäten. Die Anwendungsdienste können verwaltete Identitäten verwenden, um auf den geheimen Speicher zuzugreifen.
    • Überwachung und Protokollierung. Key Vault erleichtert den Überwachungszugriff und generiert Warnungen, wenn sich gespeicherte geheime Schlüssel ändern.
    • Integration. Key Vault bietet native Integration mit dem Azure-Konfigurationsspeicher (Azure App-Konfiguration) und der Webhostingplattform (App Service).
  • Endpunktsicherheit: Verwenden Sie Azure Private Link , um auf PaaS-Lösungen über einen privaten Endpunkt in Ihrem virtuellen Netzwerk zuzugreifen. Datenverkehr zwischen Ihrem virtuellen Netzwerk und dem Dienst wird über das Microsoft-Backbone-Netzwerk übertragen. Contoso Fiber hat sich aus den folgenden Gründen für Private Link entschieden:

    • Verbesserte Sicherheitskommunikation. Sie ermöglicht der Anwendung den privaten Zugriff auf Dienste auf der Azure-Plattform und reduziert den Netzwerkbedarf von Datenspeichern, um vor Datenlecks zu schützen.
    • Minimaler Aufwand. Die privaten Endpunkte unterstützen die Web-App-Plattform und die Datenbankplattform, die von der Web-App verwendet wird. Beide Plattformen spiegeln vorhandene lokale Konfigurationen wieder, sodass minimale Änderungen erforderlich sind.
  • Netzwerksicherheit: Verwenden Sie Azure Firewall, um ein- und ausgehenden Datenverkehr auf Netzwerkebene zu steuern. Verwenden Sie Azure Bastion-, um eine Verbindung mit virtuellen Computern mit erweiterter Sicherheit herzustellen, ohne RDP/SSH-Ports verfügbar zu machen. Contoso Fiber hat eine Hub-and-Spoke-Netzwerktopologie eingeführt und wollte gemeinsam genutzte Netzwerksicherheitsdienste im Hub platzieren. Azure Firewall verbessert die Sicherheit durch die Überprüfung des gesamten ausgehenden Datenverkehrs aus den Speichen, um die Netzwerksicherheit zu erhöhen. Contoso Fiber benötigt Azure Bastion für erweiterte Sicherheitsbereitstellungen von einem Sprunghost im DevOps-Subnetz.

Anleitung zum Code

Um eine Web-App erfolgreich in die Cloud zu verschieben, müssen Sie Ihren Web-App-Code mit dem Muster "Wiederholen", "Schaltkreistrennung" und Cache-Aside-Muster aktualisieren.

Diagramm mit den Rollen von Entwurfsmustern im Zuverlässigen Web App-Muster.

Abbildung 3. Rollen der Entwurfsmuster.

Jedes Entwurfsmuster bietet Arbeitsauslastungsdesignvorteile, die mit einer oder mehreren Säulen des Well-Architected Frameworks übereinstimmen. Hier ist eine Übersicht über die Muster, die Sie implementieren sollten:

  1. Wiederholen Sie das Muster. Das Wiederholungsmuster behandelt vorübergehende Fehler durch Wiederholungsvorgänge, die zeitweise fehlschlagen können. Implementieren Sie dieses Muster für alle ausgehenden Aufrufe an andere Azure-Dienste.

  2. Schaltkreistrennmuster. Das Schaltkreistrennmuster verhindert, dass eine Anwendung wiederholungsvorgänge ausführt, die nicht vorübergehend sind. Implementieren Sie dieses Muster in allen ausgehenden Aufrufen an andere Azure-Dienste.

  3. Cache-Aside Muster. Das Cache-Aside Muster lädt Daten bei Bedarf in einen Cache aus einem Datenspeicher. Implementieren Sie dieses Muster für Anforderungen an die Datenbank.

Entwurfsmuster Zuverlässigkeit (Reliability, RE) Sicherheit (Security, SE) Kostenoptimierung (Cost Optimization, CO) Erstklassige Betriebsprozesse (Operational Excellence, OE) Leistungseffizienz (Performance Efficiency, PE) Unterstützung von WAF-Prinzipien
Wiederholungsmuster RE:07
Trennschalter-Muster RE:03
RE:07
PE:07
PE:11
Cachefremdes Muster RE:05
PE:08
PE:12

Implementieren des Wiederholungsmusters

Fügen Sie ihrem Anwendungscode das Wiederholungsmuster hinzu, um temporäre Dienstunterbrechungen zu beheben. Diese Störungen werden als vorübergehende Fehler bezeichnet. Vorübergehende Fehler werden in der Regel innerhalb von Sekunden behoben. Mit dem Wiederholungsmuster können Sie fehlgeschlagene Anforderungen erneut senden. Außerdem können Sie die Verzögerung zwischen Wiederholungen und der Anzahl der Versuche konfigurieren, die vor dem Zuweisen eines Fehlers ausgeführt werden sollen.

Verwenden Sie Resilience4j, eine einfache Fehlertoleranzbibliothek, um das Wiederholungsmuster in Java zu implementieren. Die Referenzimplementierung fügt das Retry-Muster hinzu, indem die listServicePlans-Methode des Serviceplancontrollers mit Retry-Anmerkungen versehen wird. Der Code ruft den Aufruf einer Liste von Dienstplänen aus der Datenbank erneut auf, wenn der anfängliche Aufruf fehlschlägt. Die Wiederholungsrichtlinie für die Referenzimplementierung enthält maximale Versuche, Wartezeiten und die Ausnahmen, die wiederholt werden sollen. Die Wiederholungsrichtlinie ist in application.properties konfiguriert.

    @GetMapping("/list")
    @PreAuthorize("hasAnyAuthority('APPROLE_AccountManager')")
    @CircuitBreaker(name = SERVICE_PLAN)
    @Retry(name = SERVICE_PLAN)
    public String listServicePlans(Model model) {
        List<serviceplandto> servicePlans = planService.getServicePlans();
        model.addAttribute("servicePlans", servicePlans);
        return "pages/plans/list";
    }

Implementieren des Trennschaltermusters

Verwenden Sie das Circuit Breaker-Muster, um Dienstunterbrechungen zu behandeln, bei denen es sich nicht um vorübergehende Fehler handelt. Das Wiederholungsmuster verhindert, dass eine Anwendung kontinuierlich versucht, auf einen nicht reagierenden Dienst zuzugreifen. Sie gibt die Anwendung frei und verhindert, dass CPU-Zyklen verzehrt werden, sodass die Anwendung ihre Leistungsintegrität für Endbenutzer behält.

Verwenden Sie Spring Cloud Circuit Breaker und Resilience4j , um das Schaltkreistrennmuster zu implementieren. Die Referenzimplementierung implementiert das Circuit Breaker-Muster durch Dekorieren von Methoden mit dem Circuit Breaker-Attribut.

Impelementieren des Cache-Aside-Musters

Fügen Sie Ihrer Web-App das Cache-Aside-Muster hinzu, um die Speicherdatenverwaltung zu verbessern. Das Muster weist der Anwendung die Verantwortung für die Verarbeitung von Datenanforderungen zu und stellt die Konsistenz zwischen dem Cache und dem persistenten Speicher wie z. B. einer Datenbank sicher. Dies verkürzt die Reaktionszeiten, verbessert den Durchsatz und reduziert die Notwendigkeit für eine weitere Skalierung. Außerdem wird die Last des primären Datenspeichers reduziert, was die Zuverlässigkeit und Kostenoptimierung verbessert. Befolgen Sie die folgenden Empfehlungen, um das Cache-Aside-Muster zu implementieren:

  • Konfigurieren Sie die Anwendung für die Verwendung von Cache. Um die Zwischenspeicherung zu aktivieren, fügen Sie das Paket spring-boot-starter-cache in Ihrer pom.xml-Datei als Abhängigkeit hinzu. Dieses Paket stellt Standardkonfigurationen für den Redis-Cache bereit.

  • Zwischenspeichern von Daten mit hohem Bedarf. Wenden Sie das Cache-Aside Muster auf daten mit hohem Bedarf an, um die Effektivität zu verbessern. Verwenden Sie Azure Monitor, um die CPU, den Arbeitsspeicher und den Speicher der Datenbank nachzuverfolgen. Anhand dieser Metriken können Sie ermitteln, ob Sie eine kleinere Datenbank-SKU verwenden können, nachdem Sie das Cache-Aside Muster angewendet haben. Um bestimmte Daten in Ihrem Code zwischenzuspeichern, fügen Sie die @Cacheable-Anmerkung hinzu. Diese Anmerkung gibt spring an, welche Methoden ihre Ergebnisse zwischengespeichert haben sollen.

  • Cachedaten auf dem neuesten Stand halten. Planen Sie regelmäßige Aktualisierungen des Zwischenspeichers, um die Daten mit den neuesten Änderungen in der Datenbank zu synchronisieren. Verwenden Sie die Datenvolatilität, und der Benutzer muss die optimale Aktualisierungsrate ermitteln. Diese Vorgehensweise stellt sicher, dass die Anwendung das Cache-Aside Muster verwendet, um sowohl schnellen Zugriff als auch aktuelle Informationen bereitzustellen. Die Standardcacheeinstellungen passen möglicherweise nicht zu Ihrer Webanwendung. Sie können diese Einstellungen in der application.properties-Datei oder den Umgebungsvariablen anpassen. Beispielsweise können Sie den spring.cache.redis.time-to-live Wert (ausgedrückt in Millisekunden) ändern, um zu steuern, wie lange Daten im Cache verbleiben sollen, bevor er entfernt wird.

  • Sicherstellen der Datenkonsistenz. Implementieren Sie Mechanismen zum Aktualisieren des Zwischenspeichers direkt nach jedem Schreibvorgang in der Datenbank. Verwenden Sie ereignisgesteuerte Updates oder dedizierte Datenverwaltungsklassen, um die Kohärenz des Zwischenspeichers sicherzustellen. Die konsistente Synchronisierung des Zwischenspeichers mit Datenbankänderungen ist für das cachefremde Muster von zentraler Bedeutung.

Anleitung zur Konfiguration

In den folgenden Abschnitten finden Sie Anleitungen zum Implementieren der Konfigurationsupdates. Jeder Abschnitt richtet sich an einer oder mehreren Säulen des Well-Architected Frameworks aus.

Konfiguration Zuverlässigkeit (Reliability, RE) Sicherheit (Security, SE) Kostenoptimierung (Cost Optimization, CO) Erstklassige Betriebsprozesse (Operational Excellence, OE) Leistungseffizienz (Performance Efficiency, PE) Unterstützung von WAF-Prinzipien
Konfigurieren der Benutzerauthentifizierung und -autorisierung SE:05
OE:10
Implementieren verwalteter Identitäten SE:05
OE:10
Rechteisieren von Umgebungen CO:05
CO:06
Implementieren automatischer Skalierung RE:06
CO:12
PE:05
Automatische Ressourcenbereitstellung OE:05
Implementieren von Überwachung OE:07
PE:04

Konfigurieren der Benutzerauthentifizierung und -autorisierung

Wenn Sie Webanwendungen zu Azure migrieren, konfigurieren Sie die Benutzerauthentifizierungs- und Autorisierungsmechanismen. Befolgen Sie die nachstehenden Empfehlungen:

  • Verwenden Sie eine Identitätsplattform. Verwenden Sie die Microsoft Identity-Plattform, um die Web-App-Authentifizierung einzurichten. Diese Plattform unterstützt Anwendungen, die ein einzelnes Microsoft Entra-Verzeichnis, mehrere Microsoft Entra-Verzeichnisse aus verschiedenen Organisationen und Microsoft-Identitäten oder soziale Konten verwenden.

    Der Spring Boot Starter für Microsoft Entra ID optimiert diesen Prozess. Es verwendet Spring Security und Spring Boot, um eine einfache Konfiguration zu gewährleisten. Es bietet verschiedene Authentifizierungsflüsse, automatische Tokenverwaltung, anpassbare Autorisierungsrichtlinien und Integrationsfunktionen mit Spring Cloud-Komponenten. Dieser Dienst ermöglicht eine einfache Integration von Microsoft Entra ID und OAuth 2.0 in Spring Boot-Anwendungen ohne manuelle Bibliotheks- oder Einstellungskonfiguration.

    Die Referenzimplementierung verwendet die Microsoft Identity Platform (Microsoft Entra ID) als Identitätsanbieter für die Web-App. Sie verwendet die OAuth 2.0-Autorisierungscode-Genehmigung für die Anmeldung eines Benutzers bzw. einer Benutzerin mit einem Microsoft Entra-Konto. Der folgende XML-Codeausschnitt definiert die zwei erforderlichen Abhängigkeiten des OAuth 2.0-Autorisierungscode-Genehmigungsflows. Die Abhängigkeit com.azure.spring: spring-cloud-azure-starter-active-directory ermöglicht die Microsoft Entra-Authentifizierung und -Autorisierung in einer Spring Boot-Anwendung. Die Abhängigkeit org.springframework.boot: spring-boot-starter-oauth2-client ermöglicht die OAuth 2.0-Authentifizierung und -Autorisierung in einer Spring Boot-Anwendung.

    <dependency>
        <groupid>com.azure.spring</groupid>
        <artifactid>spring-cloud-azure-starter-active-directory</artifactid>
    </dependency>
    <dependency>
        <groupid>org.springframework.boot</groupid>
        <artifactid>spring-boot-starter-oauth2-client</artifactid>
    </dependency>
    
  • Erstellen Sie eine Anwendungsregistrierung. Microsoft Entra ID erfordert eine Anwendungsregistrierung im primären Mandanten. Die Anwendungsregistrierung trägt dazu bei, sicherzustellen, dass Benutzer, die Zugriff auf die Web-App erhalten, über Identitäten im primären Mandanten verfügen. Die Referenzimplementierung verwendet Terraform, um eine Microsoft Entra ID-App-Registrierung zusammen mit einer app-spezifischen Account Manager-Rolle zu erstellen:

    resource "azuread_application" "app_registration" {
      display_name     = "${azurecaf_name.app_service.result}-app"
      owners           = [data.azuread_client_config.current.object_id]
      sign_in_audience = "AzureADMyOrg"  # single tenant
    
      app_role {
        allowed_member_types = ["User"]
        description          = "Account Managers"
        display_name         = "Account Manager"
        enabled              = true
        id                   = random_uuid.account_manager_role_id.result
        value                = "AccountManager"
      }
    }
    
  • Erzwingen Sie die Autorisierung in der Anwendung. Verwenden Sie die rollenbasierte Zugriffssteuerung (RBAC), um Anwendungsrollen die geringsten Berechtigungen zuzuweisen. Definieren Sie bestimmte Rollen für verschiedene Benutzeraktionen, um Überlappungen zu vermeiden und Klarheit zu gewährleisten. Ordnen Sie Benutzer den entsprechenden Rollen zu, und stellen Sie sicher, dass sie nur Zugriff auf erforderliche Ressourcen und Aktionen haben. Konfigurieren Sie Spring Security für die Verwendung von Spring Boot Starter für Microsoft Entra ID. Diese Bibliothek ermöglicht die Integration mit der Microsoft Entra-ID und hilft Ihnen, sicherzustellen, dass Benutzer sicher authentifiziert werden. Das Konfigurieren und Aktivieren der Microsoft Authentication Library (MSAL) bietet Zugriff auf weitere Sicherheitsfeatures. Zu diesen Features gehören Tokenzwischenspeicherung und automatische Tokenaktualisierung.

    Die Referenzimplementierung erstellt App-Rollen, die die Arten von Benutzerrollen im Kontoverwaltungssystem von Contoso Fiber widerspiegeln. Rollen werden während der Autorisierung in Berechtigungen übersetzt. Beispiele für appspezifische Rollen in CAMS sind Account Manager, Level One (L1) Support Representative und Field Service Representative. Die Rolle „Konto-Manager*in“ besitzt Berechtigungen zum Hinzufügen neuer App-Benutzer*innen und Kund*innen. Ein Außendienstmitarbeiter kann Supporttickets erstellen. Das Attribut PreAuthorize schränkt den Zugriff auf bestimmte Rollen ein.

        @GetMapping("/new")
        @PreAuthorize("hasAnyAuthority('APPROLE_AccountManager')")
        public String newAccount(Model model) {
            if (model.getAttribute("account") == null) {
                List<ServicePlan> servicePlans = accountService.findAllServicePlans();
                ServicePlan defaultServicePlan = servicePlans.stream().filter(sp -> sp.getIsDefault() == true).findFirst().orElse(null);
                NewAccountRequest accountFormData = new NewAccountRequest();
                accountFormData.setSelectedServicePlanId(defaultServicePlan.getId());
                model.addAttribute("account", accountFormData);
                model.addAttribute("servicePlans", servicePlans);
            }
            model.addAttribute("servicePlans", accountService.findAllServicePlans());
            return "pages/account/new";
        }
        ...
    

    Für die Integration mit Microsoft Entra-ID verwendet die Referenzimplementierung den Codegenehmigungsflow für die OAuth 2.0-Autorisierung. Dieser Flow ermöglicht Benutzer*innen die Anmeldung mit einem Microsoft-Konto. Der folgende Codeausschnitt zeigt, wie Sie die SecurityFilterChain Microsoft Entra-ID für die Authentifizierung und Autorisierung konfigurieren.

    @Configuration(proxyBeanMethods = false)
    @EnableWebSecurity
    @EnableMethodSecurity
    public class AadOAuth2LoginSecurityConfig {
        @Bean
        SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
            http.apply(AadWebApplicationHttpSecurityConfigurer.aadWebApplication())
                .and()
                    .authorizeHttpRequests()
                .requestMatchers(EndpointRequest.to("health")).permitAll()
                .anyRequest().authenticated()
                .and()
                    .logout(logout -> logout
                                .deleteCookies("JSESSIONID", "XSRF-TOKEN")
                                .clearAuthentication(true)
                                .invalidateHttpSession(true));
            return http.build();
        }
    }
    ...
    
  • Ziehen Sie temporären Zugriff auf den Speicher vor. Verwenden Sie temporäre Berechtigungen, um vor unbefugtem Zugriff und Verstößen zu schützen. Sie können z. B. sas- verwenden, um den Zugriff auf einen bestimmten Zeitraum zu beschränken. Verwenden Sie die SAS-Benutzerdelegierung, um die Sicherheit zu maximieren, wenn Sie temporären Zugriff gewähren. Dies ist die einzige SAS, die Microsoft Entra ID-Anmeldeinformationen verwendet und keinen permanenten Speicherkontoschlüssel erfordert.

  • Erzwingen Sie die Autorisierung in Azure. Verwenden Sie Azure RBAC, um Benutzeridentitäten am wenigsten Berechtigungen zuzuweisen. Azure RBAC definiert die Azure-Ressourcen, auf die Identitäten zugreifen können, was sie mit diesen Ressourcen tun können, und die Bereiche, auf die sie Zugriff haben.

  • Vermeiden Sie dauerhaft erhöhte Berechtigungen. Verwenden Sie Microsoft Entra Privileged Identity Management, um Just-in-Time-Zugriff für privilegierte Vorgänge zu gewähren. Entwickler benötigen beispielsweise häufig Zugriff auf die Administratorebene, um Datenbanken zu erstellen/zu löschen, Tabellenschemas zu ändern und Benutzerberechtigungen zu ändern. Wenn Sie just-in-time-Zugriff verwenden, erhalten Benutzeridentitäten temporäre Berechtigungen zum Ausführen privilegierter Aufgaben.

Implementieren verwalteter Identitäten

Verwenden Sie verwaltete Identitäten für alle Azure-Dienste, die sie unterstützen. Eine verwaltete Identität ermöglicht Azure-Ressourcen (Workloadidentitäten) die Authentifizierung und Interaktion mit anderen Azure-Diensten, ohne dass Sie Anmeldeinformationen verwalten müssen. Um die Migration zu vereinfachen, können Sie weiterhin lokale Authentifizierungslösungen für Hybrid- und Legacysysteme verwenden, aber Sie sollten diese so schnell wie möglich auf verwaltete Identitäten umstellen. Befolgen Sie die folgenden Empfehlungen, um verwaltete Identitäten zu implementieren:

  • Wählen Sie den richtigen Typ der verwalteten Identität aus. Ziehen Sie vom Benutzer zugewiesene verwaltete Identitäten vor, wenn Sie über zwei oder mehr Azure-Ressourcen verfügen, die denselben Satz von Berechtigungen benötigen. Dieser Ansatz ist effizienter als das Erstellen von vom System zugewiesenen verwalteten Identitäten für jede dieser Ressourcen und das Zuweisen der gleichen Berechtigungen für alle. Verwenden Sie andernfalls vom System zugewiesene verwaltete Identitäten.

  • Konfigurieren Sie die geringsten Berechtigungen. Verwenden Sie Azure RBAC-, um nur Berechtigungen zu erteilen, die für Vorgänge wichtig sind, z. B. CRUD-Aktionen in Datenbanken oder zugriff auf geheime Schlüssel. Die Berechtigungen für Workloadidentitäten sind persistent. Sie können Workloadidentitäten daher keine kurzfristigen oder Just-in-Time-Berechtigungen gewähren. Wenn Azure RBAC ein bestimmtes Szenario nicht abdeckt, ergänzen Sie Azure RBAC mit Zugriffsrichtlinien auf der Azure-Dienstebene.

  • Stellen Sie Sicherheit für verbleibende geheime Schlüssel bereit. Speichern Sie alle verbleibenden geheimen Schlüssel in Azure Key Vault. Laden Sie Geheimnisse aus Key Vault beim Starten der Anwendung, nicht während jeder einzelnen HTTP-Anforderung. Der Hochfrequenzzugriff innerhalb von HTTP-Anforderungen kann die Transaktionsgrenzen von Key Vault überschreiten. Speichern Sie Anwendungskonfigurationen in Azure App Configuration.

Rechteisieren von Umgebungen

Verwenden Sie Leistungsstufen (SKUs) von Azure-Diensten, die die Anforderungen jeder Umgebung erfüllen, ohne sie zu überschreiten. Befolgen Sie die folgenden Empfehlungen, um Ihre Umgebungen zurecht zu machen:

  • Schätzen der Kosten Mit dem Azure-Preisrechner können Sie die Kosten für jede Umgebung abschätzen.

  • Kostenoptimiere Produktionsumgebungen. Produktionsumgebungen benötigen SKUs, die den Vereinbarungen zum Servicelevel (Service Level Agreements, SLA), Features und der Skalierung gerecht werden, die für die Produktion erforderlich sind. Überwachen Sie die Ressourcenauslastung kontinuierlich, und passen Sie SKUs an die tatsächlichen Leistungsanforderungen an.

  • Kostenoptimierung von Vorproduktionsumgebungen.Preproduction-Umgebungen sollten Ressourcen mit niedrigeren Kosten verwenden und Rabatte wie Azure Dev/Test-Preisnutzen. In diesen Umgebungen sollten Sie Dienste deaktivieren, die nicht benötigt werden. Stellen Sie gleichzeitig sicher, dass Vorproduktionsumgebungen ausreichend mit Produktionsumgebungen Umgebungen vergleichbar sind, um Risiken zu vermeiden. Durch die Aufrechterhaltung dieses Gleichgewichts wird sichergestellt, dass tests wirksam bleiben, ohne unnötige Kosten entstehen zu müssen.

  • Verwenden Sie die Infrastruktur als Code (IaC), um SKUs zu definieren. Implementieren Sie IaC, um die richtigen SKUs basierend auf der Umgebung dynamisch auszuwählen und bereitzustellen. Dieser Ansatz verbessert die Konsistenz und vereinfacht die Verwaltung.

Die Referenzimplementierung verfügt beispielsweise über einen optionalen Parameter, der die bereitzustellende SKU angibt. Ein Umgebungsparameter gibt an, dass die Terraform-Vorlage Entwicklungs-SKUs bereitstellen soll:

azd env set APP_ENVIRONMENT prod

Implementieren automatischer Skalierung

Durch die automatische Skalierung wird sichergestellt, dass eine Web-App stabil, reaktionsfähig bleibt und dynamische Workloads effizient verarbeiten kann. Befolgen Sie die folgenden Empfehlungen, um die automatische Skalierung zu implementieren:

  • Automatisieren Sie die horizontale Skalierung. Verwenden Sie Azure-Autoskalierung AutoScale, um die horizontale Skalierung in Produktionsumgebungen zu automatisieren. Konfigurieren Sie automatische Skalierungsregeln, um basierend auf wichtigen Leistungsmetriken zu skalieren, damit Ihre Anwendung unterschiedliche Lasten verarbeiten kann.

  • Verfeinern von Skalierungstriggern. Verwenden Sie die CPU-Auslastung als anfänglichen Skalierungstrigger, wenn Sie mit den Skalierungsanforderungen Ihrer Anwendung nicht vertraut sind. Verfeinern Sie Ihre Skalierungstrigger, um weitere Metriken wie RAM, Netzwerkdurchsatz und Datenträger-E/A einzuschließen. Das Ziel besteht darin, das Verhalten Ihrer Webanwendung für eine bessere Leistung anzupassen.

  • Stellen Sie einen Skalierungspuffer bereit. Legen Sie die Skalierungsschwellenwerte fest, die ausgelöst werden sollen, bevor die maximale Kapazität erreicht wird. Konfigurieren Sie die Skalierung beispielsweise so, dass sie bei einer CPU-Auslastung von 85 % erfolgt, anstatt zu warten, bis sie 100 % erreicht. Dieser proaktive Ansatz trägt dazu bei, die Leistung aufrechtzuerhalten und potenzielle Engpässe zu vermeiden.

Automatische Ressourcenbereitstellung

Verwenden Sie die Automatisierung, um Azure-Ressourcen und -Code in allen Umgebungen bereitzustellen und zu aktualisieren. Befolgen Sie die nachstehenden Empfehlungen:

  • Verwenden Sie Infrastructure-as-Code. Stellen Sie Infrastruktur als Code bereit, indem Sie fortlaufende Integrations- und Kontinuierliche Übermittlungspipelinen (CI/CD) verwenden. Azure bietet vorgefertigte Bicep-, ARM-, JSON- und Terraform-Vorlagen für jede Azure-Ressource.

  • Verwenden SIe eine Pipeline für Continuous Integration (CI) bzw. Continuous Deployment (CD) Verwenden Sie eine CI/CD-Pipeline, um Code aus der Quellcodeverwaltung in Ihren verschiedenen Umgebungen bereitzustellen, z. B. Test, Staging und Produktion. Verwenden Sie Azure-Pipelines, wenn Sie mit Azure DevOps arbeiten. Verwenden Sie GitHub-Aktionen für GitHub-Projekte.

  • Integrieren Sie Komponententests. Priorisieren Sie die Ausführung und Übergabe aller Komponententests innerhalb Ihrer Pipeline, bevor Sie eine Bereitstellung für App Services durchführen. Integrieren Sie Codequalitäts- und Abdeckungstools wie SonarQube, um eine umfassende Testabdeckung zu erzielen.

  • Übernehmen Sie Simulierte Frameworks. Verwenden Sie für Tests, die externe Endpunkte beinhalten, simulierte Frameworks. Mit diesen Frameworks können Sie simulierte Endpunkte erstellen. Auf diese Weise müssen Sie keine echten externen Endpunkte konfigurieren und können einheitliche Testbedingungen in allen Umgebungen sicherstellen.

  • Führen Sie Sicherheitsüberprüfungen durch. Verwenden Sie statische Anwendungssicherheitstests (SAST), um Sicherheitsfehler und Codierungsfehler in Ihrem Quellcode zu finden. Führen Sie außerdem eine Softwarekompositionsanalyse (SCA) durch, um Bibliotheken und Komponenten von Drittanbietern auf Sicherheitsrisiken zu untersuchen. Tools für diese Analysen sind einfach in GitHub und Azure DevOps zu integrieren.

Konfigurieren der Überwachung

Implementieren Sie die Anwendungs- und Plattformüberwachung, um die betriebliche Exzellenz und Leistungsfähigkeit Ihrer Web-App zu verbessern. Befolgen Sie die folgenden Empfehlungen, um die Überwachung zu implementieren:

  • Sammeln Sie Anwendungstelemetriedaten. Verwenden Sie autoinstrumentation in Azure Application Insights, um Anwendungs-Telemetrie-zu sammeln, z. B. Anforderungsdurchsatz, durchschnittliche Anforderungsdauer, Fehler und Abhängigkeitsüberwachung. Sie müssen keinen Code ändern, um diese Telemetrie zu verwenden. Spring Boot registriert mehrere Kernmetriken in Application Insights, z. B. java virtual machine (JVM), CPU, Tomcat und andere. Application Insights sammelt automatisch aus Protokollierungsframeworks wie Log4j und Logback.

    Die Referenzimplementierung verwendet Application Insights, die über Terraform in der Konfiguration des App-Diensts app_settings aktiviert ist:

    app_settings = {
        APPLICATIONINSIGHTS_CONNECTION_STRING = var.app_insights_connection_string
        ApplicationInsightsAgent_EXTENSION_VERSION = "~3"
        ...
    }
    

    Weitere Informationen finden Sie unter:

  • Erstellen Sie benutzerdefinierte Anwendungsmetriken. Implementieren Sie codebasierte Instrumentierung, um benutzerdefinierte Anwendungstelemetrie zu erfassen, indem Sie das Application Insights SDK und dessen API hinzufügen.

  • Überwachen Sie die Plattform. Aktivieren Sie die Diagnose für alle unterstützten Dienste. Senden Sie die Diagnose an dasselbe Ziel wie die Anwendungsprotokolle für die Korrelation. Azure-Dienste erstellen Plattformprotokolle automatisch, speichern sie jedoch nur, wenn Sie die Diagnose aktivieren. Aktivieren Sie Diagnoseeinstellungen für jeden Dienst, der Diagnose unterstützt.

    Die Referenzimplementierung verwendet Terraform, um die Azure-Diagnose für alle unterstützten Dienste zu aktivieren. Der folgende Terraform-Code konfiguriert die Diagnoseeinstellungen für den App-Dienst:

    # Configure diagnostic settings for app service
    resource "azurerm_monitor_diagnostic_setting" "app_service_diagnostic" {
      name                           = "app-service-diagnostic-settings"
      target_resource_id             = azurerm_linux_web_app.application.id
      log_analytics_workspace_id     = var.log_analytics_workspace_id
      #log_analytics_destination_type = "AzureDiagnostics"
    
      enabled_log {
        category_group = "allLogs"
    
      }
    
      metric {
        category = "AllMetrics"
        enabled  = true
      }
    }
    

Bereitstellen der Referenzimplementierung

Die Referenzimplementierung führt Entwickler durch eine simulierte Migration einer lokalen Java-Anwendung zu Azure, wobei Änderungen hervorgehoben werden, die während der ersten Einführungsphase erforderlich sind. In diesem Beispiel wird eine CAMS-Web-App für das fiktive Unternehmen Contoso Fiber verwendet. Contoso Fiber legt die folgenden Ziele für die Webanwendung fest:

  • Implementieren Sie kostengünstige Codeänderungen mit hohem Wert.
  • Erreichen Sie einen SLO von 99,9%.
  • Übernehmen Sie DevOps-Methoden.
  • Erstellen Sie kostenoptimierte Umgebungen.
  • Verbessern Sie Zuverlässigkeit und Sicherheit.

Contoso Fiber hat festgestellt, dass seine lokale Infrastruktur keine kostengünstige Lösung für das Erreichen dieser Ziele darstellte. Sie entschieden, dass die Migration ihrer CAMS-Webanwendung zu Azure die kostengünstigste Möglichkeit war, ihre unmittelbaren und zukünftigen Ziele zu erreichen. Die folgende Architektur stellt den Endzustand der Implementierung des zuverlässigen Web App-Musters von Contoso Fiber dar.

Diagramm der Architektur der Referenzimplementierung. Abbildung 4: Architektur der Referenzimplementierung: Laden Sie eine Visio-Datei dieser Architektur herunter.