Merhaba, biz bir ekibiz ve adımız PROJX.
Bize merhaba demek için;

[email protected] . +902129823940
 

Mikro Hizmetler ve Backend Geliştirme

14 nisan 2023

Mikro Hizmetler ve Backend Geliştirme
Bu içerikte giriş seviyesinden uzman seviyesine kadar mikro hizmetler hakkında konseptlere yer verilecektir. Günümüzde herhangi bir dilde geliştirilebilen Mikro hizmetlerde en fazla kullanılan dillerin başında Java, .Net ve node.js gibi isimler gelmekte.
Mülakatlarda mikro hizmetler için genelde ilk sorulan soru mikro hizmetlerin sağlandığı faydalar nelerdir, ne zaman kullanılmalı ve tasarımında hangi yöntemlere dikkat etmek üzerinedir.

micro services

Mikro Hizmetlerde Tasarım Prensipleri

  • Modülerlik : Hizmetler bağımsız olmalıdır, amaçları kesin çizgilere sahip olmalıdır.
  • Ölçeklenebilirlik : Hizmetlerin dinamik yapısının artacak yükü kaldırabilmesi için bağımsız olarak ölçeklenebilir niteliği olması gerekir.
  • Yetki Dağıtımı : Sistem tek bir alandan değil yönetilmemeli, ucu açık bağlantılı hizmetlere izin verecek şekilde merkezi olmayan bir yönetim biçimine sahip olmalıdır.
  • Yüksek Elverişli : Hizmetleri yüksek düzeyde elverişli olacak şekilde tasarlamak sistem güvenilirliğini sağlamanın en önemli noktasıdır.
  • Esneklik : Hizmetler bütününde ve detaylarında meydana gelecek hataların kolay bir şekilde ele alınabilir tasarlanması gerekir.
  • Veri Yönetimi : Hizmetlerin her biri için veri yönetimi tıpkı yetki dağıtımı esasındaki gibi özerk olmalı ve ortak bir veri tabanı- tablosu paylaşılmamalıdır.
  • Tabiiyetsizlik : Hizmetlerde aidiyet olmamalı, kolay ölçeklendirme ve önbelleğe alma için durum bilgisi sabit tutulmamalıdır.
  • Bağımsız Dağıtım : Hizmetler, diğer hizmetlere ihtiyaç duymadan bağımsız biçimde dağıtılabilir olmalıdır.
  • Gözlemlenebilirlik : Hizmetler yapısı içerisinde yapının işleyiş ve tepkilerinin görünürlüğünü sağlamak için yerleşik izleme ve günlük tutma gibi eylemleri yapabilir niteliğe sahip olması gerekir.
  • Otomasyon : Dağıtım, test ve ölçeklendirme mümkün olduğunca otomatize olmalıdır.

Spring Boot Uygulaması + Spring Cloud kullanan Mikro Hizmetler

Mikro hizmetler çerçevesinde Spring Boot Uygulaması + Spring Cloud gibi eklentiler oldukça fayda ve rakiplere göre büyük avantajlar sağlamaktadır. Bunları birkaç başlık altında incelemek mümkündür.

Gelişmiş Ölçeklenebilirlik
Mikro hizmet mimarisinde eklentilerin de katkısı ile hizmetler bağımsız olarak geliştirilmesine, dağıtılmasına ve ölçeklenmesine izin vererek daha iyi ölçeklenebilirlik sağlar.

Pazara Daha Hızlı Erişim
Eklentiler ile beraber bütün biçimde bulunan bir uygulamayı daha küçük, bağımsız hizmetlere ayrılarak, geliştirme ekipleri paralel çalışabilir ve daha hızlı geliştirilebilir, sunulabilir.

Esneklik
Eklentilerin sisteme dahili ile beraber mikro hizmetler daha da bağımsız ve esnek bir yapıya sahip olarak başarısızlık, geliştirme, hata çözümü gibi alanlarda daha mikro çalışmaktadır. Bu sayede bir işlem tüm bütünü değil sadece ilgili yapıyı meşgul ederek sistemlerin aksamasına sebep olmamaktadır.

Kaynak Kullanımı
Yekpare hizmetlerde tek bir kaynak en yüksek seviyede tüketilirken mikro hizmetlerin eklentiler ile desteklenmesi sonucunda daha tasarruflu ve alternatifleri bulabilir bir kullanım sağlanmaktadır.

Mikro Hizmetlerde Veritabanı Tasarımı

micro services

Veritabanı tasarımı her yazılım mimarisi ve şart için farklı biçimde seyredebilmektedir. Mikro hizmetler için kullanılmakta olan Veritabanı Tasarım modelleri aşağıdaki şekildedir.

  • Hizmet Başına Veritabanı->Hizmetlerin özerklik sağlayan kendi veritabanı vardır.
  • Paylaşılan Veritabanı -> Birden fazla hizmetin ve sistemin verileri depoladığı veritabanı mevcuttur.
  • Olay Kaynağı Belirleme-> Sistemdeki işlemlerin izleri ve raporlarını saklayan veritabanı vardır.
  • Komut Sorgusu Sorumluluk Ayırma (CQRS) -> Sorgular ve komutlar ayrılarak yüksek performanslı veritabanı vardır.
  • SAGA -> Uzun sürecek işlemleri farklı yapılarda işleyebilir veritabanı modelidir.
  • Materyalleştirilmiş Görünüm-> Sık kullanılan verilere hızlı erişim için önceden hesaplı görünüm sağlayan modeller.
  • API Bileşimi -> Birden çok hizmet ve paketten alınan verilerin birleşik olarak görünmesini sağlayan model.
  • Okuma Replikaları: Okuma isteklerini ana veritabanında tutmamak için kullanılan modeldir, performansı artırır.

Mikro Hizmette Koreografi

micro services

Mikro hizmetler içerisinde koreografi konsepti sık sık dile getirilir. Bu aslında algoritma tasarımlarında dikkat edilen merkeziyetçiliğin önüne geçen bir biçimdir. Hizmetlerin birbirileri arasındaki haberleşmesinde tek bir merkeze bağımlı olmaması için ortaya konulan konsepttir. Tüm hizmetler kendi içerisindeki işleyişten ve sisteme faydalarından ayrı ayrı tek başlarına sorumlu hale gelirler.
Koreografi konseptinde ele alınan hizmetlerde davranışların gerçekleşme biçimi için hizmetler arasında mesajlaşmalar gerçekleşir. Bu noktada diğer hizmetten gelen mesaja göre mevcut hizmet olaya daha özerk bir yaklaşım sergileyebilir.
Sistem içerisindeki avantajlı durum başlı başına koreografi denilebilir. Bu sayede geliştirme, bakım ve stratejilerde dinamikleşen süreç bağımlılığı ortadan kaldırır. Tüm hizmetlerin bloke olması yerine diğer hizmetin süreci tamamlanana kadar sadece performans düşüşü yaşanır ve sistemin işleyişi devamlılığını kaybetmez. Bu durum ayrıca güvenlik açıklarının olduğu senaryolarda sadece tek bir yapı üzerinden açık vermeyi ve ona müdahale edip sorunun da küçük ölçekte kalmasını sağlar.