Yazılımsal Araştırmalar

Microservices Nedir?

Bir yazılım en etkin nasıl geliştirilir?

Konunun asıl içeriğine geçmeden hemen önce, yazılım geliştirme süreçlerini hızlandırmak, maliyetleri düşürmek ve kaliteli ürün elde etmek gibi amaçlar doğrultusunda kullanılmakta olan yazılım metodolojilerinden kısaca bahsetmek istiyorum.

Yazılım metodolojileri; “Bir yazılım en etkin nasıl geliştirilir?” sorusuna cevap bulmak amacıyla uzun yıllar boyunca sorulmuş ve günümüzde de kullanılmakta olan etkin yöntemler geliştirilmiştir. Kullanımı ise şirketlerin izlediği politikalar doğrultusunda tercih edilerek yazılım projeleri geliştirilmektedir.

Arkasında yatan mantık ise bilgisayar bilimleri içerisinde çok fazla kullanılmakta olan “Böl ve Yönet(Divide and Conquer)” ile müşterinin istediği ürünün büyüklüğüne göre süreç belirli parçalara bölünür ve çalışanlara belirli görevler verilerek süreç işletilir. Şimdi bu küçük bilgiden sonra konumuza devam edelim.


Microservices’e Geri Dönelim

Özet olarak Microservices kavramı, ilk konuşulmaya başlandığı zaman ‘Servis Odaklı Mimari(SOA)’ için alternatif bir “mimari model” olarak yorumlandı. Ancak sonradan SOA’ya alternatif bir “model” ya da “yaklaşım” olmadığı anlaşıldı. Şuan da ise Microservices, SOA mimarisinin karmaşıklığını, pratikleştiren ve yönetimini kolaylaştıran bir mimari tasarım stili olarak yorumlanabiliyor. Sırayla detaylarına bakalım:


Service Oriented Architecture (Servis Odaklı Mimari)

Tanım: Servis odaklı mimari veya hizmet yönelimli mimari, bilgisayarda sistemlerin işlevselliklerini iş süreçleri etrafında gruplaştırarak sistem geliştirmesi ve bütünleştirilmesinde yol gösteren bir yazılım tasarımı felsefesidir.

Birbirinden farklı servislerin birleşip belirli yapılar oluşturarak uyumlu çalışmasını sağlayan bir yaklaşımdır. Yani servis içinde servistir. Farklı bir tanım vermek gerekirse birden fazla uygulamanın kendi içindeki modüllerinin/fonksiyonlarının başka uygulamalar tarafından kullanılabilecek şekilde tasarlandığı bir yaklaşımdır.

Normalde çok katmanlı uygulamalarda hep bir katmanın diğer bir katmanı çağırması gerekir. Bu yaklaşımda hiyerarşinin düzgün olması gerekmektedir.

SOA’nın sektörde iyi bir yer edinmesini sağlayan özellikleri şunlardır:

  • Artan kullanıcı memnuniyeti
  • Operasyonel verimlilik
  • Rakiplere karşı avantaj sağlama
  • Bilgi işlem maliyetlerindeki azalma
  • İş yaşam döngüsünün kısalması gibi avantajlarını sayabiliriz.


Dezavantajları Neler?

Tamam gayet güzel ilk başta karmaşık görünen işler yavaş yavaş toparlanmaya başladı. Fakat bunun dezavantajları olmadı mı?

Tabi ki de dezavantajları oldu. SOA ile birlikte ’Monolithic (Sistemin bir bütün olarak ele alınması)’lik yüzünden programın tüm bilişenleri, modüler yazılım programlarından farklı olarak merkezileşmiş bir yapıya sahip olmaya başladı. Yapılmak istenen değişiklikler tüm sistemi etkiliyordu. Teknolojiye bağlı hale geliniyor.”Scale” etmek başta kolay ama sonra çok daha zorlaşıyordu. Tüm bu nedenler ile birlikte IT’nin değişen iş süreçlerine kolay bir şekilde adapte olamaması da dezavantajlardır. İşte tam bu noktada devreye mikroservis mimari stili devreye girer.

Microservice mimari stili ile geliştirilen uygulamalar, pratikte bir birinden bağımsız bir kaç servisin beraberce kullanıldığı uygulamalar olarak karşımıza çıkıyor. Mobil, web ya da masa üstü, hatta konsol uygulamaları, bu sayede aynı servisleri kullanarak geliştiriliyor. Dolayısıyla, aynı iş mantığı farklı platformlara kolaylıkla sağlanıyor. Microservices’lerin en önemli noktası; bu servislerin kendi başlarına çalışan, tek bir sorumluluğu olan, bağımsız servisler olmalarıdır.

Mikroservisler iş mantıklarını ve kurallarını kendi içinde tutmalıdırlar. “Ne yapıldığı” servisler tarafında, “nasıl yapıldığı” ise servisleri kullanan uygulamalar tarafında olmalıdır. Bu sayede iş mantığı tek bir yerde olup, sadece orada gelişecektir.

İş kabiliyetlerine göre ayrıştırılan servisler, tek başlarına çalışabilen servisler olmalıdır. Dolayısıyla platform, sistem, dil ya da framework bağımlılıkları yoktur. Yani bir e-ticaret sitesindeki kategori yönetimini sağlayan servisler .NET ile yazılabilirken, ürün görsellerini sağlayan servis node.js ile geliştirilebilir. Ödeme servisleri Scala ile olurken, istatistiksel verileri sağlayan kısımlar R dili ile yazılabilir. .NET servisleri, Windows sunucularda olurken, node.js *Unix tabanlı bir sistemde bulunabilir. Bu sayede belli bir teknolojiye bağımlılık da ortadan kalkmış oluyor.

Giriş kısmında anlatılan örnekteki böl ve yönet mantığını burada daha iyi anlamış oluyoruz.


Microservices Kazandırdığı Bazı Ek Özellikler

  • Deploy etmek, değiştirmek kolay
  • Platform, dil, framework bağımsız
  • Scale edilebilir uygulamalar
  • Test edilebilir uygulamalar
  • Hızlı uygulama geliştirme

Tabi ki bununda dezavantajları da var. Microservice mimari stilinin en zor noktası, servislerin büyüklüğü yönetmek. Servisler adet olarak çok fazla büyür ise, sorumlulukları tek bir  servis altında toplanacak şekilde, bir servismiş gibi ele almakta fayda olacaktır. Servislerin içerikleri ve kabiliyetleri ise büyüklük konusunun bir başka noktası. Bu noktada çalışan veya çalışacak insanlar deneyimli olsa iyi olur. 🙂


Peki Monolithic Mimari Yaklaşımı Her Zaman Kötü Mü?

Tabi ki de hayır. Projede hangi mimari yaklaşımın kullanılacağı, projenin ihtiyaçlarına göre belirlenmelidir. Sırf son dönemde Mikroservis mimarisi popüler olduğu için projeyi ihtiyaçlarına göre değerlendirmeden mikroservis mimarisiyle geliştirmek hata olacaktır.

SOA’nın Önemli Standartları:

SOAP (simple object access protocol) – servis iletişimini destekleyen mesajdır. XML tabanlı uygulamalarda HTTP üzerinden bilgi alışverişini sağlayan protokoldür. Platform ve dil bağımsızdır.

WSDL (web services description language) – herhangi bir servisin arayüzünü tanımlayan (tanımlı işlemler/fonksiyonlar, giren çıkan mesajların formatları, ip ve port adresleri) xml tabanlı dildir.

UDDI (universal description, discovery and integration) – web servis hakkında bilgilerin depolandığı dizinlerdir. .Net platformu üzerine kurulmuştur. SOAP üzerinden iletişim kurar.

WS-BPEL – servislerin birleştirilmesindeki iş akışları için kullanılan bir standarttır.


Kaynaklar: https://microservices.io/patterns/monolithic.html , http://www.minepla.net/2015/05/microservices-mikroservislerin-karakteristik-ozellikleri/ , https://www.gokhan-gokalp.com/monolithic-ve-microservice-architecturea-genel-bir-bakis/

Yazar Hakkında

Furkan Alp Esen

Yorumlar

Yorum Ekle