Event-Driven Architecture

Services communicate through events for loose coupling and async processing.

Event-Driven Architecture (EDA) structures a system around the production, detection, and reaction to events. Services communicate by emitting events rather than calling each other directly.

Architecture

┌──────────┐   event   ┌───────────┐   event   ┌──────────┐
│ Producer │──────────▶│  Message   │──────────▶│ Consumer │
│ Service  │           │  Broker    │           │ Service  │
└──────────┘           └─────┬─────┘           └──────────┘
                             │
                      ┌──────┼──────┐
                      │      │      │
                  ┌────▼─┐ ┌─▼──┐ ┌─▼────┐
                  │ Svc A│ │Svc B│ │ Svc C│
                  └──────┘ └────┘ └──────┘

Core Concepts

Term Definition
Event A fact that happened (immutable, past tense)
Producer Service that emits events
Consumer Service that reacts to events
Broker Middleware that routes events (Kafka, RabbitMQ, SQS)

When to Use

When to Avoid

Patterns

Event Sourcing

Store every state change as an event. Current state is derived by replaying events.

CQRS (Command Query Responsibility Segregation)

Separate write models (commands) from read models (queries). Writes produce events; reads use denormalized projections.

Saga

Manage distributed transactions through a sequence of local transactions, each publishing an event that triggers the next step. Compensating events handle failures.

Challenges

Challenge Mitigation
Eventual consistency Communicate SLAs; use UI patterns for stale data
Event ordering Use partitioned logs (Kafka topics)
Duplicate events Idempotent consumers
Schema evolution Schema registry, backward-compatible changes
Debugging Distributed tracing, event replay in dev

Next: Back to Architecture overview