Freigeben über


Bereitstellen von Microservices mit Azure Container Apps und Dapr

Azure Container Apps
.NET
Azure SQL-Datenbank
Azure Cosmos DB
Azure Cache for Redis

In diesem Artikel wird eine Lösung zum Ausführen eines Auftragsverwaltungssystems mit 10 Microservices in Azure-Container-Apps beschrieben. Die Lösung verwendet auch bewährte Methoden für Microservices über distributed Application Runtime (Dapr) und ereignisgesteuerte Skalierung mit kubernetes ereignisgesteuerter automatischer Skalierung (KEDA).

Dapr und Traefik sind Marken der jeweiligen Unternehmen. Die Verwendung dieser Marken impliziert keine Empfehlung.

Aufbau

Diagramm, das ein Auftragsverwaltungssystem mit Microservices in Container-Apps zeigt.

Laden Sie eine PowerPoint-Datei zu dieser Architektur herunter.

Datenfluss

Diese Lösung beschreibt ein fiktives Red Dog Order Management System und seine unterstützende Azure-Infrastruktur. Die Architektur besteht aus einer einzelnen Container-Apps-Umgebung, in der 10 .NET Core Microservice-Anwendungen gehostet werden. Die Lösung verwendet das Dapr SDK für die Integration in Azure-Ressourcen über Bausteine für Veröffentlichungsabonnent, Status und Bindung. Die Dienste verwenden auch KEDA-Skalierungsregeln, um die Skalierung basierend auf Ereignistriggern und Skalierungs-zu-Null-Szenarien zu ermöglichen.

Der folgende Datenfluss entspricht dem vorherigen Diagramm:

  1. Traefik: Der grundlegende Proxy für das Routing von Benutzeranfragen von der Benutzeroberfläche zu den Abrechnungs- und Makeline-Diensten für das interaktive Dashboard.

  2. UI: Ein Dashboard, das Echtzeitreihenfolgen und aggregierte Verkaufsdaten für das Red Dog-Bestellverwaltungssystem anzeigt.

  3. Virtueller Kunde: Ein Kundensimulationsprogramm, das simuliert, wie Kunden über den Bestelldienst Bestellungen aufgeben.

  4. Bestellservice: Eine API zum Erstellen, Lesen, Aktualisieren und Löschen von Aufträgen.

  5. Buchhaltungsdienst: Ein Dienst, der Auftragsdaten verarbeitet, speichert und aggregiert. Es wandelt Kundenaufträge in aussagekräftige Verkaufsmetriken um, die die Benutzeroberfläche präsentiert.

  6. Belegdienst: Ein Archivprogramm, das Bestellbestätigungen für Überwachungs- und historische Zwecke generiert und speichert.

  7. Treuedienst: Ein Dienst, der das Treueprogramm verwaltet, indem er die Belohnungspunkte der Kunden auf der Grundlage der getätigten Bestellungen verfolgt.

  8. Makeline-Dienst: Ein Dienst, der eine Warteschlange der aktuellen Bestellungen verwaltet, die auf die Erfüllung warten. Er verfolgt die Bearbeitung und Fertigstellung der Bestellungen durch den virtuellen Arbeitsdienst.

  9. Virtueller Mitarbeiter: Ein Arbeitssimulationsprogramm, das die Fertigstellung von Kundenbestellungen simuliert.

Dienst Eingehende Daten Dapr-Komponenten KEDA-Skalierungsregeln
Traefik Extern Dapr nicht aktiviert HTTP
Benutzeroberfläche Intern Dapr nicht aktiviert HTTP
Virtueller Kunde Keine Dienst-zu-Dienst-Aufruf
Bestelldienst Intern Publish-subscribe: Azure Service Bus HTTP
Buchhaltungsdienst Intern Publish-subscribe: Service Bus Länge des Servicebusthemas, HTTP
Belegdienst Intern Publish-subscribe: Service Bus
Bindung: Azure Blob Storage
Länge des Servicebusthemas
Treuedienst Intern Publish-subscribe: Service Bus
Status: Azure Cosmos DB
Länge des Servicebusthemas
Makeline-Dienst Intern Publish-subscribe: Service Bus
Status: Azure Cache für Redis
Länge des Servicebusthemas, HTTP
Virtueller Mitarbeiter Keine Dienst-zu-Dienst-Aufruf
Bindung: Cron

Hinweis

Sie können bootstrap auch in einer Container-App implementieren. Dieser Dienst wird jedoch einmal ausgeführt, um die Datenbankerstellung durchzuführen und dann auf Null zu skalieren, nachdem die erforderlichen Objekte in der Azure SQL-Datenbank erstellt wurden.

Komponenten

  • Application Insights ist ein erweiterbarer Dienst zur Anwendungsleistungsverwaltung, mit dem Sie Liveanwendungen überwachen und Leistungsanomalien automatisch erkennen können. In dieser Architektur verwenden Sie Application Insights mit Azure Monitor, um die Containerprotokolle anzuzeigen und Metriken aus den Microservices zu sammeln.

  • Blob Storage ist eine cloudbasierte Lösung zum Speichern massiver Mengen unstrukturierter Daten wie Text oder Binärdateien. In dieser Architektur verwendet ein Belegdienst Blob Storage über eine Dapr-Ausgabebindung, um die Bestellbestätigungen zu speichern.

  • Azure Cache for Redis ist ein verteilter, speicherinterner, skalierbarer verwalteter Redis-Cache. In dieser Architektur wird sie als Dapr-Zustandsspeicherkomponente für den Makeline-Dienst verwendet, um Daten in den bestellungen zu speichern, die verarbeitet werden.

  • Azure Cosmos DB ist ein NoSQL-Datenbankdienst mit mehreren Modellen. In dieser Architektur wird sie als Dapr State Store-Komponente für den Treuedienst verwendet, um die Kundenbindungsdaten zu speichern.

  • Azure Monitor ist eine einheitliche Plattform, mit der Sie Kundeninhaltsdaten aus Ihren Azure-Infrastrukturumgebungen sammeln, analysieren und darauf reagieren können. In dieser Architektur verwenden Sie Azure Monitor mit Application Insights , um die Containerprotokolle anzuzeigen und Metriken aus den Microservices zu sammeln.

  • Service Bus ist ein vollständig verwalteter Unternehmensnachrichtenbroker mit Warteschlangen und Themen zum Veröffentlichen von Abonnements. In dieser Architektur verwenden Sie Service Bus für die Implementierung der Komponente "Dapr veröffentlichen-abonnieren". Mehrere Dienste verwenden diese Komponente. Der Bestelldienst veröffentlicht Nachrichten auf dem Bus, und die Makeline-, Buchhaltungs-, Treue- und Belegdienste abonnieren diese Nachrichten.

  • Container-Apps ist ein vollständig verwalteter, serverloser Containerdienst, der zum Erstellen und Bereitstellen moderner Apps im großen Maßstab verwendet wird. In dieser Architektur hosten Sie alle 10 Microservices in Container-Apps und stellen sie in einer einzigen Container-Apps-Umgebung bereit. Diese Umgebung dient als sichere Grenze um das System.

  • SQL-Datenbank ist ein intelligenter, skalierbarer, relationaler Datenbankdienst, der für die Cloud erstellt wurde. In dieser Architektur dient sie als Datenspeicher für den Buchhaltungsdienst, der Entity Framework Core für die Schnittstelle mit der Datenbank verwendet. Der Bootstrapperdienst ist für das Einrichten der SQL-Tabellen in der Datenbank verantwortlich. Anschließend wird sie einmal ausgeführt, bevor sie die Verbindung mit dem Buchhaltungsdienst herstellt.

  • Traefik ist ein Reverseproxy und ein Lastenausgleichsmodul, der zum Weiterleiten des Netzwerkdatenverkehrs an Microservices verwendet wird. Verwenden Sie in dieser Architektur das dynamische Konfigurationsfeature von Traefik, um pfadbasiertes Routing über die Benutzeroberfläche durchzuführen, bei dem es sich um eine Vue.js Einzelseitenanwendung handelt. Diese Konfiguration ermöglicht auch direkte API-Aufrufe an die Back-End-Dienste zum Testen.

Alternativen

In dieser Architektur stellen Sie einen Traefik-Proxy bereit, um pfadbasiertes Routing für die Vue.js-API zu ermöglichen. Es gibt viele andere Open-Source-Proxys, die Sie für diesen Zweck verwenden können. Zwei weitere gängige Projekte sind NGINX und HAProxy.

Alle Azure-Infrastruktur, mit Ausnahme der SQL-Datenbank, verwendet Dapr-Komponenten für die Interoperabilität. Ein Vorteil von Dapr ist, dass Sie all diese Komponenten austauschen können, indem Sie die Bereitstellungskonfiguration der Container-Apps ändern. In diesem Szenario präsentieren Service Bus, Azure Cosmos DB, Azure Cache für Redis und Blob Storage einige der mehr als 70 verfügbaren Dapr-Komponenten. Eine Liste der alternativen Veröffentlichungsabonnentbroker, Statusspeicher und Ausgabebindungen sind in den Dapr-Dokumenten verfügbar.

Szenariodetails

Microservices sind ein weit verbreiteter Architekturstil. Sie bieten Vorteile wie Skalierbarkeit, Agilität und unabhängige Bereitstellungen. Sie können Container als Mechanismus zum Bereitstellen von Microservices-Anwendungen verwenden und dann einen Containerorchestrator wie Kubernetes verwenden, um Vorgänge zu vereinfachen. Es gibt viele Faktoren, die für groß angelegte Microservices-Architekturen berücksichtigt werden müssen. In der Regel erfordert die Infrastrukturplattform ein erhebliches Verständnis komplexer Technologien wie Container-Orchestratoren.

Container-Apps ist ein vollständig verwalteter serverloser Containerdienst für die Ausführung moderner Anwendungen im großen Maßstab. Sie können containerisierte Apps über eine Abstraktion der zugrunde liegenden Plattform bereitstellen. Mit dieser Methode müssen Sie keine komplizierte Infrastruktur verwalten.

Diese Architektur verwendet die Container-Apps-Integration mit einer verwalteten Version von Dapr. Dapr ist ein Open-Source-Projekt, das Entwicklern hilft, die inhärenten Herausforderungen in verteilten Anwendungen zu überwinden, z. B. Zustandsverwaltung und Dienstaufrufe.

Container-Apps bieten auch eine verwaltete Version von KEDA. MIT KEDA können Ihre Container automatisch basierend auf eingehenden Ereignissen von externen Diensten wie Service Bus und Azure Cache für Redis skaliert werden.

Sie können auch HTTPS-Eingangsvorgänge in Container-Apps aktivieren, ohne weitere Azure-Netzwerkressourcen zu erstellen. Sie können Envoy-Proxy verwenden, der auch Szenarien zur Verkehrsaufteilung ermöglicht.

Weitere Informationen finden Sie unter "Vergleichen von Container-Apps mit anderen Azure-Containeroptionen".

In diesem Artikel wird eine Lösung zum Ausführen eines Auftragsverwaltungssystems mit 10 Microservices für Container-Apps beschrieben. Die Lösung nutzt außerdem bewährte Methoden für Microservices durch Dapr und ereignisgesteuerte Skalierung mit KEDA.

Mögliche Anwendungsfälle

Diese Lösung gilt für jede Organisation, die zustandslose und zustandsbehaftete Mikroservices für verteilte Systeme verwendet. Die Lösung eignet sich am besten für Konsumgüter- und Fertigungsindustrien, die über ein Bestell- und Fulfillment-System (Erfüllungssystem) verfügen.

Die folgenden Lösungen haben ähnliche Designs:

  • Microservicearchitektur in Azure Kubernetes Service (AKS)
  • Microservicearchitektur in Azure Functions
  • Ereignisgesteuerte Architekturen

Überlegungen

Diese Überlegungen bilden die Säulen des Azure Well-Architected Framework, einer Reihe von Leitprinzipien, die Sie zur Verbesserung der Qualität eines Workloads verwenden können. Weitere Informationen finden Sie unter Well-Architected Framework.

Zuverlässigkeit

Zuverlässigkeit trägt dazu bei, dass Ihre Anwendung die Verpflichtungen erfüllen kann, die Sie für Ihre Kunden vornehmen. Weitere Informationen finden Sie unter Prüfliste zur Entwurfsüberprüfung für Zuverlässigkeit.

Container-Apps basieren auf einer Kubernetes-Grundlage, die als zugrunde liegende Infrastruktur fungiert. Resilienzmechanismen sind in Kubernetes integriert, die Container oder Pods überwachen und neu starten, wenn Probleme auftreten. Die Resilienzmechanismen umfassen einen integrierten Lastenausgleich, der Datenverkehr über mehrere Replikate jeder Container-App verteilt. Diese Redundanz ermöglicht es dem System, betriebsbereit zu bleiben, auch wenn ein Replikat nicht verfügbar ist.

Sicherheit

Sicherheit bietet Sicherheitsmaßnahmen gegen bewusste Angriffe und den Missbrauch Ihrer wertvollen Daten und Systeme. Weitere Informationen finden Sie unter Erstellen einer Checkliste zur Überprüfung der Sicherheit.

In der folgenden Liste sind mehrere Sicherheitsfeatures aufgeführt, die in dieser Architektur nicht angegeben werden, zusammen mit anderen Empfehlungen und Überlegungen:

  • Diese Architektur verwendet keine privaten Endpunkte, die eine sicherere, private Konnektivität mit Azure-Diensten ermöglichen, indem sie ihnen eine IP-Adresse aus Ihrem virtuellen Netzwerk zuweisen. Wenn private Endpunkte verwendet werden, kann der Zugriff auf öffentliche Netzwerke deaktiviert werden. Mit diesem Ansatz wird der Datenverkehr auf dem Microsoft-Backbone beibehalten und die Sicherheit und Compliance verbessert.

  • Netzwerkaktivitäten sollten kontinuierlich überwacht werden, um Missbrauch zu erkennen und zu verhindern. Sie können diesen Ansatz erreichen, indem Sie eine Azure-Firewall und Routentabellen verwenden. Die Routentabellen ermöglichen Datenverkehr, der ein virtuelles Netzwerk verlässt, zuerst über die Firewall zu übergeben. Dieser Prozess ist ein wichtiger Schritt, um sicherzustellen, dass Ihre Architektur nicht anfällig für Datenexfiltrationsangriffe ist.

  • Verwenden Sie eine Webanwendungsfirewall (WAF), um vor allgemeinen Sicherheitsrisiken zu schützen. Verwenden Sie Azure Front Door oder Azure Application Gateway, um eine WAF in dieser Architektur zu implementieren.

  • Erwägen Sie die Verwendung des integrierten Authentifizierungs- und Autorisierungsfeatures für Container-Apps, das als Easy Auth bezeichnet wird. Die einfache Authentifizierung behandelt die Integration von Identitätsanbietern außerhalb Ihrer Web-App, wodurch die Menge an Code reduziert werden kann, den Sie verwalten müssen.

  • Verwenden Sie die verwaltete Identität für Workloadidentitäten. Dank verwalteter Identität müssen Entwickler keine Anmeldeinformationen mehr verwalten. Die grundlegende Architektur authentifiziert sich z. B. über ein Kennwort in einer Verbindungszeichenfolge bei SQL Server. Verwenden Sie nach Möglichkeit Microsoft Entra-IDs, um sich bei Azure SQL Server zu authentifizieren.

Kostenoptimierung

Die Kostenoptimierung konzentriert sich auf Möglichkeiten, unnötige Ausgaben zu reduzieren und die betriebliche Effizienz zu verbessern. Weitere Informationen finden Sie unter Prüfliste für die Überprüfung der Kostenoptimierung.

Verwenden Sie den Azure-Preisrechner, um die Kosten für die Dienste in dieser Architektur abzuschätzen.

Operative Exzellenz

„Optimaler Betrieb“ deckt die Betriebsprozesse ab, die für die Bereitstellung einer Anwendung und deren Ausführung in der Produktion sorgen. Weitere Informationen finden Sie unter Checkliste für die Designüberprüfung zur betrieblichen Exzellenz.

Sie können Azure Monitor und Application Insights verwenden, um Container-Apps zu überwachen. Sie können Containerprotokolle anzeigen, indem Sie im Portal zum Bereich "Protokolle " in jeder Container-App navigieren und dann die folgende Kusto-Abfrage ausführen. Dieses Beispiel zeigt Protokolle für die Makeline-Dienst-App.

ContainerAppConsoleLogs_CL |
    where ContainerAppName_s contains "make-line-service" |
    project TimeGenerated, _timestamp_d, ContainerGroupName_s, Log_s |
    order by _timestamp_d asc

Die Anwendungsübersicht in Application Insights zeigt auch, wie die Dienste in Echtzeit kommunizieren. Anschließend können Sie sie für Debugszenarien verwenden. Navigieren Sie zur Anwendungszuordnung unter der Application Insights-Ressource, um etwas wie die folgende Karte anzuzeigen.

Screenshot einer Anwendungszuordnung in Application Insights.

Weitere Informationen finden Sie unter Überwachen einer App in Container-Apps.

Leistungseffizienz

Die Leistungseffizienz bezieht sich auf die Fähigkeit Ihrer Workload, die Anforderungen der Benutzer effizient zu erfüllen. Weitere Informationen finden Sie unter Prüfliste zur Entwurfsüberprüfung für die Leistungseffizienz.

Diese Lösung basiert stark auf der KEDA-Implementierung in Container-Apps für die ereignisgesteuerte Skalierung. Wenn Sie den virtuellen Kundendienst bereitstellen, werden kontinuierlich Bestellungen platziert. Diese Skalierung bewirkt, dass der Bestelldienst über den HTTP-KEDA-Scaler skaliert wird. Da der Bestelldienst die Bestellungen auf dem Servicebus veröffentlicht, veranlassen die KEDA-Scaler des Servicebusses die Buchhaltungs-, Beleg-, Makeline- und Treuedienste, sich zu vergrößern. Die Benutzeroberfläche und die Traefik-Container-Apps konfigurieren auch HTTP-KEDA-Scaler, so dass die Apps skalieren, wenn mehr Benutzer auf das Dashboard zugreifen.

Wenn der virtuelle Kunde nicht ausgeführt wird, werden alle Microservices in dieser Lösung auf Null skaliert, mit Ausnahme der virtuellen Arbeits- und Makeline-Dienste. Der virtuelle Mitarbeiter wird nicht verkleinert, da er kontinuierlich nach Auftragserfüllung sucht. Weitere Informationen finden Sie unter Festlegen von Skalierungsregeln in Container-Apps.

Beitragende

Microsoft verwaltet diesen Artikel. Die folgenden Mitwirkenden haben diesen Artikel geschrieben.

Hauptautor:

Andere Mitwirkende:

Um nicht-öffentliche LinkedIn-Profile anzuzeigen, melden Sie sich bei LinkedIn an.

Nächste Schritte