Monolitik, SOA ve Mikro Servis Mimari Nedir?
Monolitik Mimari
Günümüzde bir çok uygulama çok faza veriyi göndermek ve almak zorundadır. Örneğin Twitter’de dolaşırken ekranı yukarı kaydırdığınızda yeni postların gelmesi için bir istekte bulunursunuz, uygulama hemen sunucuya sorar, sunucu yeni postların yazı, görsel ve videoları için database’ten verileri ister. Siz bir post atmak istediğinizde de telefonunuzdan veya bilgisayarınızdan upload ettiğiniz veriyi database sunucu üzerinden gönderirsiniz.
İstekleri ve gönderileri sorduğunuz sunucunun içinde üç katman bulunur.
- Presentation Layer: Son kullanıcının gördüğü yerdir (UI)
- Business Layer: Mantıksal işlemlerin yapıldığı yerdir, kodların yazıldığı alandır.
- Data Access Layer: Database’den veri isteme alanıdır
Sunucunun kullanıcı isteklerine cevap verebilmesi için tek bir sunucu yeterli olmayabilir, bu durumda sunucular çoklanmalıdır. Çoklanan sunucuların hangilerinin kullanıcılara destek vereceğini belirleyen sisteme load balancer denmektedir. Adından da anlaşılacağı gibi load balancer yükleme isteğini sunucuların müsaitlik durumuna göre belirler. Örneğin siz bir post görüntülemek istediğinizde hangi sunucu boştaysa o sunucunun size yanıt vermesini sağlar.
Monolitik Mimarinin Avantajları
- Geliştirilmesi basittir
- Test edilebilirliği kolaydır
- Deployment oldukça kolaydır
- Ölçeklendirme kolaydır
- Yatay olarak mimarinin kopyasını loadbalancer ile çalıştırmak mümkündür.
- Dikey olarak büyümeye müsade eder
Monolitik Mimarinin Dezavantajları
- Proje büyüdükçe bakım zorlaşır, bakım maliyetleri artar
- Uygulamanın boyutu başlama süresini geciktirmektedir.
- Uygulamanın güncellenmesi durumunda tüm uygulama deploy edilmelidir.
- Ölçeklendirme aşamasında bazı sorunlar yaşanabilir.
- Ölçeklendirme projenin bir kısmına değil tamamına yapılmak zorundadır.
Monolitik mimaride sunucuların tüm bileşenleri ile dublicate edilmesi gerekli olmayan bazı katmanların maliyetine ve zaman kaybına katlanmayı zorunlu hale getirir. Bu durumdan kaçınmak ve sadece gerekli alanlarda geliştirme yapabilmek için farklı mimariler geliştirilmiştir, bunlardan bir SOA dır.
Service Oriented Architecture (SOA) Nedir?
SOA birden fazla servisin ayrı ayrı tasarlandığı ve servislerin hem kendi aralrında hem de farklı DB ler ile haberleşebildiği mimaridir. Özelliklerini aşağıdaki gibi sıralamak mümkündür.
- SOA servislerin ayrı ayrı tasarlanıp tek bir yapı oluşturulmasına imkan sağlar.
- Yapılar birbirinden bağımsız olarak çalıştırılabilir bu yönteme loose coupling denmektedir.
- Birden çok sistemin yer aldığı yapılarda kullanılmaktadır.
- Kendi içerisinde birden çok bileşeni vardır. (Policies, Contracts, Services vb.)
- Dağıtık yazılım sistemlerinin kalitelerini arttırmayı hedeflemektedir. (Tekrar kullanılabilirlik, bakım ve uyumluluk)
SOA’da her hizmet ayrı bir servis olarak görev yapmaktadır, servisler ayrı ayrı veya aynı database gidebilir.
Servislerin bir araya gelerek bir proje oluşturmasını sağlamak için farklı database’ler ile iletişim halinde olmaları gerekmekedir. Birden fazla servis ve birden fazla DB için diagram aşağıdaki gibi olacaktır. Burada Enterprise Bus Service (EBS) önemli bir ayrıntıdır. EBS, Client’ten gelen isteği alır ve hangi servis için istek gönderildiyse client’i o servis ile buluşturur. Servislerin oluşturduğu kümeye ise SOA denir. SOA kitlesinin dış dünya ile haberleşmesi için Webservice ve WDSL yöntemleri kullanılmaktadır.
SOA Avantajları
- Servisler tekrar kullanılabilir (Reusable)
- Servislerin bakım ve onarım süreçleri kolaydır (Maintained)
- Güvelilir ve dayanıklıdır
- Up time oranları yüksektir, ulaşılabilir
- Yatay ve dikey ölçeklendirme mümkündür
- Platform bağımsızdır
- Üretkeniği yüksektir
SOA Dezavantajları
- Servisler kendi aralarında konuşurken network call yaparlar, EBS sürekli bir validation içindedir. Bu durum aşırı yüklenme oluşturmaktadır. (Overload)
- Yüksek band genişliği gerektiği için yüksek performanslı araçlar kullanılmak zorundadır. Bu durum yüksek maliyet gerektirir
Mikro Servisler Mimarisi
SOA servislerin bağımsız veya birlikte çalışmasına imkan tanısa da bazı iş süreçlerinde bu yeterli değildir. Daha çok servisin daha fazla adımda bağımsız işlem yapabilmesi için farklı mimariler geliştirilmektedir. Bu mimarilerden biri mikro servistir. Aslında tek başına bir mimari olmayan mikro servis SOA’nın bir yorumu olarak değerlendirilebilir. Mikro servis mimarisinde her servis kendine ait dünyada çalışmayı hedefler buna server stack denmektedir. Mikro servis modelinde her servisin kendine ait bir database i vardır. Asıl amaç küçük bir işi mükemmel düzeyde gerçekleştirmektedir. Mikro servisler dış ve iç dünya ile API Gateway üzerinden iletişime geçmektedir. Bu durum mikro servislerin farklı dil ve teknolojilerle hatasız iletişim kurabilmesine imkan sağlamaktadır. Mikro servisler stateless yapılardır, herhangi bir sunucuya bağlılık içermez. Mikro servislerde sadece dikey ölçeklendirme yapılabilir.
Mikro servislerde Client’in herhangi bir veriyi görme isteği önce API Gateway’a gider. API Gateway isteği ulaşılmak istenen verinin buldunduğu sunucuya götürür, örneğin client post bilgisine ulaşmak istesin, istek API GW geldi, API GW’den post verisinin bulunduğu mikro servis sunucusuna bir istek gönderildi. Post servisi API GW den gelen bu istek üzerine bir json cevabı döner. API GW gelen bu cevaba istinaden sonucu client’e gösterir.
Mikro servisler modelinde belli veri kümeleri servislere ayrıldığı gibi, o servislerdeki özel bazı veriler de alt mikro servislere ayrılabilir. Örneğin post altında bir de anket olsun, anket işlemi için ayrı bir mikro servisi posts mikro servisi altına eklemek mümkündür. Netflix’te film ararken özelleştirilmiş film önerileri için çalışan tahmin algoritmaları alt mikro servis üzerinden çalışabilir. Multimedya için oluşturulan mikro serviste video ve resim için farklı mikro servisler kullanılabilir, video encode edilmesi gereken bir media iken image CDN teknolojisi kullanabilir.
Mikro Servislerin Avantajları
- Çok dilli mimariyi destekler
- Kolay ölçeklendirilebilir
- Daha iyi takım yönetimi sağlar
- Yenilik yapmak kolaydır
- Kendilerine ait DB leri vardır
- Daha odaklıdırlar (Yapı ve ölçeklendirme)
- İmplemente dilirken diğer servisler etkilenmez.
Mikro Servislerin Dezavantajları
- İmplementasyon kolay değildir (Network calls, service discovery)
- Debug kolay değildir
- Fault Management (Hata yönetimi) kolay değildir.
Derin okuma için bkz.