Event-Driven Architecture (EDA) #

Dalam dunia sistem terdistribusi modern, kebutuhan akan aplikasi yang responsif, scalable, dan loosely coupled semakin tinggi. Banyak sistem tidak lagi berjalan secara linear atau sinkron, melainkan bereaksi terhadap berbagai kejadian (event) yang terjadi di dalam sistem maupun dari luar sistem.

Event-Driven Architecture (EDA) hadir sebagai pendekatan arsitektur yang memusatkan desain sistem pada event sebagai warga kelas satu (first-class citizen).

Berikut gambaran sederhana Event-Driven Architecture secara text-based:

+-----------+        publish event        +----------------+
| Producer  | ------------------------->  | Event Broker   |
| (Service) |                             | (Kafka/Rabbit) |
+-----------+                             +----------------+
                                                  |
                                                  | consume event
                              +-------------------+-------------------+
                              |                   |                   |
                     +----------------+   +----------------+   +----------------+
                     | Consumer A     |  | Consumer B      |   | Consumer C     |
                     | (Service)      |  | (Service)       |   | (Service)      |
                     +----------------+   +----------------+   +----------------+

Produser hanya mempublikasikan event, tanpa mengetahui siapa yang akan memprosesnya. Konsumer dapat bertambah atau berkurang tanpa memengaruhi produser.

Apa itu Event-Driven Architecture? #

Event-Driven Architecture adalah gaya arsitektur di mana alur komunikasi antar komponen ditentukan oleh event. Event merepresentasikan sesuatu yang telah terjadi di dalam sistem, misalnya:

  • UserRegistered
  • OrderCreated
  • PaymentCompleted
  • FileUploaded

Komponen utama dalam EDA biasanya terdiri dari:

  1. Event Producer Komponen yang menghasilkan dan mempublikasikan event.

  2. Event Broker / Event Bus Media perantara untuk mendistribusikan event (contoh: Kafka, RabbitMQ, AWS SNS/SQS, Google Pub/Sub).

  3. Event Consumer / Subscriber Komponen yang mendengarkan dan bereaksi terhadap event tertentu.

EDA menekankan komunikasi asynchronous, sehingga produser tidak menunggu konsumer menyelesaikan pekerjaannya.


Tujuan Architecture #

Tujuan utama dari Event-Driven Architecture antara lain:

  • Loose Coupling Produser dan konsumer tidak saling bergantung secara langsung.

  • Scalability Konsumer dapat diskalakan secara horizontal sesuai beban event.

  • Responsiveness Sistem dapat bereaksi secara cepat terhadap kejadian.

  • Extensibility Menambahkan fitur baru cukup dengan menambahkan konsumer baru tanpa mengubah produser.

  • Asynchronous Processing Menghindari bottleneck akibat proses sinkron.


Kapan Cocok Digunakan? #

EDA sangat cocok digunakan pada kondisi berikut:

  • Sistem microservices dengan banyak integrasi antar layanan
  • Sistem dengan traffic tinggi dan kebutuhan real-time atau near real-time
  • Aplikasi yang membutuhkan reaksi terhadap kejadian, bukan alur request-response klasik
  • Sistem yang sering berkembang dan membutuhkan penambahan fitur tanpa modifikasi besar
  • Arsitektur yang membutuhkan event replay atau audit trail

Contoh use case:

  • E-commerce (order, payment, shipping)
  • Sistem notifikasi
  • IoT dan streaming data
  • Financial system (transaction event)
  • Analytics dan monitoring

Pros dan Cons #

✅ Pros #

  • Loose coupling antar service
  • Sangat scalable dan fault-tolerant
  • Mudah menambahkan konsumer baru
  • Mendukung pemrosesan asynchronous dan paralel
  • Cocok untuk sistem terdistribusi besar

❌ Cons #

  • Kompleksitas lebih tinggi dibanding arsitektur sinkron
  • Debugging dan tracing lebih sulit
  • Event ordering dan idempotency perlu perhatian khusus
  • Membutuhkan infrastructure tambahan (broker, monitoring)
  • Konsistensi data biasanya bersifat eventual consistency

Informasi Tambahan yang Perlu Diketahui #

  • Event Notification vs Event Carried State Transfer

    • Notification: event hanya memberi tahu sesuatu terjadi
    • Carried State: event membawa data lengkap
  • EDA dan CQRS EDA sering dikombinasikan dengan CQRS untuk memisahkan command dan query.

  • EDA dan Event Sourcing Event dapat dijadikan sumber kebenaran (source of truth) sistem.


Best Practice #

Beberapa praktik terbaik dalam menerapkan EDA:

1. Desain Event yang Jelas dan Stabil #

  • Gunakan nama event berbasis past tense (OrderCreated, bukan CreateOrder)
  • Event harus immutable
  • Hindari perubahan skema event tanpa versioning

2. Gunakan Event Schema & Versioning #

  • Gunakan Avro, Protobuf, atau JSON Schema
  • Terapkan backward compatibility

3. Pastikan Idempotency pada Consumer #

  • Event bisa terkirim lebih dari sekali
  • Konsumer harus aman terhadap duplicate event

4. Jangan Menyimpan Logic Bisnis di Event Broker #

  • Broker hanya sebagai pengantar event
  • Logic tetap berada di consumer

5. Implementasikan Observability #

  • Logging, metrics, dan distributed tracing
  • Gunakan correlation ID pada event

6. Tangani Error dengan Baik #

  • Gunakan retry mechanism
  • Dead Letter Queue (DLQ) untuk event bermasalah

Penutup #

Event-Driven Architecture adalah pendekatan arsitektur yang sangat powerful untuk membangun sistem modern yang scalable, fleksibel, dan responsif. Namun, kekuatan ini datang bersama kompleksitas yang tidak kecil.

EDA paling efektif ketika digunakan dengan tujuan yang jelas, desain event yang matang, serta dukungan observability dan infrastructure yang baik. Jika diterapkan dengan benar, Event-Driven Architecture mampu menjadi fondasi yang kokoh bagi sistem terdistribusi berskala besar di masa depan.

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact