Olay Güdümlü Mimari
- İngilizcesi
- Event-Driven Architecture
- Türkçe karşılığı
- olay tabanlı mimari
- Okunuşu
- ivent drivın arkitekçır
Günlük kullanımda iki ad da yaygın.
Kısaca
Olay güdümlü mimari, servislerin bir siparişin verilmesi gibi olaylar üreterek ve bunlara tepki vererek iletişim kurduğu bir yazılım tasarım tarzıdır.
Olay güdümlü mimari nedir?
Olay güdümlü mimaride bileşenler birbirini doğrudan çağırmak yerine bir şeyin olduğunu duyurarak iletişim kurar. Olay (event), genellikle küçük bir veri yüküyle birlikte OrderPlaced ya da UserSignedUp gibi bir olgunun kaydıdır. Üreticiler (producer) olayları yayınlar ve istenen sayıda tüketici (consumer) bunlara birbirinden bağımsız tepki verebilir.
Olaylar genellikle bir mesaj kuyruğu ya da olay akışı platformu gibi, onları saklayan ve abonelere ileten bir olay aracısı (event broker) üzerinden ilerler. Örneğin bir sipariş verildiğinde sipariş servisi tek bir olay yayınlar; ödeme, stok, e-posta ve analitik servislerinin her biri kendi yöntemiyle tepki verir. Sipariş servisi kimin dinlediğini bilmez ve umursamaz; bu yüzden onu değiştirmeden yeni tüketiciler eklenebilir.
Yangın alarmı bir benzetmedir: çaldığında insanlar binayı terk eder, itfaiye çağrılır ve asansörler durur; alarm bunların hiçbirini bilmez. Olay güdümlü mimari mikroservislerde, gerçek zamanlı sistemlerde, bağlı cihazlarda, ödeme işlemede ve yavaş işlerin kullanıcıyı bekletmek yerine arka planda yapılması gereken her yerde yaygındır.
Bunun ödünü, sistemin eşzamansız ve nihai tutarlı (eventually consistent) hâle gelmesidir: farklı servisler güncel durum konusunda kısa süreliğine uyuşmayabilir ve tek bir isteği birçok olay boyunca izlemek iyi bir günlükleme ve iz sürme gerektirir. Tüketiciler ayrıca yinelenen ya da sırası bozuk olayları da ele almalıdır; idempotent işleyicilerin önemi buradan gelir. Olay güdümlü mimari, tek bir program içinde çalışan observer deseninden ve çağıranın yanıt beklediği istek-yanıt API'lerinden farklıdır.
Önemli noktalar
- Bileşenler olay yayınlayıp tüketerek iletişim kurar.
- Üreticiler hangi tüketicilerin var olduğunu bilmez; bu, servisleri gevşek bağlı tutar.
- Bir olay aracısı ya da mesaj kuyruğu olayları saklar ve iletir.
- Sistemler eşzamansız ve nihai tutarlı hâle gelir.
- Olaylar birden fazla kez ulaşabileceği için tüketiciler idempotent olmalıdır.
Örnek
// broker is a placeholder for a message queue or event streaming client
// Producer: the order service announces what happened and moves on
await broker.publish("order.placed", { orderId: "A-1001", total: 59.9 });
// Consumers: each service reacts independently to the same event
broker.subscribe("order.placed", async (event) => {
await sendConfirmationEmail(event.orderId);
});
broker.subscribe("order.placed", async (event) => {
await reserveStock(event.orderId);
});Sık sorulan sorular
Olay güdümlü mimari ile istek-yanıt arasındaki fark nedir?
İstek-yanıt modelinde çağıran belirli bir servise istek gönderir ve yanıt bekler. Olay güdümlü mimaride ise üretici beklemeden bir olay yayınlar ve ilgilenen servisler buna kendi takvimlerinde tepki verir.
Olay aracısı (event broker) nedir?
Olay aracısı, üreticilerden olayları alan, saklayan ve tüketicilere ileten altyapıdır. Mesaj kuyrukları ve olay akışı platformları yaygın örneklerdir.
Nihai tutarlılık (eventual consistency) nedir?
Nihai tutarlılık, bir değişiklikten sonra sistemin farklı bölümlerinin kısa bir süre farklı veri gösterebileceği, ancak ilgili olaylar işlendiğinde hepsinin güncel hâle geleceği anlamına gelir. Olay güdümlü ve dağıtık sistemlerde yaygın bir ödündür.
İlgili sayfalar
- Mesaj KuyruğuBackend ve API'ler, s. 28Mesaj kuyruğu, bir servisten gelen mesajları bir başkası işlemeye hazır olana kadar saklayan ve sistemin parçalarını eşzamansız çalıştıran bir bileşendir.
- MikroservislerYazılım Mimarisi, s. 24Mikroservisler, bir uygulamanın ağ üzerinden iletişim kuran, küçük ve bağımsız olarak dağıtılabilen servislere bölündüğü bir mimari tarzdır.
- Observer DeseniYazılım Mimarisi, s. 28Observer deseni, subject adlı bir nesnenin durumu değiştiğinde abone listesini otomatik olarak bilgilendirdiği davranışsal bir tasarım desenidir.
- WebhookBackend ve API'ler, s. 47Webhook, bir uygulamanın, tamamlanan bir ödeme gibi belirli bir olay gerçekleştiği anda sizin verdiğiniz bir URL'ye otomatik olarak gönderdiği HTTP isteğidir.
- IdempotencyBackend ve API'ler, s. 23Idempotency, bir işlemin bir kez de çalışsa çok kez de çalışsa aynı sonucu üretmesi özelliğidir; böylece bir isteğin yanlışlıkla tekrarlanması güvenli olur.
- CQRSYazılım Mimarisi, s. 7CQRS, veriyi değiştiren kodu (komutlar) veriyi okuyan koddan (sorgular) ayırarak iki ayrı modele bölen bir mimari desendir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin