DEV Community

Cover image for System Design: Event-Driven Architecture (EDA)
Karan Pratap Singh
Karan Pratap Singh

Posted on • Originally published at

System Design: Event-Driven Architecture (EDA)

Event-Driven Architecture (EDA) is about using events as a way to communicate within a system. Generally, leveraging a message broker to publish and consume events asynchronously. The publisher is unaware of who is consuming an event and the consumers are unaware of each other. Event-Driven Architecture is simply a way of achieving loose coupling between services within a system.

What is an event?

An event is a data point that represents state changes in a system. It doesn't specify what should happen and how the change should modify the system, it only notifies the system of a particular state change. When a user makes an action, they trigger an event.


Event-driven architectures have three key components:

  • Event producers: Publishes an event to the router.
  • Event routers: Filters and pushes the events to consumers.
  • Event consumers: Uses events to reflect changes in the system.


Note: Dots in the diagram represents different events in the system.


There are several ways to implement the event-driven architecture, and which method we use depends on the use case but here are some common examples:

Note: Each of these methods is discussed separately.


Let's discuss some advantages:

  • Decoupled producers and consumers.
  • Highly scalable and distributed.
  • Easy to add new consumers.
  • Improves agility.


Here are some challenges of event-drive architecture:

  • Guaranteed delivery.
  • Error handling is difficult.
  • Event-driven systems are complex in general.
  • Exactly once, in-order processing of events.

Use cases

Below are some common use cases where event-driven architectures are beneficial:

  • Metadata and metrics.
  • Server and security logs.
  • Integrating heterogeneous systems.
  • Fanout and parallel processing.


Here are some widely used technologies for implementing event-driven architectures:

This article is part of my open source System Design Course available on Github.

Top comments (0)