Microservice Nedir?

Microservice mimari, basit tanımıyla, tek büyük bir uygulama (monolithic) geliştirmek yerine küçük parçalar halinde uygulamalar geliştirme üzerine kurulu bir yazılım geliştirme yaklaşımıdır diyebiliriz. Bu küçük servisler farklı programlama dilleriyle geliştirilebildiği gibi farklı veri depolama teknolojileri kullanılarak farklı platformlarda dağıtık bir yapıyla da çalışabilme olanağı sağlamaktadır. Bu noktada farklı dillerde geliştirilip RESTFUL ya da http üzerinden JSON ya da XML ortak diliyle konuşabilmektedirler.

Yazılım dünyasının yakından tanıdığı Martin Fowler’ın ortaya attığı bu yaklaşım aslında mevcut SOA (Service Oriented Architecture) mimarisinin devamı gibi görünse de monolithic uygulamaların yetersizliğinden kaynaklanan yazılım geliştirme süreçlerinin bir evrimi gibi de düşünülebilir. Nedir monolithic uygulamalar? Günümüzde yaygın olarak uygulama geliştirme süreçlerinde kullandığımız ve Front-end için teknoloji çeşitliliği bulunsa da back-end için tek bir dil ile geliştirilen, bir host üzerinden bütün API’ların sunulduğu yekpare bir uygulama biçiminde düşünülebilir.

Peki microservice mimariye evrimi sağlayan monolithic mimarilerin eksiklikleri nelerdir?

En temel problemlerden biri mevcutta çalışan bir uygulama üzerinde herhangi bir güncelleme ya da bug fix yapılması gerektiğinde tüm uygulama yeniden deploy edilmeli ve bu deployment işlemi esnasında uygulamanın tüm modüllerine erişim engellenmektedir. Gerçek dünyada aktif kullanılan uygulamaların bu tür bir kesintiye uğraması ciddi maliyetler doğurmaktadır. Bu kesinti maliyetlerinin yanında entegrasyon bağımlılıkları diğer tüm süreçlerin de test edilmesini gerektirdiğinden ekstra test maliyetleri de doğurmaktadır.

Buna karşın microservisler ile dağıtık yapıda geliştirilen uygulamalar için sadece aksayan bacaklar güncellenerek tüm sistemin kesintiye uğramasının önüne geçilebilmekte. Böylelikle sadece güncellenen servislerin testi ile hızlıca gerçek dünyaya erişime açılabilmekte, uygulama geliştirme süreçlerinin olmazsa olması sürdürülebilirlik (maintainability) daha da kolaylaşmaktadır. Buna güncel dünyadan verilebilecek en iyi örnek Amazon’un her 11.7 saniyede bir deployment yapıyor olması gösterilebilir.

Yazılım geliştirme süreçlerinde her ne kadar Agile kullanılarak ilerlenebilse de kurumsal dünyada monolithic uygulamalarda süreç ilerledikçe entegrasyon ya da kaynak bağımlılıkları, Scrum süreçlerine evrilmeye neden olmaktadır. Microservice mimaride uygulamalar ne kadar küçük parçalara ayrıştırılabilirse geliştiricilerin de Agile disipliniyle daha küçük takımlar halinde daha bağımsız çalışabilmesi sağlanabilmektedir. Örneğin bazı problemlerin farklı teknolojilerle daha iyi sonuçlar üretiyor olmasının önünde bir engel olan monolithic uygulamalardaki tek dil bağımlılığı yerine her operasyona uygun performanslı diller ile geliştirmeler yapılarak toplam performansın arttırılabildiği gibi geliştirici firmalara istihdam anlamında farklı diller ile geliştirme yapabilecek çalışan çeşitliliği de sağlanabilmektedir.

Monolithic uygulamalarda yatay genişleme load balancer teknolojileriyle sağlanabilse de en nihayetinde donanımsal bağımlılık sınırları vardır. Tüm uygulama bir host üzerinden sunulduğunda sunucu, network ya da donanım üzerinde yaşanabilecek problemler tüm uygulama adımlarına sirayet etmekte, aksayan bir bacak tüm uygulamayı atıl hale getirebilmektedir. Microservice mimari ile geliştirilen dağıtık yapıdaki uygulamalarsa kaynak erişimlerinden, coğrafi erişim farklılıklarına kadar ölçeklenebilirlik (scalability) imkanı sağlayabilmektedir. Bu noktada yaygın olarak sanallaştırma ve bulut teknolojileri kullanılmaktadır.

Microservice mimari üzerine bilinen kapsamlı çalışmalar dünyaca ünlü yayın kuruluşu Netflix tarafından yapılmış olup, yayın ağını oluşturan temeller microservice üzerine kurulmuştur. Netflix Java temelli bir framework olan Spring Framework için Spring Cloud Netflix, service discovery aracı Eureka gibi araçlar geliştirmiş ve kullanıma sunmuştur.

Bunun yanı sıra Uber, Amazon, Ebay, Sound Cloud gibi içerik sunumu yapan global firmalar da Microservice mimari dönüşümlerine başarıyla ayak uydurmuştur.

Özetle microservice yeni bir teknoloji olmayıp, zaman ve bilgiye erişimin küreselleşen dünyadaki değeri düşünüldüğünde geliştirilen uygulamaların etkin biçimde talepleri karşılayabilmesi için evrimleşmiş bir yazılım geliştirme yaklaşımıdır.

Serdar Yusuf GARGILI

BBS Uygulama Geliştirme Uzmanı