Mikroservis Mimarisi Nedir ve Nasıl Geliştirilmiştir?

 

Gereken ihtiyaçlara göre belirlenen operasyonel ve teknik gereksinimlerin giderilmesi için, yönetim, performans ve güvenlik gibi kalite alanlarında yapısal çözüm tasarlayan kişiye yazılım mimari denir. Yazılım projesinde kodlamaya başlamadan önce, bir tasarım hazırlar. Bu tasarımda ihtiyaca yönelik veri tabanı analizi, kodlama dili, deploy(yayınlama) ve yöntemleri gibi özelliklerden uygulamanın yazılım mimarisini oluşturmaktadırlar.

Bu mimariler günümüzde teknolojinin gelişmesiyle ihtiyaca yönelik olarak çeşitliliğini arttırmaktadır. Yazılım projelerinde, mimari tasarımının temeli monolitik mimari ile başlanmıştır. Monolitik kelimesi yazılımda modülleri bağımsız olarak çalıştırılamayan tek parça kodlanan yazılım yöntemidir. Uygulamanın tamamının bir bütün olarak geliştirilen mimariye de monolitik mimari denir.  Burada tüm fonksiyonlar tek bir paketten sağlanmaktadır. Monolitik mimari, uygulamanın dağıtımı için kolay bir yapı sağlar. Tek bir paketle tüm sistem devreye alınır, yaygınlaştırması yapılır. 

Uygulamayı ölçeklendirmek için de yani aynı uygulamanın çalışacağı altyapıyı ayarlamak için de uygulamanın çalıştığı sunucuları bir loadbalancer (yük dengeleyici) arkasında ekleyip çıkarmak yeterlidir. Ancak genel olarak uygulamanın tek parça olması hem büyük hem de karmaşık olmasına neden olur. Birbirine sıkı bir şekilde bağlı bileşenlerden birinin çökmesi tüm sistemin çalışmamasını tetikler ve zamanla geliştirilmesini bakımını zorlaştırır. Yani monolitik sistem de programın bir yerinde hata mevcut olursa verilen her hizmet çalışmayı durdurur. Bu sorunlara çözüm olmak için zaman içerisinde katmanlı mimari, servis odaklı mimari ve mikroservis mimarisi geliştirilmiştir.

Mikroservisler temelde bir yazılım uygulamasında belirli özellik ya da fonksiyonu sağlayan, tek bir amaca hizmet eden, birbirinden bağımsız yazılım servislerdir. Teknolojiler ve platformlar birbirinden bağımsızdır. Her bir servisin kendine ait iş kuralları ve domaini vardır. Servisler birbirleriyle olan iletişimi farklı mimariyle kurarlar. Bu sayede servislerin bağımsız olarak bakımı yapılabilir, izlenebilir ve dağıtılabilir yapıya sahip olabilmektedirler.

Mikroservis mimarisi, SOA yani “Services Odaklı Mimari” üzerine kurulmuş bir mimaridir. SOA, uygulamaların birbirleriyle tek bir makine veya ağ üzerinden birden çok makineye dağıtıldığında, servislerin dağıtılmış sistemde iletişim kurmasını sağlayabilen bir mimaridir. Her iki mimaride client-server yani istemci-sunucu mimarisinden gelmektedir. Mikroservis mimarisi, SOA’nın kendine özgü olacak şekilde bir uzantısı olarak görülebilir. Yalnız mikroservis mimarisi servis odaklı mimarinin tasarım ilkeleri birebir aynı değildir. SOA ile arasında farklılıklar bulunmaktadır. SOA kurumsal seviyede bir mimari iken Mikroservis Mimarisi uygulama seviyesinde bir mimaridir.

Mikroservis mimarisinin en önemli özelliklerinden biri veri yapılarını paylaşmamasıdır. Her mikroservis kendi veri depolama alanına sahiptir (veri tabanı şeması veya tablo gibi.) Yani her biri kendi veri modelinden ve verilerinden sorumludur. Diğer servisler sahibi olmadığı depolama alanına erişemezler. Mikroservisler API adı verilen arayüzler aracılığıyla basit protokolleri kullanarak iletişim kurabilirler.

Genel olarak API GATEWAY adı verilen sisteme tek giriş noktası oluşturulur. Sisteme istek yapan kullanıcılar doğrudan mikroservislere istek yapmak yerine bunun üzerinden istek yapar. Burada yönlendirme, yetkilendirme gibi işlemler yapılır. Bu işlem için arka planda birden fazla mikroservise istek yapılabilir. Sonunda kullanıcıya tek bir sonuç dönülür.

Her bir mikroservis diğer hizmetler ile (loosely coupled) oldukça az bağımlılığa sahip bir şekilde çalışmaktadır. Bu hizmetler kendi kendine yeten ve tek bir işlevsellik (veya bir grup ortak işlevsellik) sunmaktadır.

Mikroservis Mimarisinin Avantajları Nelerdir?

  • Bu mimari servislerde sık güncelleme ihtiyacı olan uygulamaların modern ihtiyaçlarını karşılamak için alternatif bir mimari olarak geliştirilmiştir. Mikroservis mimarisinin temel amacı uygulamayı küçük bağımsız servislere bölmektir.
  • Çok sık ölçeklendirme gereken bir uygulamada bu mimari önemli faydalar sunar (scalability-ölçeklenebilirlik prensibi.) Onun için sık ölçeklendirme ihtiyacı varsa bu mimari kullanılabilir. Örneğin bir servise yapılan istek diğer servislere nazaran çok arttıysa sadece bu servisin sayısını artırabiliriz. Monolitik uygulamada olduğu gibi tüm sistemi artırmamıza gerek kalmaz.
  • Büyük bir sistem ve burada çalışması gereken çok sayıda insan kaynağı varsa, böl parçala yönet mantığıyla iş akışları ayrılarak burada mikroservis mimarisi uygulanabilir.
  • Bir servisin durması, hata vermeye başlaması (availability-kullanılabilirlik oranının düşmesi) sistemin diğer fonksiyonlarını etkilememesi için kullanılabilir. Bu prensip isolation of failure (hata izolasyonu) olarak geçer.
  • Bazı hizmetlerin, fonksiyonların sürekli güncellenmesi gerekiyorsa bu mimari ile tüm sistemin elden geçirilmesi gerekmez. Çünkü servisler birbirinden tamamen bağımsızdır. Bu da iş birimlerinin pazara çıkma hızını artırmasına yardımcı olur.
  • Ayrıca günümüzün iş gereksinimlerine ve çözümlerine ayak uydurmak için günümüzün programlama dillerinde veya teknoloji ürünleriyle eski uygulamaları yeniden yazmanız gerektiğinde de kullanabilirsiniz.

Kural Tabanlı IoT Projesinde Mikroservis Mimarisinin Kullanımı Nedir?

Projenin servislerinin mikroservis olarak olmasının temel sebebi, sektörde görev yapmakta olan çalışanların karmaşık kod yapısını anlayamayıp sürekli desteğe ihtiyaç duymalarından kaynaklanan zorlukların çözümüne yönelik yenilikçi bir yöntem geliştirme ihtiyacı oluşturmaktadır.  Üretim ortamında, makinelerin sürekli ayarlamalar ile çalışmasının devam etmesi ve fabrikalardaki zorlu makinelerin iş kazası risklerini arttırması önemli bir problemdir. Kullanıcı dostu bir kural tabanı oluşturmak, oluşturulan bu kuralların makinelerle iletişiminin sağlanması ve makinelerin sürekli işlem verilerini aktarması için bir yapı oluşturulması projenin teknolojik değeridir. Bu işlemin insanlar tarafından basit bir şekilde yönetilmesi içinde Kural Tabanlı İş Yönetim Sistemi’nden (Business Rules Management Systems - BRMSs) yararlanılmaktadır. Bu sistem kullanıcının her türlü kuralı oluşturmasına imkân vermektedir. Oluşturulacak servis yapısıyla birlikte bu kuralların bilgisayarlar tarafından anlaşılabilir hale gelmesi, makinelerle iletişim halinde olması ve kural doğrultusunda gereken programları çalıştırmasını sağlayacaktır. Bu doğrultuda incelendiğinde veri tabanı bulut (cloud) üzerinden haberleşme işlem doğruluğunun sağlanması ve veri büyüklüğü sebebiyle mikroservis mimarisi tercih edilmelidir.

Mikroservis mimarisinin projeye sağladığı avantajlar şu şekildedir:

  • RabbitMQ ve Azure Servis Bus olay tabanlı mesajlaşma protokolleri sayesinde servisler arası veri doğruluğunu sağlayabilmekteyiz ve verinin kesintisiz ulaştığından emin olabilmekteyiz.
  • Sistem aynı anda birden fazla işlem yapabileceği ve kural işleyebileceği için yavaşlama durumlarında sadece kural işleyen servislerin dağıtımın ölçeklenebilmesi tüm programı ölçeklendirmekten daha düşük maliyete sebep olacaktır.
  • Farklı veri tabanlarının kullanılması büyük verilerin işlenmesini kolaylaştırmaktadır.
  • Projeye özellik eklenmesine ve geliştirilmesine kolaylık sağlar.

 

Ceyda Tekin, İletişim Yazılım / Yazılım Uzmanı

Kaynakça

(https://www.ibm.com/cloud/blog/business-rules-management-systems-101)

(https://ieeexplore.ieee.org/abstract/document/7300793)

(https://ieeexplore.ieee.org/abstract/document/7868163?casa_token=QwtS5ajgeCcAAAAA:NgT0qBDssbCV4mUbxiE3bxp5fsF2NjbVZUih0lj862wwof4cGD7NK-L5-V39lkdnqE87a0uoBoA2)

(Butzin, B., Golatowski, F., & Timmermann, D. (2016, September). Microservices approach for the internet of things. In 2016 IEEE 21st International Conference on Emerging Technologies and Factory Automation (ETFA) (pp. 1-6). IEEE.)