Freigeben über


Zuverlässiges Web App-Muster für .NET

Azure App Service
Azure Front Door
Azure Managed Redis
.NET

Dieser Artikel enthält Anleitungen zum Implementieren des zuverlässigen Web App-Musters. Dieses Muster beschreibt, wie Sie Web-Apps für die Cloudmigration replatformieren. Es bietet präskriptive Architektur-, Code- und Konfigurationsanleitungen, die den Prinzipien des Azure Well-Architected Framework entsprechen.

Warum das zuverlässige Web App-Muster für .NET?

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. Es führt nur die Codeupdates durch, die für eine erfolgreiche Ausführung in der Cloud benötigt werden. Die folgende Anleitung verwendet eine Referenzimplementierung als Beispiel. Die Anleitung begleitet den Replattformierungsprozess des fiktiven Unternehmens Relecloud, um Ihnen den Geschäftskontext für Ihr Projekt bereitzustellen. Vor der Implementierung des Zuverlässigen Web App-Musters für .NET hatte Relecloud eine monolithische lokale Ticketing-Web-App, die das ASP.NET Framework verwendet hat.

Tipp

GitHub logo Es gibt eine Referenzimplementierung (Beispiel) des zuverlässigen Web-App-Musters. Sie stellt den Endzustand der Reliable Web App-Implementierung für ein fiktives Unternehmen namens Relecloud 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

Hier finden Sie die spezifischen Anleitungen, die Sie in den folgenden Abschnitten dieses Artikels benötigen:

  • Geschäftskontext: Richten Sie diese Anleitung mit Ihrem Geschäftskontext aus, und lernen Sie, sofortige und langfristige Ziele zu definieren, die die Umformung von Entscheidungen fördern.

  • Architekturleitfaden: Wählen Sie die richtigen Clouddienste aus, und entwerfen Sie eine Architektur, die Ihren Geschäftsanforderungen entspricht.

  • Codeleitfaden: Implementieren sie die Entwurfsmuster "Wiederholen", "Schaltschalter" und "Cache-Aside", um die Zuverlässigkeit und Leistungsfähigkeit Ihrer Web-App in der Cloud zu verbessern.

  • Konfigurationsleitfaden: Konfigurieren von Authentifizierung und Autorisierung, verwaltete Identitäten, rechteisierte Umgebungen, Infrastruktur als Code (IaC) 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 % Betriebszeit. Berechnen Sie die zusammengesetzte SLA für alle Dienste, die sich auf die Verfügbarkeit Ihrer Web-App auswirken.

Beispiel: Relecloud hat eine positive Umsatzprognose und erwartet eine höhere Nachfrage für die Ticket-Web-App. Um diese Anforderung zu erfüllen, hat das Unternehmen die Ziele für die Webanwendung wie folgt definiert:

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

Die lokale Infrastruktur von Relecloud bot keine kostengünstige Lösung, um diese Ziele zu erreichen. Sie haben beschlossen, dass die Migration ihrer 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. Zum Verwalten der Endpunktauflösung, einer Webanwendungsfirewall zum Blockieren bösartigen HTTP-Datenverkehrs und eines Lastenausgleichs zum Weiterleiten und Schützen eingehender Benutzeranforderungen benötigen Sie das Domain Name System (DNS). Die Anwendungsplattform hostet Ihren Web-App-Code und ruft die Back-End-Dienste über private Endpunkte in einem virtuellen Netzwerk auf. Ein Tool zur Anwendungsleistungsüberwachung erfasst Metriken und Protokolle, um Ihre Web-App zu verstehen.

Diagramm, das die wesentlichen Architekturelemente des Zuverlässigen Web App-Musters zeigt.

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.

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 mit den aktuellen Funktionen der lokalen Web-App übereinstimmen. 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 zum Auswählen der richtigen Azure Dienste für Ihre Web-App.

Vor dem Verschieben in die Cloud war releclouds Ticketing Web App beispielsweise eine lokale monolithische ASP.NET-App. Sie wurde auf zwei virtuellen Computern ausgeführt und eine SQL Server Datenbank verwendet. Die Web-App litt unter häufigen Problemen bei der Skalierbarkeit und Featurebereitstellung. Dieser Ausgangspunkt, die geschäftlichen Ziele und das SLO lagen der Auswahl der Dienste zugrunde.

  • Application platform: Verwenden Sie Azure App Service als Anwendungsplattform. Relecloud hat app Service aus folgenden Gründen als Anwendungsplattform ausgewählt:

    • Vereinbarung auf hoher Serviceebene (SLA). Es verfügt über ein hohes SLA, das die Produktionsumgebung SLO von 99,9 % erfüllt.
    • Reduzierter Verwaltungsaufwand. Es ist eine vollständig verwaltete Lösung, die Skalierung, Systemintegritätsprüfungen und Lastverteilung übernimmt.
    • .NET Unterstützung. Sie unterstützt die Version von .NET, in der die Anwendung geschrieben ist.
    • Containerisierungsfähigkeit. Die Web-App kann ohne Containerisierung in der Cloud konvergent werden, aber die Anwendungsplattform unterstützt auch die Containerisierung, ohne Azure Dienste zu ändern.
    • Automatische Skalierung. Die Web-App kann basierend auf Benutzerdatenverkehr und Konfigurationseinstellungen automatisch skaliert und verkleinert werden. Die Plattform unterstützt auch die Skalierung nach oben oder unten, um unterschiedliche Hostinganforderungen zu erfüllen.
  • Identity management: Verwenden Sie Microsoft Entra ID als Identitäts- und Zugriffsverwaltungslösung. Relecloud hat aus folgenden Gründen Microsoft Entra ID ausgewählt:

    • Authentifizierung und Autorisierung. Die Anwendung muss Mitarbeiter des Callcenters authentifizieren und autorisieren.
    • Skalierbar. Microsoft Entra ID skaliert, um größere Szenarien zu unterstützen.
    • Benutzeridentitätskontrolle. 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. Die Web-App von Relecloud verwendete lokal den SQL Server. Sie wollten das vorhandene Datenbankschema, gespeicherte Prozeduren und Funktionen verwenden. Mehrere SQL-Produkte sind auf Azure verfügbar, aber Relecloud hat aus folgenden Gründen Azure SQL Database ausgewählt:

    • Zuverlässigkeit. Die Allzweckstufe bietet ein hohes SLA (Service Level Agreement) und Multi-Region-Redundanz. Es ist für eine hohe Benutzerauslastung geeignet.
    • Reduzierter Verwaltungsaufwand. SQL-Datenbank stellt eine verwaltete SQL-Datenbankinstanz bereit.
    • Migrationsunterstützung. Es unterstützt die Datenbankmigration von lokalen SQL Server.
    • Konsistenz mit lokalen Konfigurationen. Sie unterstützt die vorhandenen gespeicherten Prozeduren, Funktionen und Ansichten.
    • Wiederherstellbarkeit. Unterstützt Sicherungen und Point-in-Time-Wiederherstellung, damit die Datenbank nach einer Unterbrechung in einem vorherigen konsistenten Zustand wiederhergestellt werden kann.
    • Know-how und minimale Überarbeitungen. SQL-Datenbank ermöglicht Relecloud die Nutzung bestehender Kenntnisse und erfordert minimale Arbeit.
  • Anwendungsleistungsüberwachung: Verwenden Sie Application Insights, um Telemetrie für Ihre Anwendung zu analysieren. Relecloud hat sich aus den folgenden Gründen für die Verwendung von Application Insights entschieden:

    • Integration mit Azure Monitor. Es bietet die beste Integration mit 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 Managed Redis ist die primäre Azure Cachelösung. Es ist ein verwalteter Speicher im Arbeitsspeicher, der auf Redis-Software basiert. Der Fokus der Web-App von Relecloud liegt stark auf dem Anzeigen von Konzert- und Veranstaltungsortdetails. Relecloud hat Azure Managed Redis aus folgenden Gründen hinzugefügt:

    • Reduzierter Verwaltungsaufwand. Es ist ein vollständig verwalteter Dienst.
    • Geschwindigkeit und Lautstärke. Sie verfügt über einen 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 für alle Zu verwendenden Instanzen der Web-App.
    • Externer Datenspeicher. Die lokalen Anwendungsserver haben VM-lokales Caching ausgeführt. Bei diesem Setup wurden häufig verwendete Daten nicht ausgelagert, und Daten konnten nicht ungültig gemacht werden.
    • Nicht-bindende Sitzungen. Das Externalisieren des Sitzungszustands unterstützt nichtstickige Sitzungen.
  • Load balancer: Webanwendungen, die PaaS-Lösungen verwenden, sollten je nach Web-App-Architektur und -Anforderungen Azure Front Door, Azure Application Gateway oder beides verwenden. Verwenden Sie die Entscheidungsstruktur des Load Balancer , um das richtige Lastenausgleichsmodul auszuwählen. Relecloud benötigte einen Layer-7-Load Balancer, der den Datenverkehr durch mehrere Regionen leiten kann. Das Unternehmen brauchte eine mehrregionale Web-App, um den SLO von 99,9 % zu erfüllen.

    Relecloud hat aus folgenden Gründen Azure Front Door ausgewählt:

    • Globaler Lastenausgleich. Es ist ein Layer-7-Load-Balancer, der den Datenverkehr über mehrere Regionen verteilen kann.
    • Webanwendungsfirewall. Es wird nativ in Azure Web Application Firewall integriert.
    • Routing-Flexibilität. Es ermöglicht dem Applikationsteam, die Ingress-Anforderungen zu konfigurieren, um zukünftige Änderungen der Applikation zu unterstützen.
    • Verkehrsbeschleunigung. Er leitet den Datenverkehr an einen optimalen Anwesenheitspunkt weiter, um die schnellste Route zur Web-App zu finden.
    • Benutzerdefinierte Domänen. Sie unterstützt benutzerdefinierte Domänennamen mit flexibler Domänenüberprüfung.
    • Gesundheitsprüfungen. Die Anwendung erfordert intelligente Gesundheitsüberwachung. Azure Front Door verwendet Antworten vom Prüfpunkt, um den besten Ursprung für das Weiterleiten von Clientanforderungen zu ermitteln.
    • Unterstützung für die Überwachung. Es 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 sind. Azure Front Door ermöglicht der Anwendung, jede Anforderung und fehlgeschlagene Gesundheitsprüfungen zu protokollieren.
    • DDoS-Schutz. Es verfügt über einen integrierten DDoS-Schutz der Ebene 3-4.
    • Netzwerk für die Inhaltsübermittlung. Es positioniert Relecloud für die Verwendung eines Content Delivery Networks (CDN). Das Netzwerk zur Bereitstellung von Inhalten ermöglicht die Beschleunigung der Website.
  • Webanwendungsfirewall: Verwenden Sie Azure Web Application Firewall, um einen zentralen Schutz vor allgemeinen Web-Exploits und Sicherheitsrisiken bereitzustellen. Relecloud verwendet Azure Web Application Firewall aus folgenden Gründen:

    • 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 Vor-Ort-Systemen. Die lokale Lösung wurde hinter einer von der IT verwalteten Webanwendungsfirewall ausgeführt.
    • Benutzerfreundlichkeit. Web Application Firewall in Azure Front Door integriert.
  • Konfigurationsspeicher: Legen Sie fest, ob Ihrer Web-App ein App-Konfigurationsspeicher hinzugefügt werden soll. Azure App Configuration ist ein Dienst für die zentrale Verwaltung von Anwendungseinstellungen und Featurekennzeichnungen. Machen Sie sich mit bewährten Methoden für Azure App Configuration vertraut, um zu entscheiden, ob dieser Dienst für Ihre App geeignet ist. Relecloud wollte die dateibasierte Konfiguration durch einen zentralen Konfigurationsspeicher ersetzen, der in die Anwendungsplattform und in den Code integriert werden kann. Sie haben App Configuration aus den folgenden Gründen zur Architektur hinzugefügt:

    • Flexibilität. Es unterstützt Feature-Flags. Featurekennzeichnungen ermöglichen Benutzern das Anmelden und Abmelden von Early Preview-Features in einer Produktionsumgebung, ohne dass eine erneute Bereitstellung der App erforderlich ist.
    • Git-Pipelineunterstützung. Die Quelle der Wahrheit für Konfigurationsdaten sollte ein Git-Repository sein. Die Pipeline musste die Daten im zentralen Konfigurationsspeicher aktualisieren.
    • Unterstützung für verwaltete Identitäten. Es unterstützt verwaltete Identitäten, um die Verbindung mit dem Konfigurationsspeicher zu vereinfachen und zu sichern.
  • Secrets manager: Verwenden Sie Azure Key Vault, wenn Sie geheime Schlüssel zum Verwalten in Azure haben. Sie können Key Vault in .NET Apps integrieren, indem Sie das objekt ConfigurationBuilder verwenden. Die lokale Web-App von Relecloud speichert geheime Schlüssel in Codekonfigurationsdateien, aber eine bessere Sicherheitspraxis besteht darin, geheime Schlüssel an einem Speicherort zu speichern, der Azure rollenbasierte Zugriffssteuerung (Azure RBAC) und Überwachungssteuerelemente unterstützt. Obwohl managed-Identitäten die bevorzugte Lösung für die Verbindung mit Azure Ressourcen sind, hatte Relecloud Anwendungsgeheimnisse, die sie zum Verwalten benötigten. Relecloud hat aus folgenden Gründen Key Vault verwendet:

    • Verschlüsselung. Es unterstützt Verschlüsselung im Ruhezustand und während der Übertragung.
    • 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 gespeicherte geheime Schlüssel geändert werden.
    • Integration. Key Vault bietet native Integration mit dem Azure Konfigurationsspeicher (App-Konfiguration) und der Webhostingplattform (App Service).
  • Storage solution: Siehe Azure Speicheroptionen, um die richtige Speicherlösung basierend auf Ihren Anforderungen zu wählen. In der lokalen Web-App von Relecloud gab es auf jedem Webserver einen Datenträgerspeicher. Das Team wollte jedoch eine externe Datenspeicherlösung verwenden. Relecloud hat Azure Blob Storage aus folgenden Gründen ausgewählt:

    • Erweiterter Sicherheitszugriff. Die Web-App kann Endpunkte für den Zugriff auf Speicher beseitigen, der für das öffentliche Internet mit anonymen Zugriff verfügbar gemacht wird.
    • Verschlüsselung. Blob Storage verschlüsselt Daten im Ruhezustand und während der Übertragung.
    • Elastizität. Blob Storage unterstützt zonenredundanten Speicher (ZRS). Zonenredundanter Speicher repliziert Daten synchron über drei Azure Verfügbarkeitszonen in der primären Region. Jede Verfügbarkeitszone ist ein getrennter physischer Standort mit unabhängiger Stromversorgung und Kühlung sowie mit einem unabhängigen Netzwerk. Diese Konfiguration sollte die Ticket-Images vor Verlust schützen.
  • Endpoint security: Verwenden Sie Azure Private Link für den Zugriff auf Plattform as a Service(PaaS)-Lösungen über einen privaten Endpunkt in Ihrem virtuellen Netzwerk. Datenverkehr zwischen Ihrem virtuellen Netzwerk und dem Dienst wird über das Microsoft-Backbone-Netzwerk übertragen. Relecloud hat aus folgenden Gründen Private Link gewählt:

    • Verbesserte Sicherheitskommunikation. Private Link ermöglicht der Anwendung den privaten Zugriff auf Dienste auf der Azure-Plattform und reduziert den Netzwerkbedarf von Datenspeichern, um den Schutz vor Datenlecks zu ermöglichen.
    • 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 eingehenden 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. Relecloud hat eine Hub-and-Spoke-Netzwerktopologie eingeführt und wollte gemeinsam genutzte Netzwerksicherheitsdienste im Hub platzieren. Azure Firewall verbessert die Sicherheit, indem der gesamte ausgehende Datenverkehr von den Speichen überprüft wird, um die Netzwerksicherheit zu erhöhen. Relecloud benötigte Azure Bastion für erweiterte Sicherheitsbereitstellungen von einem Sprunghost im DevOps-Subnetz.

Kostenschätzung der Architektur

Sie finden eine Kostenschätzung für die in dieser Architektur verwendeten Komponenten im Azure Preisrechner. Ändern Sie Ihre Schätzung so, dass sie die für Ihren Anwendungsfall erforderlichen Komponenten enthält.

Anleitung zum Code

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

Diagramm, das die Rollen von Entwurfsmustern im Zuverlässigen Web App-Muster zeigt.

Die folgenden Entwurfsmuster bieten Arbeitsauslastungsvorteile, die einer oder mehreren der Well-Architected Framework-Säulen zugeordnet sind:

  1. 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. 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. 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 (SE) Kostenoptimierung (Cost Optimization, CO) Erstklassige Betriebsprozesse (Operational Excellence, OE) Leistungseffizienz (Performance Efficiency, PE) Unterstützung von WAF-Prinzipien
Wiederholungsmuster RE:07
Schaltkreisunterbrechungsmuster RE:03
RE:07
PE:07
PE:11
Cache-Aside-Muster RE:05
PE:08
PE:12

Implementiere das Wiederholungsmuster

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 lösen sich in der Regel innerhalb von Sekunden auf. Sie können das Wiederholungsmuster verwenden, um fehlgeschlagene Anforderungen nochmals zu senden. Außerdem können Sie die Verzögerung zwischen den Wiederholungen und die Anzahl der Versuche, die unternommen werden sollen, konfigurieren, bevor ein Fehler zugegeben wird.

  • Verwenden Sie integrierte Wiederholungsmechanismen. Verwenden Sie den integrierten Wiederholungsmechanismus, den die meisten Azure Dienste bereitstellen, um Ihre Implementierung zu beschleunigen. Die Referenzimplementierung verwendet beispielsweise Verbindungsresilienz in Entity Framework Core, um das Wiederholungsmuster in Anfragen an der SQL-Datenbank anzuwenden.

    services.AddDbContextPool<ConcertDataContext>(options => options.UseSqlServer(sqlDatabaseConnectionString,
        sqlServerOptionsAction: sqlOptions =>
        {
            sqlOptions.EnableRetryOnFailure(
            maxRetryCount: 5,
            maxRetryDelay: TimeSpan.FromSeconds(3),
            errorNumbersToAdd: null);
        }));
    
  • Verwenden Sie Wiederholungsprogrammierungsbibliotheken. Integrieren Sie für DIE HTTP-Kommunikation eine Standardresilienzbibliothek wie Polly oder Microsoft.Extensions.Http.Resilience. Diese Bibliotheken bieten umfassende Wiederholungsmechanismen, die für die Verwaltung der Kommunikation mit externen Webdiensten von entscheidender Bedeutung sind. Beispielsweise verwendet die Referenzimplementierung Polly, um das Wiederholungsmuster jedes Mal zu erzwingen, wenn der Code ein Objekt erstellt, das das IConcertSearchService-Objekt aufruft:

    private void AddConcertSearchService(IServiceCollection services)
    {
        var baseUri = Configuration["App:RelecloudApi:BaseUri"];
        if (string.IsNullOrWhiteSpace(baseUri))
        {
            services.AddScoped<IConcertSearchService, MockConcertSearchService>();
        }
        else
        {
            services.AddHttpClient<IConcertSearchService, RelecloudApiConcertSearchService>(httpClient =>
            {
                httpClient.BaseAddress = new Uri(baseUri);
                httpClient.DefaultRequestHeaders.Add(HeaderNames.Accept, "application/json");
                httpClient.DefaultRequestHeaders.Add(HeaderNames.UserAgent, "Relecloud.Web");
            })
            .AddPolicyHandler(GetRetryPolicy())
            .AddPolicyHandler(GetCircuitBreakerPolicy());
        }
    }
    
    private static IAsyncPolicy<HttpResponseMessage> GetRetryPolicy()
    {
        var delay = Backoff.DecorrelatedJitterBackoffV2(TimeSpan.FromMilliseconds(500), retryCount: 3);
        return HttpPolicyExtensions
          .HandleTransientHttpError()
          .OrResult(msg => msg.StatusCode == System.Net.HttpStatusCode.NotFound)
          .WaitAndRetryAsync(delay);
    }
    

Implementieren des Trennschaltermusters

Verwenden Sie das Circuit Breaker-Muster, um Dienstunterbrechungen zu behandeln, bei denen es sich nicht um vorübergehende Fehler handelt. Das Circuit Breaker-Muster verhindert, dass eine Anwendung fortlaufend versucht, auf einen nicht reagierenden Dienst zuzugreifen. Sie setzt die Anwendung frei und hilft, Zyklen der zentralen Verarbeitungseinheit (CPU) zu sparen, sodass die Anwendung ihre Leistungsintegrität für Benutzer behält.

Die Referenzimplementierung wendet z. B. das Circuit Breaker-Muster auf alle Anforderungen an die API an. Es verwendet die HandleTransientHttpError-Logik, um HTTP-Anforderungen zu erkennen, die sie sicher wiederholen kann, aber die Anzahl der Aggregatfehler über einen bestimmten Zeitraum beschränkt:

private static IAsyncPolicy<HttpResponseMessage> GetCircuitBreakerPolicy()
{
    return HttpPolicyExtensions
        .HandleTransientHttpError()
        .OrResult(msg => msg.StatusCode == System.Net.HttpStatusCode.NotFound)
        .CircuitBreakerAsync(5, TimeSpan.FromSeconds(30));
}

Implementierung 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. Produktions-Apps sollten einen verteilten Redis-Cache verwenden. Dieser Cache verbessert die Leistung, indem Datenbankabfragen reduziert werden. Außerdem werden nichtstickige Sitzungen aktiviert, sodass der Lastenausgleich den Datenverkehr gleichmäßig verteilen kann. Die Referenzimplementierung verwendet einen verteilten Redis-Cache. Die Methode AddRedisCache konfiguriert die Anwendung für die Verwendung von Azure Managed Redis:

    private void AddRedisCache(IServiceCollection services)
    {
        if (!string.IsNullOrWhiteSpace(Configuration["App:RedisCache:ConnectionString"]))
        {
            services.AddStackExchangeRedisCache(options =>
            {
                options.Configuration = Configuration["App:RedisCache:ConnectionString"];
            });
        }
        else
        {
            services.AddDistributedMemoryCache();
        }
    }
    
  • 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. Beispiel: Die Referenzimplementierung speichert die stark nachgefragten Daten im Cache für die Seite „Bevorstehende Konzerte“. Die GetUpcomingConcertsAsync-Methode ruft Daten aus der SQL-Datenbank in den Redis-Cache ab und füllt den Cache mit den neuesten Konzertdaten auf:

    public async Task<ICollection<Concert>> GetUpcomingConcertsAsync(int count)
    {
        IList<Concert>? concerts;
        var concertsJson = await this.cache.GetStringAsync(CacheKeys.UpcomingConcerts);
        if (concertsJson != null)
        {
            // There is cached data. Deserialize the JSON data.
            concerts = JsonSerializer.Deserialize<IList<Concert>>(concertsJson);
        }
        else
        {
            // There's nothing in the cache. Retrieve data 
            // from the repository and cache it for one hour.
            concerts = await this.database.Concerts.AsNoTracking()
                .Where(c => c.StartTime > DateTimeOffset.UtcNow && c.IsVisible)
                .OrderBy(c => c.StartTime)
                .Take(count)
                .ToListAsync();
            concertsJson = JsonSerializer.Serialize(concerts);
            var cacheOptions = new DistributedCacheEntryOptions {
                AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(1)
            };
            await this.cache.SetStringAsync(CacheKeys.UpcomingConcerts, concertsJson, cacheOptions);
        }
        return concerts ?? new List<Concert>();
    }
    
  • 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. Beispielsweise speichert die Referenzimplementierung Daten nur eine Stunde lang zwischen und verwendet die CreateConcertAsync-Methode, um den Cacheschlüssel zu löschen, wenn sich die Daten ändern:

    public async Task<CreateResult> CreateConcertAsync(Concert newConcert)
    {
        database.Add(newConcert);
        await this.database.SaveChangesAsync();
        this.cache.Remove(CacheKeys.UpcomingConcerts);
        return CreateResult.SuccessResult(newConcert.Id);
    }
    
  • 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. Die Referenzimplementierung verwendet die UpdateConcertAsync-Methode, um die Daten im Cache konsistent zu halten:

    public async Task<UpdateResult> UpdateConcertAsync(Concert existingConcert), 
    {
       database.Update(existingConcert);
       await database.SaveChangesAsync();
       this.cache.Remove(CacheKeys.UpcomingConcerts);
       return UpdateResult.SuccessResult();
    }
    

Anleitung zur Konfiguration

In den folgenden Abschnitten finden Sie Anleitungen zum Implementieren der Konfigurationsupdates. Jeder Abschnitt stimmt mit einer oder mehreren Säulen des Well-Architected Framework überein.

Konfiguration Zuverlässigkeit (Reliability, RE) Sicherheit (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.

  • 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.

  • Verwenden Sie Plattformfunktionen. Minimieren Sie die Notwendigkeit von benutzerdefiniertem Authentifizierungscode, indem Sie Plattformfunktionen verwenden, um Benutzer zu authentifizieren und auf Daten zuzugreifen. Beispielsweise bietet App Service integrierte Authentifizierungsunterstützung, sodass Sie Benutzer anmelden und auf Daten zugreifen können, während Sie minimalen oder keinen Code in Ihrer Web-App schreiben.

  • Erzwingen Sie die Autorisierung in der Anwendung. Verwenden Sie Azure RBAC, um Anwendungsrollen am wenigsten 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 auf erforderliche Ressourcen und Aktionen zugreifen können.

  • 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. Shared Access Signatures (SAS) verwenden, um den Zugriff für einen bestimmten Zeitraum zu begrenzen. Verwenden Sie die SAS-Benutzerdelegierung, um die Sicherheit zu maximieren, wenn Sie temporären Zugriff gewähren. Es ist die einzige SAS, die Microsoft Entra ID Anmeldeinformationen verwendet und keinen dauerhaften Speicherkontoschlüssel erfordert.

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

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

Verwenden von verwalteten Identitäten

Verwenden Sie managed-Identitäten für alle Azure Dienste, die sie unterstützen. Eine verwaltete Identität ermöglicht Azure Ressourcen, insbesondere Workload-Identitäten, sich bei anderen Azure Diensten zu authentifizieren und zu interagieren, 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. Bevorzugen Sie vom Benutzer zugewiesene verwaltete Identitäten, 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. Erstellen, Lesen, Aktualisieren und Löschen (CRUD)-Aktionen in Datenbanken oder Zugreifen auf geheime Schlüssel. Workload-Identitätsberechtigungen sind persistent, sodass Sie JIT- oder kurzfristige Berechtigungen für Workload-Identitäten nicht bereitstellen können. Wenn Azure RBAC kein bestimmtes Szenario abdeckt, ergänzen Sie Azure RBAC mit Azure Zugriffsrichtlinien auf Dienstebene.

  • Stellen Sie Sicherheit für verbleibende Geheimnisse bereit. Speichern Sie alle verbleibenden geheimen Schlüssel in Key Vault. Laden Sie geheime Schlüssel von Key Vault beim Starten der Anwendung statt während jeder HTTP-Anforderung. Der Hochfrequenzzugriff in HTTP-Anforderungen kann Key Vault Transaktionsgrenzwerte überschreiten. Anwendungskonfigurationen in App Configuration speichern.

Die Referenzimplementierung verwendet das Argument Authentication in der SQL-Datenbank-Verbindungszeichenfolge, sodass der App-Dienst eine Verbindung mit der SQL-Datenbank herstellen kann unter Verwendung einer verwalteten Identität: Server=tcp:my-sql-server.database.windows.net,1433;Initial Catalog=my-sql-database;Authentication=Active Directory Default. Es verwendet DefaultAzureCredential, damit die Web-API mithilfe einer verwalteten Identität eine Verbindung mit Key Vault herstellen kann:

    builder.Configuration.AddAzureAppConfiguration(options =>
    {
         options
            .Connect(new Uri(builder.Configuration["Api:AppConfig:Uri"]), new DefaultAzureCredential())
            .ConfigureKeyVault(kv =>
            {
                // Some of the values coming from App Configuration
                // are stored in Key Vault. Use the managed identity
                // of this host for the authentication.
                kv.SetCredential(new DefaultAzureCredential());
            });
    });

Rechteisieren von Umgebungen

Verwenden Sie Leistungsstufen (SKUs) von Azure Diensten, die den Anforderungen jeder Umgebung entsprechen, ohne sie zu überschreiten. Um Ihre Umgebungen anzupassen, führen Sie die folgenden Aktionen aus:

  • Schätzen der Kosten Verwenden Sie den Azure Preisrechner, um die Kosten der einzelnen Umgebungen zu schätzen.

  • Optimieren Sie Produktionsumgebungen. Produktionsumgebungen benötigen SKUs, die SLA, Features und Skalierung erfüllen, die für die Produktion erforderlich sind. Überwachen Sie die Ressourcenauslastung kontinuierlich, und passen Sie SKUs an die tatsächlichen Leistungsanforderungen an.

  • Optimieren Sie Preproduction-Umgebungen.Preproduction-Umgebungen sollten kostengünstige Ressourcen verwenden und Rabatte wie den Azure-Plan für Entwickler-/Testpreise nutzen. Deaktivieren Sie in diesen Umgebungen dienste, die nicht benötigt werden. Stellen Sie außerdem sicher, dass Preproduction-Umgebungen ausreichend mit Produktionsumgebungen vergleichbar sind , um Risiken zu vermeiden. Halten Sie dieses Gleichgewicht aufrecht, um sicherzustellen, dass die Tests wirksam bleiben, ohne unnötige Kosten zu verursachen.

  • Verwenden Sie 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 verwendet beispielsweise Bicep-Parameter, um teurere Stufen (SKUs) in der Produktionsumgebung einzusetzen.

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:

  • Automate scale-out. Verwenden Sie Azure 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.

  • Skalierungstrigger verfeinern. 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ägereingabe/Ausgabe (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, um die Skalierung zu initiieren, 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 IaC. Stellen Sie IaC mithilfe von Pipelines für kontinuierliche Integration und kontinuierliche Bereitstellung (CI/CD) bereit. Azure stellt vorgefertigte Bicep Vorlagen, Azure Resource Manager JSON-Vorlagen (ARM-Vorlagen) und Terraform-Vorlagen für jede Azure Ressource bereit.

  • Verwenden Sie eine CI/CD-Pipeline. 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 Actions für GitHub Projekte.

  • Integrieren Sie Komponententests. Priorisieren Sie die Ausführung und Überprüfung aller Komponententests in Ihrer Pipeline vor der Bereitstellung in App Service. Integrieren Sie Codequalitäts- und Abdeckungstools wie SonarQube, um eine umfassende Testabdeckung zu erzielen.

  • Übernehmen Sie Mocking-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 eine Softwarekompositionsanalyse (SCA) durch, um Nicht-Microsoft-Bibliotheken und -Komponenten auf Sicherheitsrisiken zu untersuchen. Integrieren Sie Tools für diese Analysen sowohl in GitHub als auch in Azure DevOps.

Implementieren von Ü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 die Azure Monitor OpenTelemetry Distro, um Anwendungs-telemetry in Application Insights zu sammeln, z. B. Anforderungsdurchsatz, durchschnittliche Anforderungsdauer, Fehler und Abhängigkeitsüberwachung.

    Die Referenzimplementierung fügt das Azure.Monitor.OpenTelemetry.AspNetCore NuGet-Paket hinzu und aktiviert die Telemetriedatenerfassung:

    var builder = WebApplication.CreateBuilder(args);
    
    builder.Services.AddOpenTelemetry().UseAzureMonitor();
    
  • Erstellen Sie benutzerdefinierte Anwendungsmetriken. Verwenden Sie Code-Instrumentierung für benutzerdefinierte Anwendungs-Telemetrie. Verwenden Sie die OpenTelemetry-APIs (ActivitySource, Meter), um benutzerdefinierte Traces und Metriken zu Application Insights zu senden.

    Die Referenzimplementierung sammelt Telemetriedaten zu Ereignissen, die sich auf die Warenkorbaktivität beziehen. Es verwendet eine ActivitySource Zeitspanne, um zu erfassen, wann Tickets zum Warenkorb hinzugefügt werden.

    using var activity = activitySource.StartActivity("AddToCart");
    activity?.SetTag("ConcertId", concertId.ToString());
    activity?.SetTag("Count", count.ToString());
    
  • Ü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.

Bereitstellen der Referenzimplementierung

Die Referenzimplementierung führt Entwickler durch eine simulierte Migration von einer lokalen ASP.NET Anwendung zu Azure, wobei Änderungen hervorgehoben werden, die während der ersten Einführungsphase erforderlich sind. In diesem Beispiel wird eine Konzertticketing-Anwendung für das fiktive Unternehmen Relecloud verwendet, das Tickets über seine lokale Webanwendung verkauft. Relecloud legt die folgenden Ziele für ihre Webanwendung fest:

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

Relecloud hat festgestellt, dass ihre lokale Infrastruktur keine kostengünstige Lösung für die Erfüllung dieser Ziele war. Sie haben beschlossen, dass die Migration ihrer Webanwendung zu Azure die kostengünstigste Möglichkeit war, ihre unmittelbaren und zukünftigen Ziele zu erreichen. Die folgende Architektur stellt den Endzustand der Zuverlässigen Web App-Musterimplementierung von Relecloud dar.

Diagramm, das die Architektur der Referenzimplementierung zeigt.

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