Table of Contents
Event-driven architecture (EDA) hat sich als grundlegendes Muster für den Aufbau moderner, responsiver und lose gekoppelter Systeme herausgebildet. Microsoft Azure bietet eine robuste Suite von Diensten zur Implementierung von EDA, wobei Azure Event Hub als Hochdurchsatz-Ereignisaufnahmeschicht dient und Azure Functions Serverless Compute zur Verfügung stellt, um auf diese Ereignisse in nahezu Echtzeit zu reagieren. Dieser Artikel stellt eine umfassende Anleitung zum Aufbau einer ereignisgesteuerten Architektur unter Verwendung dieser beiden Dienste vor, die Designprinzipien, schrittweise Implementierung, betriebliche Best Practices und Anwendungsfälle in der realen Welt abdeckt. Ob Sie Telemetrie von Millionen von IoT-Geräten aufnehmen oder Clickstream-Daten von Webanwendungen verarbeiten, diese Architektur kann skalieren, um Ihre Anforderungen zu erfüllen und gleichzeitig die betriebliche Komplexität gering zu halten.
Event-Driven Architektur verstehen
Im Kern ist eine ereignisgesteuerte Architektur rund um Produktion, Erkennung, Verbrauch und Reaktion auf Ereignisse aufgebaut. Ein Ereignis ist eine signifikante Zustandsänderung – zum Beispiel eine Sensorablesung, eine Zahlungstransaktion oder eine Aktualisierung des Benutzerprofils. In EDA kommunizieren Komponenten über Ereignisse und nicht über direkte synchrone Anrufe, was die Kopplung reduziert und eine unabhängige Skalierung von Produzenten und Verbrauchern ermöglicht.
Schlüsselkonzepte
- Event Producer: Jede Komponente, die Ereignisse an den Ereignisbus aussendet. Beispiele sind IoT-Geräte, Microservices oder Legacy-Systeme, die Change Data Capture (CDC)-Erfassungsereignisse aussenden.
- Event Bus / Stream: Eine dauerhafte, skalierbare Pipeline, die Ereignisse aufnimmt und fortsetzt. Azure Event Hub passt perfekt zu dieser Rolle und bietet partitionierte, geordnete Ereignisströme.
- Event Consumer: Eine Komponente, die Ereignisse abonniert und verarbeitet. Azure Functions kann als Verbraucher fungieren, der automatisch ausgelöst wird, wenn neue Ereignisse eintreffen.
- Event Sourcing und CQRS: Viele Implementierungen kombinieren EDA mit Event Sourcing (bestehend im Ereignisprotokoll als Quelle der Wahrheit) und befehlen die Abfrageverantwortungstrennung (CQRS), um Lese- und Schreibmodelle zu trennen.
Die von EDA eingeführte Entkopplung ermöglicht es Teams, Dienste unabhängig zu entwickeln, bereitzustellen und zu skalieren, sowie Echtzeit-Analysen, Audit-Trails und die Möglichkeit, historische Ereignisse zum Debuggen oder Wiederaufbereiten wiederzugeben.
Azure Event Hub: Die Aufnahmeschicht
Azure Event Hub ist eine vollständig verwaltete Echtzeit-Daten-Streaming-Plattform, die Millionen von Ereignissen pro Sekunde aufnehmen kann. Seine Architektur ist für hohen Durchsatz, geringe Latenz und Haltbarkeit ausgelegt. Event Hub erfasst Ereignisse in Partitionen, wobei jede eine geordnete Sequenz von Ereignissen ist. Verbraucher können von einem Checkpoint aus lesen, um die Verarbeitung fortzusetzen.
Hauptmerkmale von Event Hub
- Partitionierung: Ereignisse werden für die parallele Verarbeitung über Partitionen verteilt. Jede Partition ist unabhängig und kann von einer separaten Instanz der Azure-Funktion verbraucht werden.
- Erfasst: Ereignisströme automatisch in Azure Blob Storage oder Azure Data Lake Storage für Archivierungs- und Batch-Analysen.
- Geo-Disaster Recovery: Optionale Paarung von Namensräumen über Regionen hinweg sorgt für hohe Verfügbarkeit.
- AMQP, HTTPS und Kafka Protocol: Unterstützt mehrere Protokolle, sodass Produzenten, die Apache Kafka-Clients verwenden, Ereignisse direkt senden können.
- Throughput Units (TUs) oder Processing Units (PUs): Bestimmen Sie die Ein- und Ausstiegskapazität. Für die serverlose Ebene (Basic und Standard) werden TUs verwendet; für Premium und Dedicated bieten PUs eine berechenbarere Leistung.
Einrichtschritte
- Erstellen eines Event Hubs Namespace: Erstellen Sie im Azure-Portal einen neuen Event Hubs Namespace. Wählen Sie die Preisebene (Standard wird für die meisten Produktions-Workloads empfohlen). Aktivieren Sie die automatische Inflation, wenn Sie einen variablen Durchsatz erwarten.
- Erstellen Sie eine Event Hub-Instance: Im Namensraum erstellen Sie einen Event Hub. Geben Sie die Anzahl der Partitionen an – eine allgemeine Faustregel ist 4-32 Partitionen für die meisten Anwendungsfälle. Partitionen können nicht später geändert werden, ohne den Hub neu zu erstellen, also wählen Sie basierend auf dem erwarteten Durchsatz.
- Konfigurieren Sie Shared Access Policies: Erstellen Sie eine Richtlinie für Produzenten (z. B. "SendOnly") und eine für Verbraucher (z. B. "ListenOnly"), um dem Prinzip der geringsten Privilegien zu folgen.
- Erfassung aktivieren (Optional): Wenn Sie alle Rohereignisse für die langfristige Speicherung speichern müssen, aktivieren Sie Erfassen und zeigen Sie auf einen Azure Blob Storage-Container oder Data Lake Storage.
Für ein praktisches Beispiel, siehe offizielle Quickstart-Anleitung.
Azure-Funktionen: Der Compute Trigger
Azure Functions bietet eine serverlose Rechenumgebung, in der Sie Code schreiben, der auf Ereignisse reagiert. Der Event Hub-Trigger ermöglicht es, eine Funktion automatisch aufzurufen, wenn neue Ereignisse in einem Event Hub veröffentlicht werden. Funktionen können automatisch skaliert werden, wobei jede Funktionsinstanz Ereignisse aus einer oder mehreren Partitionen verarbeitet.
Event Hub Trigger Verhalten
- Checkpointing: Die Funktion runtime verwaltet Checkpointing, um das letzte erfolgreich verarbeitete Ereignis pro Partition zu verfolgen.
- Batch Processing: Standardmäßig liefert der Trigger eine Reihe von Ereignissen. Sie können die Batchgröße steuern und die Anzahl der Prefetch-Ergebnisse für die Leistungseinstellung bestimmen.
- Parallelismus: Die Anzahl der Funktionsinstanzen entspricht der Anzahl der Partitionen mit nicht verarbeiteten Ereignissen. Um die Parallelität zu erhöhen, erhöhen Sie die Partitionszahl (innerhalb von Grenzen). Verwenden Sie für den höchsten Durchsatz den Premium- oder Dedicated-Hosting-Plan anstelle des Verbrauchsplans, insbesondere wenn die Verarbeitungszeit der Funktion mehr als ein paar Sekunden beträgt.
Erstellen einer Azure-Funktion mit Event Hub Trigger
- Erstellen Sie eine Funktions-App im Azure Portal oder über Azure CLI. Wählen Sie den Laufzeitstack (z. B. .NET, Node.js, Python).
- Fügen Sie eine Ereignis-Hub-Triggerbindung hinzu. Die Funktionssignatur enthält einen Parameter für die Ereignisdaten (z. B. oder ).
- Legen Sie die Verbindungszeichenfolgeeinstellung für den Event Hub (aus den Anwendungseinstellungen) und den Namen des Event Hubs fest.
- Schreibe Verarbeitungslogik in die Funktion. Allgemeine Aufgaben: JSON deserialisieren, eine Datenbank aktualisieren, eine API aufrufen oder das Ereignis an einen anderen Dienst wie SignalR für Echtzeit-Dashboards senden.
- Konfigurieren Sie die Outputbindungen nach Bedarf – zum Beispiel eine Cosmos DB-Ausgabebindung, um verarbeitete Daten zu speichern.
Die Azure Functions Event Hub Trigger-Dokumentation bietet detaillierte Codebeispiele für jede Sprache.
Design der End-to-End-Architektur
Jetzt kombinieren wir die Teile. Der typische Ablauf ist: Produzenten → Event Hub → Azure Functions → Downstream Services Ein Beispiel für die Produktionsqualität: ein Flottenmanagementsystem, das GPS-Pings von Tausenden von Fahrzeugen empfängt.
Schritt 1: Definieren Sie das Ereignisschema
Die Konsistenz ist entscheidend. Verwenden Sie eine Schemaregistrierung (wie Azure Schema Registry in Event Hubs) oder erzwingen Sie einfach ein JSON-Schema.
{
"vehicleId": "VH-12345",
"latitude": 37.7749,
"longitude": -122.4194,
"speed": 65.2,
"timestamp": "2025-03-21T10:30:00Z"
}
Die Verwendung von Avro oder Protobuf kann die Nutzlast verringern und Schemaentwicklungsfunktionen bereitstellen, aber JSON bleibt das einfachste Debuggen.
Schritt 2: Konfigurieren Sie die Produzenten
Produzenten können IoT-Geräte sein, die Azure IoT Hub verwenden, oder benutzerdefinierte Anwendungen, die das Event Hubs SDK verwenden. Für Szenarien mit hohem Volumen können Batch-Events zusammengenommen (z. B. 100 Events pro Anfrage senden) verwendet werden, um den Durchsatz zu maximieren. Stellen Sie sicher, dass der Produzent eine Retry-Richtlinie mit exponentiellem Backoff verwendet.
Schritt 3: Setzen Sie den Partition Key
Event Hub partitioniert Ereignisse basierend auf einem Partitionsschlüssel. Wenn Sie eine bestellte Verarbeitung pro Fahrzeug benötigen, verwenden Sie als Partitionsschlüssel. Dadurch wird sichergestellt, dass alle Ereignisse aus demselben Fahrzeug in der gleichen Partition landen und von einem einzelnen Verbraucher sequentiell verarbeitet werden.
Schritt 4: Erstellen Sie die Azure-Funktion
Die Funktion empfängt Batches von Ereignissen, verarbeitet sie jeweils in der Reihenfolge und kann dann den neuesten Speicherort für Echtzeitabfragen in einen Cache schreiben (z. B. Azure Redis Cache). Es kann auch Geofence-Ereignisse ausführen - wenn ein Fahrzeug in eine bestimmte Zone einfährt, kann die Funktion eine Warnung über Azure Logic Apps oder Twilio senden.
Schritt 5: Behandeln Sie Fehler und Retries
Wenn die Verarbeitung für einen Batch fehlschlägt, wird der Event Hub-Trigger gemäß der Retry-Richtlinie der Funktion wiederholt (Standard ist bis zu 5 Mal exponentielles Backoff). Bei Giftereignissen (z. B. fehlgeformtem JSON) protokollieren Sie sie in einer Warteschlange mit toten Buchstaben (Azure Storage Queue oder ein dedizierter Event Hub). Die Funktion sollte bestimmte Ausnahmen abfangen und problematische Ereignisse aus der normalen Verarbeitungspipeline verschieben.
Schritt 6: Überwachen und Skalieren
- Verwenden Sie Azure Monitor, um die Metriken des Event Hubs zu verfolgen: eingehende Nachrichten, gedrosselte Anforderungen, Backlog-Größe (Unterschied zwischen dem letzten verquetschten Offset und dem letzten Checkpoint).
- Für die Skalierung von Azure-Funktionen wird der Verbrauchsplan automatisch skaliert, kann jedoch Kaltstartverzögerungen aufweisen. Der Premium-Plan bietet Instanz-Vorwärmen und virtuelle Netzwerkintegration.
- Richten Sie Benachrichtigungen für einen hohen Backlog ein, der anzeigt, dass die Funktion nicht mithalten kann - erhöhen Sie die Partitionen oder aktualisieren Sie den Hosting-Plan.
Fortgeschrittene Muster und Best Practices
Event Replay und Catch-up
Ein wesentlicher Vorteil von Event Hub ist, dass Events für einen konfigurierbaren Zeitraum (bis zu 90 Tage im Standard) gespeichert werden. Dies ermöglicht es Verbrauchern, Ereignisse von einem bestimmten Zeitpunkt an wiederzugeben – nützlich, um eine neue Datenbank zu füllen oder nach Behebung eines Fehlers neu zu bearbeiten. Um die Wiedergabe zu ermöglichen, können Sie eine neue Verbrauchergruppe erstellen und die Funktion über einen benutzerdefinierten Offset starten.
Mehrere Verbrauchergruppen
Event Hub unterstützt bis zu 20 Verbrauchergruppen pro Event Hub. Verwenden Sie separate Verbrauchergruppen für verschiedene Verarbeitungspipelines: eine für Echtzeit-Analysen, eine andere für Archivierung und eine dritte für das Training von Machine Learning-Modellen. Jede Verbrauchergruppe erhält einen eigenen Checkpoint-Store, der unabhängigen Fortschritt ermöglicht.
Idempotente Verarbeitung
Da Ereignisse mindestens einmal geliefert werden können, sollte die Funktion idempotent sein, z. B. beim Einfügen in eine Datenbank Upsert-Operationen anstelle von Einfügen verwenden oder überprüfen, ob bereits eine Ereignis-ID in einem Deduplizierungsspeicher vorhanden ist (z. B. Redis mit TTL), wodurch verhindert wird, dass doppelte Verarbeitung Dateninkonsistenzen verursacht.
Integration mit Azure Function Output Bindings
Anstatt manuellen Code zu schreiben, um Daten an anderer Stelle zu senden, verwenden Sie Output-Bindungen. Die folgende Tabelle fasst allgemeine Bindungen für ereignisgesteuerte Szenarien zusammen:
- Cosmos DB: Aktualisieren Sie Dokumente automatisch aus der Funktionsausgabe.
- SignalR Service: Überträgt verarbeitete Ereignisse an verbundene Clients (z. B. Echtzeit-Dashboard).
- Blob Storage: Schreibe Batch-Outputs periodisch (vermeide es, pro Ereignis zu schreiben, um Kosten zu senken).
- Event Hubs (Output): Senden Sie Events an einen anderen Event Hub zum Verketten.
Sicherheitsüberlegungen
- Verwenden Sie Managed Identity für die Azure-Funktion, um eine Verbindung zum Event Hub herzustellen, anstatt Verbindungszeichenfolgen im Klartext zu speichern.
- Aktivieren Sie die Firewall- und virtuelle Netzwerkintegration für den Event Hub-Namespace, um den Netzwerkzugriff einzuschränken.
- Verwenden Sie Azure Key Vault, um Geheimnisse wie Event Hub-Verbindungszeichenfolgen und Zugriffsschlüssel zu speichern.
- Verschlüsseln Sie Ereignisse in Ruhe und Transit (Event Hub verwendet standardmäßig TLS).
Use Cases und Real-World-Szenarien
IoT Telemetrieverarbeitung
Wie bereits beschrieben, passt das Flottenmanagement-Szenario klassisch. Azure IoT Hub kann Gerätenachrichten aufnehmen und zur nachgelagerten Verarbeitung an den Event Hub weiterleiten. Azure Functions kann dann die Durchschnittsgeschwindigkeit pro Route berechnen, Anomalien erkennen oder Wartungsalarme auslösen.
Clickstream Analytics
E-Commerce-Websites erzeugen massive Clickstream-Daten. Event Hub kann Seitenaufrufe, Warenkorbaktionen und Suchen aggregieren. Funktionen können die Ereignisse mit Benutzerprofildaten anreichern, Sitzungszähler aktualisieren und zu Azure Data Explorer für nahezu Echtzeit-Dashboards drücken. Die Azure-Referenzarchitektur für Clickstream bietet einen vollständigen Entwurf.
Change Data Capture (CDC)
Wenn Sie Daten aus einer relationalen Datenbank mit einem Suchindex oder Cache synchronisieren müssen, ist CDC mit Event Hub ein gängiger Ansatz. z. B. mit Debezium (Kafka Connect) Datenbankänderungen in Event Hub zu streamen, dann wird eine Azure-Funktion transformiert und in Elasticsearch geschrieben. Dieses Muster hält den Suchindex immer auf dem neuesten Stand, ohne benutzerdefinierte Abfragelogik.
Finanztransaktionsverarbeitung
Im Finanzbereich ermöglicht die ereignisgesteuerte Architektur Betrugserkennung, Echtzeit-Risikobewertung und Handelsabwicklung. Die geringe Latenz und der hohe Durchsatz des Event Hubs machen es geeignet, Tausende von Trades pro Sekunde zu verarbeiten. Azure Functions kann Betrugserkennungsmodelle ausführen, verdächtige Transaktionen markieren und Warnungen senden, während Audit-Trails beibehalten werden.
Kostenoptimierung und Monitoring
Während Serverless die Leerlaufkosten reduziert, müssen Sie die Nutzung dennoch überwachen.
- Event Hub Throughput Units: Jede TU ermöglicht 1 MB/s Eindringen und 2 MB/s Ausdringen (oder 1000 Ereignisse pro Sekunde).
- Die Menge der aufgenommenen Daten: In Rechnung gestellt pro Million Ereignisse (Standard-Tier).
- Azure Function Execution Time: Der Verbrauchsplan berechnet pro Sekunde der Ausführung.
- Verwendete Speicherung für Capture und Checkpoints: Die Speicherkosten für Blobs sind minimal, berücksichtigen Sie jedoch Aufbewahrungsrichtlinien.
Legen Sie Budgetbenachrichtigungen in Azure Cost Management fest. Verwenden Sie Application Insights, um Funktionsausführungszeiten und Abhängigkeitsaufrufe zu verfolgen. Die Azure Event-driven architecture pattern Seite enthält Anleitungen zur Überwachung.
Vergleich mit alternativen Technologien
- Azure Service Bus: Besser für befehlsgesteuerte Workloads, die eine strenge Ordnung, Transaktionsverarbeitung und Dead-Briefing erfordern. Event Hub ist für das Hochdurchsatz-Event-Streaming optimiert, nicht für Punkt-zu-Punkt-Messaging.
- Apache Kafka auf HDInsight oder Confluent: Mehr Kontrolle über Konfigurationen erfordert aber Betriebsaufwand. Event Hub bietet Kafka-Protokollkompatibilität mit einem Managed Service.
- Event Grid: Geeignet für reaktive Programmierung und Routing von Ereignissen zwischen Azure-Diensten. Es ist nicht für das Streaming mit hohem Volumen konzipiert – Event Hub verarbeitet Millionen von Ereignissen pro Sekunde.
- Azure Stream Analytics: Eine Managed SQL-ähnliche Verarbeitungsmaschine für Zeitreihenanalysen. Sie kann auf dem Event Hub laufen, aber für komplexe Geschäftslogiken bietet Azure Functions mehr Flexibilität.
Betriebskontrollliste
- Definieren Sie die Aufbewahrungszeit für Ereignisse (Standard 1 Tag, max. 7 Tage im Standard).
- Legen Sie Anwendungsinsights für die Azure-Funktion fest, um die Anzahl der verarbeiteten Ereignisse und Fehler zu protokollieren.
- Aktivieren Sie Azure Monitor-Benachrichtigungen für die Ereignis-Hub-Drosselung (siehe -Metrix).
- Verwenden Sie Azure Policy, um die TLS-Version und den Authentifizierungstyp zu erzwingen.
- Testfehlerszenarien: Stoppen Sie die Funktion, lassen Sie Ereignisse akkumulieren und starten Sie dann neu, um die Wiederherstellung des Checkpoints zu überprüfen.
- Führen Sie Lasttests mit einem simulierten Hersteller durch, um sicherzustellen, dass die Architektur das maximale Volumen verarbeitet.
Schlussfolgerung
Der Aufbau einer ereignisgesteuerten Architektur mit Azure Event Hub und Azure Functions stattet Unternehmen mit einem skalierbaren, kostengünstigen und reaktionsfähigen System für die Echtzeitdatenverarbeitung aus. Die Kombination aus dauerhaftem Ereignis-Streaming und serverlosem Rechnen ermöglicht es Entwicklern, sich auf die Geschäftslogik zu konzentrieren, während Azure Partitionierung, Skalierung und Checkpoint-Management übernimmt. Durch die Einhaltung der hier beschriebenen Designprinzipien und Best Practices - Auswahl der geeigneten Partitionszahlen, Implementierung idempotenter Verarbeitung und Überwachung des Betriebszustands - können Sie eine produktionsfähige Pipeline erstellen, die sich an sich ändernde Datenmengen anpasst. Da ereignisgesteuerte Muster moderne Cloud-Anwendungen weiterhin prägen, ist die Beherrschung dieser Azure-Dienste eine wertvolle Fähigkeit für jeden Cloud-Architekten oder Entwickler.