Event-Driven Architecture
Bu mimari, asenkron çalışan ve yüksek ölçeklendirilebilir uygulamalarda kullanılan bir yapıdır. Yüksek bir adaptasyon yeteneğine sahiptir ve küçükten büyüğe ve karışık yapılı uygulamalar için kullanılmaktadır.
İki ana topolojiden oluşur: Mediator ve Broker.
Mediator Topolojisi
- Birden fazla adıma sahip olan olaylar (events) için kullanılır ve bu olayın işlenmesi için belirli bir seviyede yönetime ihtiyaç duyar.
- 4 ana bileşene sahiptir: event queue (olay kuyruğu), event mediator, event channels ve event processors.
- Olay akışı, client (istemci)’ın olay kuyruğuna bir olay göndermesi ile başlar ve bu kuyruk, olayı event mediator’a taşır. Sonrasında event mediator ilk olayı alır ve event channel (olay kanalı)’a ilave asenkron olaylar göndererek sürecin her adımının çalıştırılmasını yönetir. Event processors (Olay işleyiciler), olay kanallarını dinler, event mediator’dan olayları alır ve olayı işlemek için spesifik iş mantığını çalıştırır.
- Olaya dayalı mimarinin, bir düzineden başlayıp yüzlerce olay kuyruğuna sahip olması yaygın bir durumdur. Aşağıdaki desen, olay kuyruğu bileşenlerinin uygulanmasını belirlemez. Bu bir mesaj kuyruğu da olabilir veya web servis uç noktası da olabilir.
- Event mediator, ilk olayın yer aldığı adımların yönetilmesinden sorumludur.
- Event mediator, aslında ilk olayı işlemek için ihtiyaç duyulan iş mantığını uygulamaz. Aksine sadece ilk olayı işlemek için gerekli adımları bilir.
- Olay kanalları hem mesaj kuyruğu (event queue) hem mesaj başlıkları (event topics) olabilir. Mesaj başlıkları mediator topolojisinde yaygın bir şekilde kullanılır. Bu sayede olayların işlenmesi birden fazla olay işleyicisi tarafından gerçekleştirilebilir.
- Olay işleyiciler, bir uygulamada veya bir sistemde belirli bir görevi yerine getiren bağımsız ve kendi kendine yeten yapılardır.
- Unutulmaması gereken bir nokta da her olay işleyici sadece bir işi yapmalıdır ve bu işi tamamlarken de diğer olay işleyicilere bel bağlamamalıdır.
- En basit ve en yaygın kullanılan örnekler Spring Integration, Apache Camel veya Mule ESB gibi açık kaynak yapılardır.
Broker Topolojisi
- Broker topolojisinde, mediator topoljisinin aksine ortada herhangi bir event mediator bulunmaz. Mesaj akışı tüm olay işleyiciler arasında bir zincir yapısında dağıtılır. Bu topoloji, basit bir olay işleme akışı (simple event processing flow) istediğimizde ve merkezi bir olay yönetiminin istenmediği zamanlarda kullanılır.
- İki ana bileşenden oluşur: broker (aracı) ve event processor (olay işleyici).
- Her olay işleyici, bir olayın işlenmesinden sorumludur ve yeni gerçekleştirilen bir aksiyonu belirten bir olayı yayınlar. Bazı zamanlarda bir olay, bir olay işleyici tarafından yayınlansa dahi başka bir olay işleyici tarafından alınmayabilir. Bu durum, bir uygulama geliştirildiğinde veya ileriye yönelik fonksiyonellik, bir uzantı sağlanılacağında yaygın olarak kullanılır.
- En basit anlatımıyla broker topolojisi, bir iş fonksiyonunu gerçekleştiren olaylar zinciridir.
- Bu topolji bayrak yarışına benzer. Bayrak yarışında koşucu bir sopa taşır ve belirli bir mesafe koştuktan sonra bunu diğer koşuyuca verir. Ve bu yarış bitene kadar bu şekilde devam eder. Bir koşucu sopayı diğer koşuyuca verdikten sonra yarışı biter. Bu broker topolojisinde de aynıdır. Bir olay işleyici, bir olayı işleyip verdikten sonra bu olaya bir daha dahil olmaz.
Olaya dayalı mimarinin uygulanması görece karmaşıktır. Bunun ana nedeni ise asenkron dağıtılmış yapıdır. Bu yapı uygulandığında, birçok mimari problemle karşılaşılır. Uzaktan işleme kullanılabilirliği, cevaplanabilirlik eksiklikleri ve broker/mediator hatalarında broker’ın olaya yeniden bağlanması mantığında problemlerle karşılaşlır. Bu mimarinin en zorlayıcı yönleririnden bazıları; bu mimarinin oluşturulması, bakımı ve olay işleyici bileşenlerinin kontraktlarının yönetilmesidir.
Değerlendirme kısmı okuduğum kitapta 6 ana başlık altında toplanıyor. Bu şekildeki anlatım hoşuma gittiği için ben de aynı yapıda değerlendirme kısmını oluşturdum.
Olaya Bağlı Mimarinin Değerlendirilmesi;
- Çeviklik: Yüksek
– Olay işleyiciler tek amaçlı ve tamamen diğer olay işleyicilerden bağımsız olduğu için, değişiklikler izole bir şekilde ve diğer bileşenleri etkilemeden yapılabilir. - Dağıtım Kolaylığı: Yüksek
– Broker topolojisinin dağıtımı, mediator topolojisine göre daha kolaydır. Event mediator bileşenleri birbirlerine sıkı bir şekilde bağlıdır. Bir olay işleyicide değişiklik yapılmak istendiğinde event mediator’da da değişiklik yapılması gerekir. Bu da iki bileşenin de deployment’ının yapıılması ile sonuçlanır. - Testedilebilirlik: Düşük
– Test etmek zor olmasa da olay üretecek test araçlarına veya test üzerine özelleşmiş müşteriye ihtiyaç duyar. Asenkron yapının doğası gereği de test yapmak zordur. - Performans: Yüksek
– Asenkron kabiliyetlerinden dolayı yüksek bir performansı vardır. - Ölçeklenebilirlik: Yüksek
– Her olay işleyici birbirinden ayrı bir şekilde ölçeklendirilebilir. - Geliştirme kolaylığı: Düşük
– Mimarinin asenkron doğasından ötürü geliştirme biraz karmaşık olabilmektedir. Kontraktların yaratılması ve bunun yanında da ileri seviyede bir hata yönetimine de ihtiyaç duyar.
Yazımın devamında Mikroçekirdek Mimari (Mikrokernel Architecture)’den bahsedeceğim.
Kaynakça: Software Architecture Patterns — Mark Richards