Mikroservis Mimarisi Nedir?

fatimenurcelik
3 min readDec 10, 2022

--

Merhaba arkadaşlar bugün mikroservislerden bahsedeceğim.

Şuana kadar monolit yapıda uygulamalar geliştirdik ama artık daha büyük projeler yapmak istiyorsak yani çok yoğun transaction alan projeler geliştiriyorsak mikroservis mimarilerini kullanmak bizim için daha faydalı olacaktır.

Hemen kısa bir şekilde monolit yapının özetini geçmek istiyorum.

Monolitik bir uygulama, birden fazla modül içeren tek bir kod tabanına sahiptir. Modüller, fonksiyonel veya teknik özelliklerine göre ayrılmıştır. Tüm uygulamayı build eden tek bir derleme sistemine sahiptir. Ayrıca tek bir çalıştırılabilir veya deploy edilebilir dosyaya sahiptir ve veritabanı olarak da tek bir veri tabanına sahiptir. Yani bu durumda sistemle ilgili bir değişiklik güncelleme ya da çökme gibi bir durum olduğunda tüm proje bundan etkilenecektir. Bu sebeplerden dolayı mikroservisler kullanılmaktadırlar.

Peki nedir bu mikroservisler ?

Mikroservisler kelimesi düşünüldüğü zaman mikro yani küçük servisler anlamı çıkarılabilmektedir. Konumuz da aslında bu temelden ilerlemektedir. Birden fazla servisin bir arada bir bütün olusturup ve birbirinden bağımsız yapılandırıldığı bir modeldir. Bu mimaride her biri farklı bir işten sorumlu bağımsız servisler bulunmaktadır. Servisler arasındaki bağımlılıklar, loose-coupled ilkesine uygun olarak en aza indirgenir. Microservice yaklaşımı ölçeklenebilirlik, esneklik, çeviklik gibi önemli avantajlar barındırır.

Çoklu, işbirliği yapan mikro servislerden oluşan bir sistemle, her birinin içinde farklı teknolojiler kullanmaya karar verebiliriz. Bu, her bir iş için doğru aracı seçmemize olanak tanır.

Monolitik bir uygulamada belki bir satırlık değişikliğin deployu ve release işlemi için tüm uygulamanın deploymenta ihtiyacı vardır. Mikroservis mimarisi ile , yaptığımız her değişiklik kendi işi için özelleştirilmiş servislerin içerisinde olacağından , bu servisin deployu çok daha kolay ve sistemin geri kalanından bağımsız olacaktır. Bu da bizim için deployment sürecini hızlandıracaktır. Eğer bir problem meydana gelirse problemin meydana geldiği bağımsız serviste problem kolayca çözülebilecek ve hızlı bir şekilde rollback yapılma imkanı doğar.

Bu görsel ilk başta biraz karmaşık görünebilir. Bir site düşünelim bu sitenin içinde evler var ve sitenin güvenliği var. Bu örnekteki güvenliği gateway servisine benzetebiliriz. Yani güvenlikle ilgilecek ve yük dengeleme (load balancing) yapacak, gelenleri ilgili dairelere yönlendirecek.Eureka discovery server de diğer servislerin birbirleriyle sağlıklı iletişim kurmasının kontrolünü sağlar.Ayrıca eureka discovery serveri kayıt defteri olarak düşünebiliriz. Config server ise bizim property ya da yaml dosyalarımızı başka bir yerden(dosyadan/githubdan) çekip projenin ilgili servislerinde kullanılabilir hale gelmesi için ilgili ayarlamaları yapar. Servislerden farklı olarak Message Broker dikkat çekmektedir. Message broker ise servisler arasında asenkron olarak iletişim kurmamızı sağlayan bir araçtır.

Servisler arasındaki haberleşmeyi iki farklı yöntem altında inceleyebiliriz. Bunlar Senkron ve Asenkron iletişimlerdir.

Senkron İletişim: Http protokolü senkron çalışan bir protokoldür. Client bir istek yapar ve sunucudan yanıt dönmesini bekler. Client tarafında servis çağrısını yapan kodun senkron veya asenkron yazılması Http’nin senkron bir protokol olduğu gerçeğini değiştirmez.

Senkron iletişimde bir microservice işlemlerini yaparken farklı bir servisten bir bilgi ihtiyacı olduğunda o servise istek (request) atar ve cevabını (response) bekler. Gelen cevap sonucunda ise işlemlerine devam eder.

Asenkron İletişim: Asenkron işlemlerde istekte bulunan servis, hizmet aldığı servisten yanıt beklemez. Böylece istekte bulunan servis hizmet aldığı serviste bağımlı hale gelmez ve bu da microservice mimarisinde tam olarak istediğimiz bir durumdur (Loosely coupled servisler). Asenkron istek başarısız olduğunda bile servis sorunsuzca çalışmaya devam eder. Başarısız olma durumu ise farklı tekniklerle çözümlenir ama bu durum herhangi bir işlemin devam etmesine engel olmaz. Yani istekte bulunan servis threadleri bloke olmamıştır.

Evet mikroservise giriş yapmış bulunmaktayız. Bir sonraki yazımda örnek bir proje yapacağız. Görüşmek üzere :)

--

--