Dieser Artikel beschreibt eine Lösung für die Ausführung eines Auftragsverwaltungssystems mit 10 Microservices in Azure Container Apps. Die Lösung nutzt außerdem bewährte Methoden für Microservices durch Dapr und ereignisgesteuerte Skalierung mit KEDA.
Dapr und Traefik sind Marken der jeweiligen Unternehmen. Die Verwendung dieser Marken impliziert keine Empfehlung.
Aufbau
Laden Sie eine PowerPoint-Datei zu dieser Architektur herunter.
Datenfluss
Diese Lösung verwendet Bicep-Vorlagen, um die Bereitstellung des Reddog-Auftragsverwaltungssystems und der zugehörigen Azure-Infrastruktur durchzuführen. Die Architektur besteht aus einer einzelnen Azure Container Apps-Umgebung, die 10 .NET Core Microservice-Anwendungen hostet. Sie verwenden das .NET Core Dapr SDK zur Integration mit Azure-Ressourcen durch Veröffentlichung/Abonnement (pub/sub) und Zustands- und Bindungsbausteine. Obwohl Dapr normalerweise bei der Implementierung von Komponenten Flexibilität bietet, basiert diese Lösung auf einer Meinung. Die Dienste nutzen auch KEDA-Skalierungsregeln, um eine Skalierung basierend auf Ereignisauslösern und Skalierung auf Nullszenarien zu ermöglichen.
In der folgenden Liste werden die einzelnen Microservices und die Azure Container Apps-Konfiguration beschrieben, mit der sie bereitgestellt werden. Sehen Sie sich Reddog-Code-Repository auf GitHub an, um den Code anzuzeigen.
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.
Benutzeroberfläche: Ein Dashboard, das Echtzeit-Bestellungen und aggregierte Verkaufsdaten für das Reddog-Bestellverwaltungssystem anzeigt.
Virtueller Kunde: Ein Kundensimulationsprogramm, das simuliert, wie Kunden über den Bestelldienst Bestellungen aufgeben.
Bestelldienst: Eine CRUD-API zum Platzieren und Verwalten von Bestellungen.
Buchhaltungsdienst: Ein Dienst, der Auftragsdaten verarbeitet, speichert und aggregiert. Es transformiert Kundenbestellungen in aussagekräftige Verkaufsmetriken, die auf der Benutzeroberfläche angezeigt werden.
Belegdienst: Ein Archivprogramm, das Bestellbestätigungen für Überwachungs- und historische Zwecke generiert und speichert.
Treuedienst: Ein Dienst, der das Treueprogramm verwaltet, indem er die Belohnungspunkte der Kunden auf der Grundlage der getätigten Bestellungen verfolgt.
Makeline-Dienst: Ein Dienst, der für die Verwaltung einer Warteschlange mit aktuellen Bestellungen zuständig ist, die auf ihre Erfüllung (Fulfillment) warten. Er verfolgt die Bearbeitung und Fertigstellung der Bestellungen durch den virtuellen Arbeitsdienst.
Virtueller Mitarbeiter: Ein Arbeitssimulationsprogramm, das die Fertigstellung von Kundenbestellungen simuliert.
Bootstrapper (nicht gezeigt): Ein Dienst, der Entity Framework Core verwendet, um die Tabellen innerhalb Azure SQL-Datenbank für die Verwendung mit dem Buchhaltungsdienst zu initialisieren.
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 | Pub/Sub: Azure Service Bus | HTTP |
Buchhaltungsdienst | Intern | Pub/Sub: Azure Service Bus | Azure Service Bus Themenlänge, HTTP |
Belegdienst | Intern | Pub/Sub: Azure Service Bus Bindung: Azure BLOB |
Azure Service Bus Themenlänge |
Treuedienst | Intern | Pub/Sub: Azure Service Bus Status: Azure Cosmos DB |
Azure Service Bus Themenlänge |
Makeline-Dienst | Intern | Pub/Sub: Azure Service Bus Status: Azure Redis |
Azure Service Bus Themenlänge, HTTP |
Virtueller Mitarbeiter | Keine | Dienst-zu-Dienst-Aufruf Bindung: Cron |
– |
Hinweis
Sie können Bootstrapper auch in einer Container-App ausführen. Dieser Dienst wird einmal ausgeführt, um die Datenbankerstellung durchzuführen, und dann nach der Erstellung der erforderlichen Objekte in Azure SQL-Datenbank auf Null skaliert.
Komponenten
Diese Lösung verwendet die folgenden Komponenten:
- Azure Ressourcengruppen fungieren als logische Container für Azure-Ressourcen. Mit einer einzelnen Ressourcengruppe strukturieren Sie alles, was mit dieser Lösung im Azure-Portal zusammenhängt.
- Azure Container Apps ist ein vollständig verwalteter, serverloser Containerdienst zum Erstellen und Bereitstellen moderner Apps im großen Stil. Bei dieser Lösung hosten Sie alle 10 Microservices auf Azure Container Apps und stellen sie in einer einzigen Container-App-Umgebung bereit. Diese Umgebung fungiert als sichere Grenze um das System.
- Azure Service Bus ist ein vollständig verwalteter Nachrichtenbroker für Unternehmen, mit Warteschlangen und Publish/Subscribe-Themen. In dieser Lösung wird sie für die Implementierung der Dapr-Pub/Sub-Komponente verwendet. Mehrere Dienste verwenden diese Komponente. Der Bestelldienst veröffentlicht Nachrichten auf dem Bus, und die Makeline-, Buchhaltungs-, Treue- und Belegdienste abonnieren diese Nachrichten.
- Azure Cosmos DB ist ein NoSQL, Multi-Modell verwalteter Datenbankdienst. Verwenden Sie es als Dapr State Store-Komponente für den Treuedienst, um die Treuedaten des Kunden zu speichern.
- Azure Cache for Redis ist ein verteilter, speicherinterner, skalierbarer verwalteter Redis-Cache. Es wird als Dapr-Zustandsspeicherkomponente für den Makeline-Dienst verwendet, um Daten zu den Bestellungen zu speichern, die gerade bearbeitet werden.
- Azure SQL-Datenbank ist ein intelligenter, skalierbarer und relationaler Datenbankdienst, der für die Cloud entwickelt wurde. Erstellen Sie es für den Buchhaltungsdienst, der Entity Framework Core als Schnittstelle zur Datenbank verwendet. Der Bootstrapper-Dienst ist für die Einrichtung der SQL-Tabellen in der Datenbank zuständig und wird dann einmal ausgeführt, bevor die Verbindung zum Buchhaltungsdienst hergestellt wird.
- Azure Blob Storage speichert große Mengen an unstrukturierten Daten wie Text- oder Binärdateien. Der Belegdienst verwendet Blob Storage über eine Dapr-Ausgabebindung, um die Bestellbestätigungen zu speichern.
- Traefik ist ein führender moderner Reverseproxy und Lastenausgleicher, der die Bereitstellung von Microservices erleichtert. In dieser Lösung wird die dynamische Konfigurationsfunktion von Traefik verwendet, um ein pfadbasiertes Routing von der Benutzeroberfläche aus durchzuführen, die eine Vue.js Single-Page-Anwendung (SPA) ist. Diese Konfiguration ermöglicht auch direkte API-Aufrufe zu den Backend-Diensten für Tests.
- Azure Monitor ermöglicht es Ihnen, Inhaltsdaten von Kunden aus Ihren Azure-Infrastrukturumgebungen zu sammeln, zu analysieren und zu bearbeiten. Sie verwenden es zusammen mit Application Insights, um die Containerprotokolle anzuzeigen und Metriken von den Microservices zu sammeln.
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 beliebte Projekte sind NGINX und HAProxy.
Alle Azure-Infrastrukturen, außer Azure SQL-Datenbank, verwenden 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 Fall wurden Azure Service Bus, Azure Cosmos DB, Cache for Redis und Blob Storage ausgewählt, um einige der über 70 verfügbaren Dapr-Komponenten zu präsentieren. Eine Liste alternativer Pub/Sub-Broker, Statusspeicher und Ausgabebindungen finden Sie in den Dapr-Dokumenten.
Szenariodetails
Microservices sind ein zunehmend beliebter Architekturstil, der viele Vorteile mit sich bringen kann. Dazu gehören hohe Skalierbarkeit, kürzere Entwicklungszyklen und größere Einfachheit. 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 bei groß angelegten Microservices-Architekturen berücksichtigt werden sollen. In der Regel erfordert die Infrastrukturplattform ein umfassendes Verständnis komplexer Technologien wie die Containerorchestratoren.
Azure Container Apps ist ein vollständig verwalteter, serverloser Containerdienst zum Ausführen moderner Anwendungen im großen Stil. Es ermöglicht Ihnen die Bereitstellung von containerisierten Anwendungen durch Abstraktion der zugrunde liegenden Plattform. Auf diese Weise müssen Sie sich nicht um die Verwaltung einer komplizierten Infrastruktur kümmern. Azure Container Apps wird von Open-Source-Technologien unterstützt.
Diese Architektur nutzt die Integration von Azure Container Apps mit einer verwalteten Version der Distributed Application Runtime (Dapr). Dapr ist ein Open Source-Projekt, das Entwicklern bei den inhärenten Herausforderungen in verteilten Anwendungen hilft, z. B. Zustandsverwaltung und Dienstaufruf.
Azure Container Apps bietet außerdem eine verwaltete Version von Kubernetes Event-Driven Autoscaling (KEDA). Mit KEDA können Ihre Container auf der Grundlage eingehender Ereignisse von externen Diensten wie Azure Service Bus und Azure Cache for Redis automatisch skaliert werden.
Sie können auch HTTPS-Eingang in Azure Container Apps aktivieren, ohne weitere Azure-Netzwerkressourcen zu erstellen. Sie können Envoy-Proxy verwenden, der auch Szenarien zur Verkehrsaufteilung ermöglicht.
Um zu erfahren, wie Azure Container-Apps im Vergleich zu anderen Container-Hosting-Plattformen in Azure abschneidet, siehe Vergleich von Container Apps mit anderen Azure Container-Optionen.
Dieser Artikel beschreibt eine Lösung für die Ausführung eines Auftragsverwaltungssystems mit 10 Microservices in Azure Container Apps. 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.
Diese anderen Lösungen sind ähnlich aufgebaut:
- 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 Microsoft Azure Well-Architected Framework.
Zuverlässigkeit
Zuverlässigkeit stellt sicher, dass Ihre Anwendung Ihre Verpflichtungen gegenüber den Kunden erfüllen kann. Weitere Informationen finden Sie in der Überblick über die Säule „Zuverlässigkeit“.
Azure Container Apps wird im Hintergrund auf Kubernetes ausgeführt. In Kubernetes sind Resilienzmechanismen eingebaut, die Container oder Pods überwachen und neu starten, wenn Probleme auftreten. Die Resilienzmechanismen werden mit dem integrierten Lastenausgleich kombiniert, um mehrere Replikate jeder Container-App auszuführen. Mit dieser Redundanz kann die Lösung eine Instanz nicht verfügbar machen.
Sie können Azure Monitor und Application Insights verwenden, um Azure 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 Anwendungsübersicht unter der Application Insights-Ressource, um etwas wie folgt anzuzeigen.
Weitere Informationen zur Überwachung von Azure Container-Apps finden Sie unter Überwachung einer App in Azure Container Apps.
Kostenoptimierung
Optimieren Sie Ihre Kosten, indem Sie nach Möglichkeiten suchen, unnötige Ausgaben zu reduzieren und die Betriebseffizienz zu verbessern. Weitere Informationen finden Sie unter Übersicht über die Säule „Kostenoptimierung“.
Verwenden Sie den Azure-Preisrechner, um die Kosten für die Dienste in dieser Architektur abzuschätzen.
Effiziente Leistung
Leistungseffizienz ist die Fähigkeit Ihres Workloads, die von Ihnen gestellten Anforderungen auf effiziente Weise zu erfüllen. Weitere Informationen finden Sie unter Übersicht über die Säule „Leistungseffizienz“.
Diese Lösung stützt sich stark auf die KEDA-Implementierung in Azure Container Apps für die ereignisgesteuerte Skalierung. Wenn Sie den virtuellen Kundendienst bereitstellen, wird dieser kontinuierlich Bestellungen aufgeben. Das führt dazu, dass der Bestelldienst über den HTTP-KEDA-Scaler hochskaliert 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 herunterskaliert, da es ständig nach Auftragserfüllung sucht. Weitere Informationen zur Skalierung in Container-Apps finden Sie unter Festlegung von Skalierungsregeln in Azure Container Apps. Weitere Informationen zu KEDA-Scalers finden Sie in der KEDA-Dokumentation zu Scalers.
Bereitstellen dieses Szenarios
Anweisungen zur Bereitstellung finden Sie in der Red Dog Demo: Bereitstellung von Azure Container Apps auf GitHub.
Die Integration von Red Dog Demo: Microservices ist eine gepackte App-Vorlage, die auf den vorherigen Coderessourcen aufbaut, um die Integration von Azure Container Apps, App Service, Funktionen und API Management zu veranschaulichen und die Infrastruktur zu bestimmen, um den Code mithilfe von GitHub Actions bereitzustellen.
Beitragende
Dieser Artikel wird von Microsoft gepflegt. Er wurde ursprünglich von folgenden Mitwirkenden geschrieben:
Hauptautor:
- Alice Gibbons | Cloud Native Global Black Belt
Andere Mitwirkende:
- Kendall Roden | Senior Program Manager
- Lynn Orrell | Principal Solution Specialist (GBB)
Melden Sie sich bei LinkedIn an, um nicht öffentliche LinkedIn-Profile anzuzeigen.
Nächste Schritte
- Azure Container Apps Dokumente
- Vergleichen von Containerangeboten in Azure
- Weitere Implementierungen des Reddog-Auftragsverwaltungssystems: