Monolithic ve Microservice Mimariler Nelerdir?

Her çağın bir başlangıcı olduğu gibi bir sonu vardır. Nasıl ki öncekinin sönen yıldızı üzerine yeni doğanın altın çağı alevleniyor, aynı akıbet için mevcudiyetteki de zamanının gelmesini bekliyor. Dünyada yer edinen tüm felsefeler, tüm sanatlar, tüm bilimler nasıl ki düne baş kaldırmış, yarına ise boyun bükmeye hazır vaziyetteyse, çağın hakimi olan her olgu ve o olgunun baş aktörleri de yerlerini bir sonraki tarihe yani gelecek tarihe bırakıyor ya da bırakmaya hazırlanıyor. Dünya ilerliyor; iyisiyle kötüsüyle, sevabıyla günahıyla, doğrusuyla yanlışıyla her daim ilerliyor. Bizlere düşen bu ilerlemeye eşlik etmekten öte, değişimlerden haberdar olmak amma velakin gelişimleri yakalamak…

Gençay YILDIZ

Merhaba,

Bu içeriğimizde günümüze kadar proje geliştirme yaklaşımı olarak tercih edilen monolithic mimari ile çağdaş ve yapısal olarak parça bütün ilişkisini ön plana alan microservice mimari yaklaşımları üzerine avantaj ve dezavantajları, ne için kullanıldıkları vs. açılarından bir yandan mukayese ederken bir yandan da istişare ediyor olacağız.
Monolithic ve Microservice Mimariler Nelerdir?

İlk olarak bizlere bu güne kadar eşlik eden monolithic mimari yaklaşımı üzerine durarak başlayalım.

Monolithic Mimarisi

Monolithic ve Microservice Mimariler Nelerdir?
Monolithic; mono/tek

Monolithic yaklaşım, bir sistemin/nesnenin/olgunun tek bir parça olacak şekilde tasarlanmasıdır. Monolithic mimari ise bu tasarımın stratejik yapılanmasıdır. Monolithic yaklaşım, üretilecek sistemin/nesnenin/olgunun bileşenlerini(component) birbirlerine bağlı(interdependent) olarak ve kendi kendine yetecek(self-contained) şekilde tasarlanmasını sağlayan ve böylece tek bir bütünsel varlık olarak nihai sonuca varılmasını sağlayan mimaridir.

 

Monolithic yaklaşımı benimsemiş uygulamaların tüm fonksiyonaliteleri tek bir çatı altında geliştirilirler.

Uygulama dünyasında günümüze kadar eşlik eden monolithic yaklaşım getirdiği büyük avantajların yanında aşağıda ele aldığımız gibi kritik dezavantajlar barındırmaktadır.

Avantajları Dezavantajları
  • Yönetilebilirliği, geliştirilebilirliği, bakımı ve monitoring’i(izleme) oldukça kolaydır.
  • Küçük ve orta ölçekli projeler için geliştirilmesi hızlı ve maliyetsizdir.
  • Component ve fonksiyonlar çalışma açısından kendi aralarında tutarlı ilişki kurabilmektedirler.
  • Transaction yönetimi oldukça rahat ve irade altındadır.
  • Tüm hizmetler tek bir uygulama üzerinden sunulmaktadır. Böylece herhangi bir noktada düzeltme yahut geliştirme yapılması gerektiği taktirde uygulama baştan sona tekrar derlenmesi gerekmekte ve böylece uygulamanın varsa yayın durumu kısmi kesintilere gireceği anlamına gelmektedir.
  • Tüm bileşenler bütünsel bir parça içerisinde tek bir bütün olarak değerlendirilmektedir. Bu durumda bir noktada yapılan çalışmanın alakasız başka bir noktayla olan teması yüzünden bloklanması ve süreçten etkilenmesi demektir.
  • Monolithic yapılanmanın en kısır noktalarından biri bütünsel yaklaşımın getirdiği tek dil ve platform bağımlılığıdır. Uygulamanın bütünsel olarak inşa edilmesi tüm modüllerin aynı dil ve platformda inşa edilmesi mecburiyeti doğurmaktadır. Böylece farklı dil ve platformun kullanılamamasından dolayı ihtiyaç doğrultusunda dil ve platformun amacı dışına çıkılabilmekte ve birçok angaryaya sebep olunabilmektedir 🙂
  • Takım çalışmalarından birden fazla kişi tarafından geliştirilen uygulamalarda ister istemez birçok kod ve yapı karmaşası meydana gelmektedir. Misal; ameliyat masasında mideden ameliyat olan bir hastaya biryandan da diş doktoru tarafından dolgu yapılması ne kadar sıkıntılı bir süreçse projelerde de benzer sıkıntılı süreçler ve gerginlikler yaşanabilmektedir.
  • Uygulama tek çatı altında geliştirileceği için tüm component ve modüller kendi aralarında sıkı bağlılık göstereceklerdir. Böylece yukarıdaki misalde olduğu gibi diş doktoru dişe dolgu yaparken midede rahatsızlığın çıkma ihtimali gibi saçma sapan durumlar meydana gelecektir. Yaradan nasıl diş ile mide componentlerini gevşek bağlılıkla bir araya getirdiyse bizlerde yazılımları aynı modelde geliştirmeye özen göstermeliyiz.
  • Bu bağımlılıklardan kaynaklı olarak ufak bir noktadaki değişiklik başka alanlarda yeni değişikliklere sebep olabilmektedir.
  • Versiyon yönetimi zorlaşır.

Görüldüğü üzere monolithic mimarinin götürüsü getirisinden fazla olmakla birlikte artık yeni nesil bir yaklaşıma yerini bırakma noktasına gelmiş bulunmaktadır. O halde gelin çağın yaklaşımı olan microservice mimarisi üzerine konuşalım.

Microservice Mimarisi

Monolithic ve Microservice Mimariler Nelerdir?
Microservice mimarilerine odaklanabilmek için öncelikle monolithic yaklaşımın temel bir prensibi çiğnediğinin farkında olunması gerekmektedir. Bu prensip sürdürülebilirliktir ilkesidir. Sürdürülebilirlik; bir yazılımın, üzerinde yapılan tüm değişiklik yahut onarma faaliyetleri esnasında bile verdiği hizmetin bütününde bir aksaklık olmaması ve sistemin kesintiye uğramaksızın her an çalışabilir vaziyette olması demektir.

Microservice mimari, birbirinden bağımsız olarak çalışan ve birbirleriyle haberleşerek bir bütün olarak hareket eden servis(ler) yapılanmasıdır. Her servisin bir diğerinden bağımsız olarak iş mantığını yürütmesi ve bir başka servis ile ilgilenmemesi, bir onarım yahut restorasyon durumunda uygulamanın bütününü etkilemeyeceğinden dolayı sürdürülebilirlik ilkesi desteklenmiş olacak ve böylece bodoslama olarak tabir edeceğimiz monolithic yaklaşımındaki karmaşıklığı ortadan kaldırmış ve yönetimi daha da kolaylaştırmış olacaktır.

Burada esas olan, her bir servisin bir diğerinden bağımsız olmasının geliştirme ve düzenleme operasyonlarında getirisidir. Örneğin; Bir e-ticaret uygulamasında ürün işlemlerinin, sepetin ve ödeme sisteminin ayrı servisler tarafından gerçekleştirildiğini düşünürsek, süreçte ödeme sistemindeki oluşan herhangi bir aksaklık yahut restorasyon sistemin bütününü değil sadece o servisi etkileyeceğinden dolayı haliyle sadece o servisle ilgilenilmesi yeterli olacaktır. Bu durumda sistem bütünsel olarak işlevselliğe devam edecek lakin kesintiye sadece ilgili servis uğramış olacaktır. Haliyle bizler sistemin kendisinden ziyade local olarak sadece tek bir servisi ile ilgilenerek gerekli onarımı sağlayabilir, hızlıca testlere tabii tutabilir ve monolithic yapılanmalarda olduğu gibi uygulamayı topyekün derleme ve yayınlama ihtiyacını duymaksızın kısa zamanda yeni sürümle hizmete devam edebiliriz.

Microservice mimarisi, uygulamayı bir bütün olarak geliştirmek yerine, küçük parçalar halinde geliştirilmesini amaçlayan bir felsefedir.

Microservice mimari yaklaşımı uygulamayı dil ve platformdan bağımsız bir şekilde farklı veri depolama birimleri ve teknolojileri kullanılabilecek şekilde geliştirmemize imkan sağlayacak esneklik sunmaktadır. Ayrıca her bir hizmetin küçük ve bağımsız servisler olarak tasarlanması aynı zamanda denetim ve uyum süreçlerini basit prensiplere dayandıran Agile disiplinininde uygulanmasını kolaylaştırmakta ve bu disiplin çerçevesinde geliştirilen uygulama küçük ve farklı alanlarda sorumluluklarını paylaşan ekiplerce inşa edilebilmektedir.

Monolithic uygulamalar yapısı itibariyle dikey genişletilmeye uygundur. Dolayısıyla bu durum donanımsal sınırlılıklar getirmektedir. Lakin microservice yapılanması ihtiyaca dönük dikey ve yatay genişletilebilmekte ve böylece daha net ölçeklendirilebilmektedir. Hatta her bir service ayrı ayrı ölçeklendirilebileceği için yaygın olarak bulut(cloud) ve sanallaştırma teknolojileri kullanılmaktadır.

Görüldüğü üzere microservice yapılanması birçok olumlu yönden hayatımıza katkıda bulunmaktadır. Tabi ki de bu katkıların yanında dezavantajları da mevcuttur. Gelin bu avantaj ve dezavantaj açısından microservice yapılanmasını bir tabloda mukayese ederek irdeleyelim.

Avantajları Dezavantajları
  • Uygulama boyutundan bağımsız olmak üzere yeni bir özelliğin eklenmesi yahut mevcutiyetin bakımı sadece ilgili servislerle ilgilendirme gerektireceğinden dolayı oldukça kolaydır.
  • Ekip çalışmasına yatkındır. Özellikle ekibe yeni katılım gösteren arkadaşların devasa bir proje ve kod içerisinde kaybolmasının önüne geçmekte, sadece ilgileneceği servisin kaynağını çözümlemesi gerekmektedir.
  • Yapılan işlemler neticesinde servislerin birbirlerinden bağımsız olması tek başına scale edilebilmesini sağlamaktadır.
  • Versiyon yönetimi oldukça kolaydır.
  • Her bir service ihtiyaca binaen farklı dil ve platformda yazılabilmektedir.
  • Birden fazla service ve birden fazla veritabanı söz konusu olacağı için transaction yönetimi zorlaşacaktır.
  • Servislerin yönetilebilirliği ve monitoringi zorlaşacaktır.
  • Birbirine bağlı olarak tasarlanan monolithic mimarinin sistemin gelişmesi ve büyümesine karşı gösterdiği dirence karşı yeni nesil yaklaşım olan microservice ile gevşek bağlılık(loosely coupled) esas alınmakta ve uygulamanın gelişime karşı olan direncinin böylece kırılmasına odaklanılmaktadır. Lakin! bu durum her yeni başlayan projenin microservice temelli atılması anlamına da gelmesi pekte doğru olmayacaktır. Genel olarak bir proje temellendirilmesinin monolithic olarak tasarlanması ve projenin ebatı doğrultusunda ihtiyaca binaen microservice yapılanmasına geçiş tavsiye edilmektedir.

    İlgilenenlerin faydalanması dileğiyle…
    Sonraki yazılarımda görüşmek üzere…
    İyi çalışmalar…

    Bunlar da hoşunuza gidebilir...

    1 Cevap

    1. 28 Haziran 2020

      […] içeriğimizde microservice mimarisiyle tasarlanan uygulamalarda clientların parçalı servislere doğrudan erişerek […]

    Bir cevap yazın

    E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

    *