Olay Güdümlü Mimari (Event-Driven Architecture) Nedir?
Olay güdümlü mimari nedir, üretici, mesaj aracısı ve tüketici nasıl çalışır? Sipariş örneği, istek-yanıt modelinden farkı ve dikkat edilecek noktalar.
Olay güdümlü mimari nedir?
Olay güdümlü mimari (event-driven architecture, EDA), yazılım bileşenlerinin birbirleriyle doğrudan istek göndererek değil, olaylar üzerinden haberleştiği bir tasarım yaklaşımıdır. Olay, sistemde olmuş bir şeyin kaydıdır: sipariş oluşturuldu, ödeme alındı, stok azaldı gibi. Olayı üreten bileşen kimin ilgileneceğini bilmek zorunda değildir; ilgilenen bileşenler olaya abone olur ve kendi işini yapar.
Bu yaklaşım bileşenleri birbirinden gevşek bağlar. Yeni bir bileşen eklemek için olayı üreten tarafı değiştirmek gerekmez.
Temel bileşenler
- Olay: Olmuş bir durum değişikliğinin değiştirilmeyen kaydı. İçinde olayın türü, zamanı ve ilgili veriler bulunur.
- Üretici (producer): Olayı oluşturup yayınlayan bileşen.
- Mesaj aracısı (broker) ya da olay kanalı: Olayı alıp ilgili tüketicilere ileten, gerektiğinde saklayan altyapı.
- Tüketici (consumer): Olaya abone olup tepki veren bileşen. Aynı olayı birden çok tüketici kendi amacıyla işleyebilir.
Üretici ile tüketici arasındaki bu aracılık, tarafların aynı anda ayakta olmasını da gerektirmez; tüketici geçici olarak kapalıysa olay sırada bekler.
Örnek: bir sipariş nasıl akar?
Örneğin bir e-ticaret sisteminde müşteri siparişi onaylayınca sipariş servisi yalnızca 'sipariş oluşturuldu' olayını yayınlar. Ödeme servisi bu olayı alıp tahsilatı başlatır. Stok servisi ürün adedini ayırır. Bildirim servisi müşteriye onay mesajı gönderir. Analitik servisi olayı satış istatistiğine işler.
Sipariş servisi bu servislerin hiçbirini doğrudan çağırmaz. Yarın bir kampanya servisi eklenecekse sipariş servisinin koduna dokunulmadan, aynı olaya abone olması yeterlidir.
İstek-yanıt modelinden farkı
Klasik istek-yanıt yaklaşımında bir servis diğerini çağırır ve cevabı bekler. Çağıran, çağrılanı tanır ve ona bağımlıdır; çağrılan servis yavaşsa ya da çökmüşse zincir etkilenir.
Olay güdümlüde üretici yayınlar ve yoluna devam eder. Bu, gevşek bağlılık, bağımsız ölçeklenme ve yeni tüketici eklemede kolaylık sağlar. Karşılığında akışı uçtan uca izlemek zorlaşır, iş sonucu anında değil sonradan oluşur ve veri tutarlılığı anlık değil nihai olur. Sistem iki yaklaşımı birlikte de kullanabilir: anlık yanıt gereken işlemler istek-yanıtla, tepki niteliğindeki işler olaylarla yürütülür.
Nerede kullanılır?
Birden çok bileşenin aynı gelişmeye tepki vermesi gereken sistemlerde uygundur: sipariş ve ödeme akışları, sensör ve cihaz verisi, kullanıcı etkinliklerinin izlenmesi, bildirim sistemleri ve kurumlar arası entegrasyon. Mikroservis mimarilerinde servisleri birbirinden ayırmanın yaygın yollarından biridir. Olay kaynaklaması (event sourcing) ve CQRS gibi desenlerle birlikte de kullanılır; bu desenlerde sistemin durumu olayların kaydından türetilir.
Dikkat edilecek noktalar
- Olay tasarımı: Olayların anlamlı, geçmişte olmuş bir iş olayını anlatan adlarla ve sürümlenebilir bir şemayla tanımlanması gerekir.
- Tekrar teslim: Aynı olayın birden fazla kez gelme ihtimaline karşı tüketicilerin tekrar işlemeye dayanıklı (idempotent) yazılması önemlidir.
- Sıra ve hata yönetimi: Olayların sırası, işlenemeyen olayların ayrı bir kuyruğa alınması ve yeniden denenmesi planlanmalıdır.
- Gözlemlenebilirlik: Akış dağınık olduğundan olayların uçtan uca izlenebilmesi için izleme ve günlük altyapısı kurulmalıdır.
- Gereksiz kullanım: Basit ve doğrudan yanıt gerektiren işlerde olay yapısı karmaşıklık ekler.
Mindset programlarında nerede çalışılır?
Event-Driven Mimari eğitimi Olay Güdümlü Mimariye Giriş, Olay Tasarımı ve Şema, Üretici Tasarım Desenleri, Tüketici Tasarım Desenleri, Mesaj Aracısı Seçimi ve Yapılandırma, Olay Kaynaklaması ve CQRS ile Entegrasyon modüllerini içerir. Olay Güdümlü Mimari (Event-Driven Architecture) Tasarımı eğitiminde ise Olay Şeması ve Sürüm Yönetimi, Dağıtık İş Akışları ve Nihai Tutarlılık, Gözlemlenebilirlik ve Test başlıkları yer alır.
İlgili Mindset programı
Event-Driven Mimari
Sık sorulan sorular
Olay güdümlü mimari ile mikroservis aynı şey mi?
Hayır. Mikroservis, uygulamayı bağımsız dağıtılan küçük servislere bölme yaklaşımıdır. Olay güdümlü mimari ise bileşenlerin nasıl haberleştiğini tanımlar. Mikroservisler olaylarla da, doğrudan çağrılarla da haberleşebilir. İki yaklaşım sıkça birlikte kullanılır ama biri diğerini gerektirmez. Örneğin tek parça bir uygulamanın modülleri de olaylarla haberleşebilir.
Olay ile mesaj arasındaki fark nedir?
Mesaj, iki taraf arasında taşınan genel bir veri paketidir ve bir komut ya da istek de olabilir. Olay ise olmuş bir şeyin bildirimidir ve geçmiş zaman anlamı taşır, örneğin sipariş oluşturuldu. Olayı gönderen, alıcıdan belirli bir işlem beklemez; alıcılar olaya kendi kararlarıyla tepki verir.
Olay güdümlü mimarinin en büyük dezavantajı nedir?
En belirgin zorluk, akışın dağınık olması nedeniyle bir işlemin baştan sona izlenmesinin ve hata ayıklanmasının güçleşmesidir. Veri tutarlılığı anlık değil nihai olur ve olayların tekrarı ile sırası ayrıca ele alınmalıdır. Bu nedenle izleme altyapısı ve şema yönetimi baştan planlanmalıdır. Bu zorluklar tasarım disipliniyle yönetilebilir, ama deneyimsiz ekipler için ciddi bir öğrenme eğrisi oluşturabilir.
Mesaj aracısı olmadan olay güdümlü mimari kurulabilir mi?
Kavramsal olarak olaylar doğrudan da iletilebilir, ama pratikte güvenilir teslim, saklama ve çoklu tüketici desteği için çoğunlukla bir mesaj aracısı ya da olay akış platformu kullanılır. Hangi aracının seçileceği; sıralama, saklama süresi ve tüketici sayısı gibi gereksinimlere bağlıdır. Küçük ve basit sistemlerde hafif çözümler yeterli olabilir, ama ölçek büyüdükçe aracı ihtiyacı belirginleşir.
Olay kaynaklaması (event sourcing) nedir?
Olay kaynaklamasında bir kaydın yalnızca güncel durumu değil, o duruma yol açan tüm olaylar saklanır. Güncel durum, olayların baştan oynatılmasıyla türetilir. Bu, tam bir denetim izi ve geçmişe dönük analiz sağlar, ama tasarımı ve sorgulama yöntemini karmaşıklaştırır. Olay güdümlü mimari için zorunlu değil, birlikte kullanılabilen bir desendir.