Mikroservis nedir?

Mikroservis sadece bir işi yapan, belirli fonksiyonaliteyi gerçekleştiren ortalama 1000 satırdan az, küçük kod parçacıklarıdır. Geliştirme süreçleri, bağımlılıkları, boyutları olabildiğince küçük olan atomik servislerdir.

Mikroservisler monolitik mimarinin yetersiz kaldığı ve sürekli artan ihtiyaçları karşılayamadığı için ortaya çıkmıştır. Günümüzde birçok kurumsal projeler genellikle Service Oriented Architecture (SOA) ile geliştirilmiştir. Geleneksel monolitik mimaride geliştirilen tüm komponentler bir çatı altında toplanmıştır. SOA mimarisinin en güçlü yanları yönetilebilirlik (manageability), bakım (maintenance), birlikte çalışabilirlik (interoperability) gibi kavramlardır. SOA mimarisinde sürekli artan entegrasyon ihtiyacına cevap verememektedir. Bu bitmeyen ihtiyaçlar doğrultusunda ise Monolithic architecture ile tasarlanmış olan SOA’lar, gitgide istemsizce büyümektedirler. Bu büyümeler ile birlikte SOA mimarisinin dezavantajları aşağıdaki gibidir.

  • Tüm Komponentleri geliştirirken aynı framework ve aynı programlama dilini kullanmamız gerekmektedir.
  • Bir komponent üzerinde olan değişiklik için, tüm monolith yapının tekrar deploy edilmesi ve restart edilmesi durumunda kalınması
  • Versiyon yönetiminin gitgide zorlaşması
  • Birbirlerine olan bağımlılıklarından dolayı, bir komponent için yapılan değişimden diğer komponent’in etkilenebilmesi
  • Continuous Delivery’nin uygulanmasının zorlaşması

Bu listeye birçok maddeyi ekleyebilirsiniz. Monolitik mimaride herhangi bir komponent üzerinde yapılan değişiklik diğer komponentleri de etkileyebilir. Bunun yerine komponentleri farklı dil ve farklı frameworklerde geliştirebileceğimiz ve ortak bir projede kullanabileceğimiz bir mimari çözümü olan mikroservis mimarisini geliştirilmiştir. Monolitik yapıda tüm komponentler bir arada olurken mikroservis yapısında komponentler bir arada olmak zorunda değildir.

Mikroservis yapısı sürekli ve plansız bir şekilde büyüyen monolitik yapıdaki servislerin, beraberinde getirdiği karmaşıklığı ve yönetim zorluklarını çözmeye odaklanmaktadır. Kesinlikle SOA’ya alternatif bir model değildir. Mikroservis mimarisinin avantajları:

  • Servisler farklı dillerde ve farklı framework’lerde geliştirilebilir.
  • Birbirlerinden bağımsız olarak her bir servis değişebilir, kolay test ve build yapılabilir.
  • Continuous delivery’e olanak sağlar ve hızlı deployment’lar gerçekleştirilebilinir.
  • Her bir servisi birbirinden bağımsız olarak scale edebilme olanağı sağlar.
  • Her bir servis birbirinden bağımsız olacağı için, code base’i sade ve maintenance’ı kolay olacaktır
  • Versiyonlama kolay bir şekilde yapılabilecektir.
  • Mikroservisler statelesstir. Herhangi bir nesnenin state bilgisini tutmaz.
  • Mimarinin en baştan kurulmasına gerek yoktur, ürün geliştikçe mimaride gelişir.
  • Ekibe sonradan katılanlar projeye daha kolay adapte olur.
  • Mikroservislerin sırasını ve hiyerarşisini değiştirmeye imkan verir.
  • Uygulamanın daha esnek, daha reusabe ve daha scalable olmasına imkan verir.

Mikroservislerinde kendilerine göre dezavantajları vardır. Bunlar;

  • Birbirlerinden bağımsızlaşan farklı servisler aynı objeleri kullanacaklarından dolayı kaçınılmaz bir kod tekrarı meydana gelecektir.
  • Servisler farklı platform ve ortamlarda çalışabileceklerinden dolayı yönetim ve monitoring maliyeti ortaya çıkacaktır.
  • Birden çok database ve transaction’ların yönetimi zor olabilir.

Fakat bu maddelerin zaten bir çoğu çözülmüş durumda ve otomasyon araçları ile yönetilebilmektedir. Ek olarak ihtiyaçlar doğrultusunda mikroservis yaklaşımının getirileri göz önüne alındığında ise bu dezavantajlar görmezden gelinebilir. Yönetim kısmında ise DevOps kavramı ile kolay bir şekilde ele alınabilmekte. Transaction yönetimi işlemlerinede DTC(Distrubuted Transantion Manager) ile çözüm bulunabilmekte.

Örnek bir mikroservis yapısı aşağıdaki gibi olabilir.

Servis sayısı bu kadar fazla olunca birden fazla sanal makineye kurulumu manuel olarak yapılması imkansız. Bunun için “Infrastructure As a Code” IAC kavramı geliştirilmiş. Infrastuctrure’ları kod ile ayağa kaldırıp uygulamaların bu infrastructure’lar üzerine hızlıca çalışmasını sağlar. Mikroservisin en güzel özelliklerinden birisi ise herhangi T anında belirlenen X sunucularına, Y,Z Feature set değişikliklerini deploy edebilme yeteneğidir.

Mikroservis mimarisini kullanan bir kaç büyük yazılım şirketi: Spotify, Facebook, Instagram, Netflix.

Mikroservisler hakkında daha detaylı bir bilgi almak için tıklayınız.

Kaynakça

Link-1 medium.com için TIKLAYINIZ.

Link-2 gokhan-gokalp.com için TIKLAYINIZ.

İyi çalışmalar. 🙂