Ana içeriğe geç
Blog'a Dön
ArchitectureEvent DrivenKafkaMicroservices
Ağaç (Tamamlanmış)

Event-Driven Architecture: Olay Güdümlü Düşünmek

2025-11-2910 dk

Yazılım mimarilerinde en büyük sorunlardan biri "bağımlılık"tır (coupling). Geleneksel REST tabanlı mimarilerde servisler birbirine sıkı sıkıya bağlıdır. Sipariş servisi, Stok servisini çağırır; Stok servisi, Ödeme servisini çağırır. Bu bir zincirdir ve zincir, en zayıf halkası kadar güçlüdür. Bir servis yavaşlarsa, hepsi yavaşlar. Biri çökerse, süreç durur.

Event-Driven Architecture (EDA) ise bu bağımlılığı tersine çevirir. Burada servisler birbirine emir vermez, sadece "ne olduğunu" duyurur.

Request/Response vs Event-Driven

Farkı anlamak için bir restoran örneği verelim:

  • Request/Response (Senkron): Garson mutfağa gider ve aşçının başında bekler. "Çorba hazırla" der, çorba bitene kadar bekler. Sonra "Salata hazırla" der, bekler. Bu sırada başka müşteriye bakamaz.
  • Event-Driven (Asenkron): Garson siparişi bir kağıda yazar ve panoya asar (Event Producer). Sonra işine döner. Aşçı panoyu görür, yemeği yapar ve "Yemek Hazır" diye bağırır (Event). Garson bunu duyar (Event Consumer) ve yemeği alır.

EDA'da servisler pasif-agresif emirler vermez ("Bunu yap!"). Sadece olan biteni (Fact) duyurur ("Sipariş Oluşturuldu"). İlgilenen diğer servisler bu duyuruyu dinler ve kendi işini yapar.

EDA'nın Bileşenleri

  1. Event Producer: Olayı yaratan kaynak (Örn: Sipariş Servisi). Olayı fırlatır ve unutur (Fire and Forget). Kimin dinlediği umurunda değildir.
  2. Event Router/Broker: Olayı ileten aracı (Örn: Kafka, RabbitMQ). Postane gibidir, mektubu alır ve doğru kutuya koyar.
  3. Event Consumer: Olayı dinleyen ve tepki veren servis (Örn: Stok, Bildirim, Analitik servisleri).

Avantajları: Neden Bu Kadar Popüler?

  1. Loose Coupling (Gevşek Bağlılık): Producer, Consumer'ın kim olduğunu, kaç tane olduğunu veya ne yaptığını bilmez. Yarın sisteme "Sipariş gelince SMS at" diye yeni bir özellik eklemek isterseniz, Sipariş Servisi'nin koduna dokunmazsınız. Sadece yeni bir Consumer eklersiniz.
  2. Scalability (Ölçeklenebilirlik): Yük arttığında Consumer sayısını artırarak sistemi ölçekleyebilirsiniz. Kafka gibi araçlar bunu çok iyi yönetir.
  3. Fault Tolerance (Hata Toleransı): Consumer çökerse ne olur? Hiçbir şey. Eventler Broker'da (Kafka) bekler. Servis ayağa kalkınca kaldığı yerden devam eder. Veri kaybı olmaz.

Tuzakları (Pitfalls): Dikkat Edilmesi Gerekenler

Her güzel şeyin bir bedeli vardır.

  1. Eventual Consistency: Veri anında tutarlı olmaz. Kullanıcı siparişi verir ama stok hemen düşmeyebilir. UI tarafında bunu yönetmek gerekir (Optimistic UI updates).
  2. Debugging Zorluğu: Akışı takip etmek zordur. "Bu sipariş neden kargolanmadı?" sorusunun cevabı tek bir log dosyasında değil, dağıtık izleme (Distributed Tracing - Jaeger, Zipkin) sistemindedir.
  3. Event Schema Evolution: Event yapısını değiştirmek (örn: bir alanın adını değiştirmek), tüm Consumer'ları etkiler. Schema Registry kullanmak ve geriye dönük uyumluluğu (backward compatibility) korumak şarttır.

Sonuç

Event-Driven Architecture, karmaşık iş süreçlerini yönetmek için harika bir araçtır. Ancak senkron düşünce yapısından asenkron düşünce yapısına geçiş, teknik bir değişimden çok zihinsel bir devrim gerektirir. "Şimdi ne olacak?" yerine "Ne oldu?" diye düşünmeye başladığınızda, EDA'nın gücünü keşfetmişsiniz demektir.

Bağlantı Haritası

Mühendislik
Tarih
Anlatılar
Graph Loading...