Entkoppeln Sie alles. Lassen Sie Dienste über Ereignisse kommunizieren, nicht über Erwartungen an die Verfügbarkeit des jeweils anderen.

Ihr Monolith wird zu einem Bereitstellungsengpass — jede Änderung erfordert die Koordination zwischen Teams, und ein Fehler in der Abrechnung legt die gesamte Anwendung lahm. Oder Sie bauen ein neues System, in dem sich verschiedene Funktionen unterschiedlich schnell entwickeln: Die Auftragsverwaltung ändert sich wöchentlich, die Bestandslogik jedoch vierteljährlich. Sie benötigen Dienste, die unabhängig entwickelt, bereitgestellt und skaliert werden können und über Ereignisse kommunizieren, anstatt über synchrone API-Aufrufe, die kaskadierende Fehlerketten erzeugen.
Explore more design patterns and system architectures
Unsere Architekten können Ihnen helfen, Systeme mit diesem Muster für Ihre spezifischen Anforderungen zu entwerfen und zu erstellen.
Kontakt aufnehmenEreignisgesteuerte Microservices zerlegen ein System in unabhängig deploybare Dienste, die primär über asynchrone Ereignisse kommunizieren. Jeder Dienst besitzt seine Daten, veröffentlicht Domänenereignisse bei Zustandsänderungen und reagiert auf Ereignisse von anderen Diensten. Dies eliminiert die zeitliche Kopplung — Dienst A benötigt Dienst B nicht zum Ausführen seiner Arbeit. Das Muster integriert CQRS (Command Query Responsibility Segregation), um Schreib- und Lesemodelle zu trennen, Event Sourcing, um die vollständige Historie von Zustandsänderungen zu erfassen, und Saga-Orchestrierung, um Transaktionen über mehrere Dienste hinweg ohne verteilte Locks zu verwalten.
Die Architektur konzentriert sich auf ein Event Backbone (Kafka, EventBridge oder NATS), das Domänenereignisse zwischen Diensten routet. Jeder Dienst hat drei Grenzen: einen Command Handler, der eingehende Anfragen verarbeitet und Ereignisse aussendet, einen Query Handler, der lesoptimierte Projektionen bereitstellt, und einen Event Processor, der auf Ereignisse von anderen Diensten reagiert. Ein Saga Orchestrator koordiniert mehrstufige Geschäftsprozesse (z.B. Auftragsabwicklung), indem er auf Ereignisse lauscht und kompensierende Befehle ausgibt, wenn Schritte fehlschlagen.

System Architecture Overview
| Schicht | Technologien |
|---|---|
| Compute | Node.js (NestJS), Python (FastAPI), Go — pro Dienst basierend auf den Workload-Eigenschaften |
| Messaging | Apache Kafka (MSK), AWS EventBridge, NATS JetStream, RabbitMQ |
| Daten | PostgreSQL (transaktional), DynamoDB (Key-Value), Redis (Caching/Locks), EventStoreDB |
| Orchestrierung | Temporal (Workflow-Orchestrierung), AWS Step Functions, Custom Saga Coordinator |
| Observability | OpenTelemetry (Distributed Tracing), Datadog, Jaeger, strukturiertes Logging mit Correlation IDs |
| Verwenden, wenn | Vermeiden, wenn |
|---|---|
| Mehrere Teams unabhängig in unterschiedlichen Zyklen deployen müssen | Ihr Team < 5 Ingenieure umfasst — ein gut strukturierter Monolith ist einfacher zu betreiben |
| Verschiedene Teile des Systems unterschiedliche Skalierungsmerkmale aufweisen | Sie ein MVP erstellen und schnell liefern müssen — verteilte Systeme sind langsam aufzubauen |
| Sie starke Audit Trails und Event Replay-Funktionen benötigen | Jeder Vorgang synchrone, stark konsistente Antworten erfordert |
| Die Domäne natürliche Bounded Contexts aufweist (Aufträge, Zahlungen, Inventar) | Die Domäne stark gekoppelt ist — eine Aufteilung einen verteilten Monolithen erzeugt |
MW zerlegt nicht in Microservices nach technischer Schicht (API Service, Data Service, Auth Service). Wir zerlegen entlang von Domänengrenzen unter Verwendung von DDD (Domain-Driven Design) Bounded Contexts. Vor dem Schreiben von Code führen wir einen Event Storming Workshop durch, um Domänenereignisse, Befehle und Aggregate abzubilden — dies bestimmt Dienstgrenzen, nicht Technologiepräferenzen. Wir haben Monolithen für Unternehmenskunden auf ereignisgesteuerte Architekturen migriert, und die häufigste Lektion ist: Beginnen Sie mit weniger, größeren Diensten und teilen Sie später auf, nicht umgekehrt.
Modelle laufen nicht von allein. Die Pipeline, die Ihre Modelle trainiert, validiert, bereitstellt und überwacht, ist das eigentliche Produkt – das Modell ist nur ein Artefakt.
MicrocosmWorks konzipiert ereignisgesteuerte Systeme mit persistenten Message Brokern wie Apache Kafka oder Amazon EventBridge, die Ereignisse speichern, bis Konsumenten sie erfolgreich verarbeitet haben, wodurch kein Datenverlust während Ausfällen gewährleistet ist. Wir implementieren Dead-Letter-Queues, Wiederholungsrichtlinien mit exponentiellem Backoff und Circuit Breaker, damit ein ausfallender Mikrodienst die gesamte Ereignispipeline nicht blockiert. Sobald der nachgeschaltete Dienst wiederhergestellt ist, holt er automatisch die unverarbeiteten Ereignisse ohne manuelles Eingreifen nach.
Ereignisgesteuerte Kommunikation ist die bessere Wahl, wenn Ihre Dienste keine sofortige Antwort benötigen, wenn Sie Bereitstellungszyklen entkoppeln müssen oder wenn eine einzelne Aktion mehrere nachgelagerte Prozesse auslöst. MicrocosmWorks empfiehlt typischerweise ereignisgesteuerte Muster für die Auftragsverarbeitung, Benachrichtigungspipelines und die Erfassung von Analysedaten, während synchrone APIs für benutzerorientierte Abfragen beibehalten werden, die Antworten im Subsekundenbereich erfordern. Viele von uns entwickelte Produktionssysteme verwenden einen hybriden Ansatz mit synchronen Lesevorgängen und asynchronen Schreibvorgängen.
MicrocosmWorks verwendet eine partitionsschlüsselbasierte Reihenfolge in Kafka-Topics, um zu gewährleisten, dass alle Ereignisse für eine bestimmte Entität (wie eine spezifische Bestellung oder ein Benutzer) sequenziell von derselben Consumer-Instanz verarbeitet werden. Für Szenarien, die eine entitätsübergreifende Reihenfolge erfordern, implementieren wir Saga-Orchestratoren mit idempotenten Ereignishandlern, die Nachrichten außerhalb der Reihenfolge sicher erneut verarbeiten können. Wir betten auch Vektoruhren oder Sequenznummern in Ereignis-Payloads ein, damit Consumer Reihenfolgekonflikte erkennen und lösen können.
MicrocosmWorks implementiert das Saga pattern mit compensating transactions, wobei jeder microservice nach Abschluss seiner local transaction domain events veröffentlicht und nachgeschaltete Dienste entsprechend reagieren oder bei einem Fehler rollback compensations auslösen. Wir kombinieren dies mit einem outbox pattern, das Ereignisse atomar zusammen mit business data in eine local outbox table schreibt und sie anschließend zuverlässig an den message broker veröffentlicht. Dies erreicht eventual consistency ohne die Performance- und Zuverlässigkeitseinbußen von two-phase commits.
MicrocosmWorks instrumentiert jedes Ereignis mit Korrelations-IDs und verteilten Tracing-Headern mittels OpenTelemetry, was uns ermöglicht, den vollständigen Lebenszyklus einer Geschäftstransaktion über alle beteiligten Microservices hinweg in Tools wie Jaeger oder Grafana Tempo zu visualisieren. Wir erstellen auch Echtzeit-Event-Flow-Dashboards, die Durchsatz, Consumer-Lag und VerarbeitungsLatenz pro Dienst anzeigen, was es einfach macht, Engpässe zu identifizieren. Unser Standard-Observability-Stack umfasst strukturiertes Logging mit Ereignismetadaten, sodass jedes einzelne Ereignis vom Producer zu jedem Consumer in Sekunden verfolgt werden kann.