Reactive Manifesto

Onur Dayıbaşı
Architectural Patterns
2 min readNov 27, 2015

http://www.reactivemanifesto.org/ adresinden erişebilirsiniz. Ben okuduklarımdan anladıklarımı kısaca özetlemeye çalışacağım.

Günümüzün uygulama geliştirme ihtiyaçları değişmiştir. Eskiden kullanıcılar uygulamalarını belli bir kullanıcı kitlesine hitap ederken, bu uygulamaların sunucular ile etkileşimi belli sınırlar içerisindeyken, günümüzde mobil cihazların ve bunların üzerinde kullanılan uygulamaların çok hızlı şekilde artması. Mobil cihazların sadece telefon ile sınırlı kalmadan Gözlük, Saat, Araba, Ev, Ev Aletleri, Akıllı şehirler(Internet Of Things) hepsinin internet üzerinden sunucular ile sürekli irtibat halinde durumunda olma ihtiyacı.

Uygulamaların kullanılma oranlarını 7/24 olması, uygulamaların cevap verme durumunun %100 istenmesi. Elde edilen verilerin petabytes seviyelerinde olması. Mevcut yazılım mimari stillerin günümüz ile örtüşmediğini göstermektedir.

Reactive Manifesto’da günümüz uygulamaları nasıl geliştirilmeli ki günümüz problemlerini giderebilsin üzerine yazılmış bir bildiridir.

Reactive Sistemler Responsive, Elastic, Resilient ve Message Driven olmalıdır ki günümüz ihtiyaçlarını karşılasınlar. Esnek olmalı, Bileşenlerin birbirine bağımlılıkları az olmalı, bileşenlerin(microservisler) ölçeklenebilir olmalı. Hata durumunda bu durumdan kurtulabilecek ve yoluna devam edecek şekilde yazılmalı. Sistemler kullanıcı etkileşimine yüksek cevap verebilme kabiliyetine sahip olmalıdır.

Elastic: Sunucularınıza gelen isteklerin çok artması ve azalması durumunda , sunucularınız Dikey ve Yatay’da ölçeklenebilir olması gerekmektedir. Mevcut bulut yöntemleri bu ölçeklenmeyi otomatik olarak yapabilmektedir. Ama sizin sisteminiz bu ölçeklenmeye uygun yazılıp yazılmadığı önemlidir. Yada uygulamanızın A ,B, C servislerinden sadece B’ye gelen yük artıyor ise bu ölçeklenmeyi sadece B seviyesinde nasıl yapacağız(Microservice). Veritabanını nasıl böleceğiz, nasıl scale edeceğiz ? Uygulamanız bölündükten sonra ortak verileri nerden sağlayacak ?

Message-Driven: Ne kadar ölçeklenebilir bir sistem yapıyor olursanız olun. Mevcut sisteminiz içerisinde Disk Erişimi, Network Erişimi, CPU erişimi gibi durumlarda gelen istekleri Bloklayacaktır. Bu durumu engellemek için ya JVM seviyesinde Non-Blocking Queue, NIO(Netty) veya Event Driven (Node.js) platformlar ile uygulamanızı geliştirmeniz gerekir. Bunun haricinde JVM’ler arası sistemlerde ActiveMQ, RabbitMQ veya Simple Message Queue gibi çözümler ile sisteminizin bloklanmadan çalışmasını sağlayabilirsiniz. Sonuçta sisteminizde çok uzun sürebilecek ve arkadan gelen isteği almanızı engelleyecek durumlar olabilir. Bu durumları engellemek için sisteminizi Message-Driven geliştirmeniz gerekir.

Resilient : Artık sadece Mission-Critical uygulamaların değil her türlü uygulamanın hata durumlarına karşı toleranslı geliştirilmesi gerekiyor. Örneğin sunuculardan birisinin kapanması durumunda Load Balancer bağlı diğer sunucuların işlerine devam etmesi. Veritabanının çökmesi durumunda Replikasyon veritabanının devreye girmesi, Mobil cihazın offline olması durumunda da Local veritabanı ile durumuna devam etmesi, internet bağlantısından sonra sunucu ile senkron olabilmesi vb..

Responsive : Sistemin kullanıcıya ve diğer sistemlere yüksek kalitede hizmet verebilmesidir. Cevap süresinin kullanıcıyı ve diğer sistemleri tatmin eder düzeyde yer almasıdır.

Okumaya Devam Et 😃

Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.

--

--