Merhabalar,
Mikro servis mimarisini anlatmadan önce monolitik mimari ve Service Oriented Architecture(SOA) konularından bahsedeceğim.
Monolitik Mimari :
Diyelim ki Twitter gibi bir uygulamamız var ve iletileri görmek istiyoruz. Öncelikle login olmam gerekiyor ve sunucuya istek atıyorum. Bu sunucu üzerinde çalışan bir proje var ve veriyi alabilmek için veri tabanına gidiyor.

Projenin server yapısına göz atacak olursak :

Presentation Layer : son kullanıcının gördüğü kodları oluşturur.
Business Layer : Proje kodların yazıldığı bölümdür.
Data Access Layer : Veri tabanı işlemleri yapılır.
Monolitik olarak yazılmış e-ticaret sitesi uygulamasına bakalım :

Projenin en yoğun kısmının Product servis olduğunu düşünelim.Ürün sayısı sürekli artacak bir noktadan sonra database sorgulara yetişemeyecektir. Bu durumda sunucuyu ölçeklendirilmesi gerekecek yani kopyasını alınacaktır(snapshot).

Monolitik Mimarinin Avantajları :
- Geliştirilemesi kolaydır.
- Test edilebilirliği kolaydır.
- Tek projeyi olarak deploy edilebilir.
- Ölçeklendirme oldukça kolaydır. Yatay olarak mimarisini kopyalayıp Load Balancer arkasında çalıştırabilir.
Monolitik Mimarinin Dezavantajları:
- Proje büyüdükçe bakımı zorlaşır
- Uygulamanın boyutu başlama süresini yavaşlatır.
- Uygulama güncelleneceği zaman tüm uygulamayı baştan deploy etmeniz gerekir.
- Ölçeklendirme tüm proje genelinde yapılır.(sadece product servis yoğun olmasına rağmen tüm proje iki kere daha kopyalandı. Bu gerekli değil.)
- Güvenilirlik,sağlamlık ve dayanıklılığı zayıf.
- İşe yeni başlayacak arkadaşların eğer dökümantasyon sağlam değilse işe alışmanın zor olması.
Service Oriented Architecture(SOA) :
Servislerin ayrı ayrı tasarlanıp bir yapı oluşturulması sağlanır. Yapılar birbirinden bağımsız çalışabilir. Birden çok sistemin yer yapılarda kullanımı uygundur.
Örnek olarak elimizde 3 farklı proje olsun. Müşteri ilişkileri yönetimi, muhasebe ve pazarlama.

Bu yapıyı SOA’ya aktaralım :

SOA yapısında doğrudan client projeye erişemez.Client’tan bir istek geldiğinde ESB validate eder, kontrolünü sağlar ve erişmek istediğiniz projeye yönlendirir. SOA projelerin kendi içinde haberleşmesi ve dış dünya ile bağlantısı için web servislerden yararlanır(SOAP,WDSL). Her projenin kendi veritabanı vardır ve daha hızlı cevap alınır.
SOA Servisin Avantajları :
- Servisler tekrar tekrar kullanılabilir.(Reusable).
- Servislerin bakım ve süreçleri kolaydır çünkü ayrı ayrı projeler içindeler(Maintained).
- Servisler farklı farklı projelere ayrıldığı için güvenilir ve dayanıklıdır.
- Up time oranları yüksektir.(ulaşılabilirlik).
- Yatay ve dikey ölçeklendirme mümkündür.
- Platform bağımsızdır.
SOA Servisin Dezavantajları :
- Overload
- Yüksek bant genişliği
- Yüksek maliyet
- ESB aşamasında client’tan gelenlere cevap vermesi overload durumuna yol açtığından bant genişliğinin yüksek olması gerekiyor. Network altyapısı ve sunucuları ona göre ayarlamak da maliyeti arttırıyor.
Mikro Servis Mimarisi :
Amaç büyük servisleri küçük servisler halinde sunmaktır. Aslında SOA’nın bir yorumudur.
Her bir servisin kendine ait Server Stack yapısı , kendine ait bir sunucusu ve veritabanı vardır. Kendi aralarında iletişim ve dış dünyayla iletişim için ApiGateway kullanılır.
Api Gateway : İstek sınırlandırma, istatistik, kimlik doğrulama vs. çeşitli sık kullanılan işlevleri üzerine alarak asıl API sunucularınızın önünde bir üst katman oluşturur.
Stateless yapılardır. Sunucuya bağımlı, sunucu üzerinden okunabilecek herhangi bir file database,sunucuya yazdığı bir dosya yoktur. Bu sayede projeyi başka bir sunucuya aktardığımızda sorunsuz çalışır.
Projemizi mikro servis mimarisi ile yapacak olursak :

Mikro Servis Mimarisinin Avantajları :
- Çok dilli mimariye sahiptir.
- Kolay ölçeklendirilir.
- Daha iyi bir takım yönetimi sağlar.
- Yenilik yapmak daha kolaydır.
- İmplemente edilirken diğer servisler etkilenmez.
Mikro Servis Mimarisinin Dezavantajları :
- İmplementasyon kolay değildir.Envarter sistemi iyi tutulmalıdır.
- Debug kolay değildir. Monitoring sistemi kurulmalı ve uygulamaları izlemek gereklidir.
- Hata yönetimi kolay değildir.