Mikroservis Mimarisi Nedir ? Avantajları - Dezavantajları Nelerdir ?
Bu yazımda sizlere mikroservis mimarisi ve onun avantajları/dezavantajlarından bahsedeceğim.
Nedir ?
Mikro Servisler küçük parçalara ayrılmış, internet aracılığıyla birbirleriyle haberleşerek çalışan yazılımcıklardır. Bir diğer tanım ise : Mikroservisler service-oriented architecture (SOA) modelin diğer versiyonudur ve uygulamayı servisleri gevşek bağlayarak(loosely coupled) geliştirmektir.
Monolitik vs Mikroservis
Mikroservis mimariden önce pek çok yazılım monolotik şekilde tek bir proje/solution/war şeklinde geliştiriliyordu. İçerisinde ürünlerin, kategorilerin, ödeme sistemlerinin, yönetim panelinin, müşteri panelinin bulunduğu e-ticaret sitesini düşünelim. Bunları tek projede toplamak satırlarca kod veya binlerce dosyanın aynı proje altında olması demek. Böyle bir projeyi test etmek, deploy etmek zor hale geliyor ve yeni özellikler geliştirmek yazılımcıların kodların içerisinde boğulmasına sebep veriyor. Küçük bir değişiklik için bile tüm projeyi compile etmek ve detaylı kontrol etme ihtiyacı oluşturuyor.
Avantajları:
Teknoloji Heterojenliği:
Monolotik uygulamalar tek bir yazılım dili ve veritabanı sistemi ile geliştiriliyordu. Yukarıda bir e-ticaret sisteminin altında bulunan özelliklerden bahsettik. Bu özellikleri ayrı mikro yazılımlar halinde geliştirdiğimizde farklı bir yazılım dili veya database seçebiliriz. Ödeme sistemleri java ile yazılırken, kategoriler .net, öneri sistemi python ile geliştirilebilir. Buda her yazılım dilinin avantajlarını kullanabilmemize olanak sağlar.
Dirençlilik(Resillince):
Monolotik uygulamalarda projede var olan bir hata tüm sayfanın hata olarak karşımıza çıkmasına sebebiyet verir. Eminim hepimiz site patladı, açılmıyor gibi terimleri kullanmış veya yaşamışızdır. Mikroservis mimarisinde projede bulunan her bir alan farklı bir yazılımcık olduğu ve kendi alanında host edildiği için hata aldığımız yer tüm sistemi etkilemez. Mesela sepet sisteminde var olan bir hata kullanıcıların ürünleri incelemesini, kategorilerde dolaşmasını etkilemez.
Ölçeklenebilirlik(Scaleble):
Her bir mikroservisin kendi alanında host edildiğinden bahsetmiştik. Büyük bir e-ticaret sitesinin indirim günlerinde olduğunu düşünün ve saniyede onbinlerce istek alan servislerimiz var. Örneğin ürünlerimizi listelediğimiz kategoriler sayfası. Monolotik uygulamada tüm proje tek bir hostta yayınlandığı için tüm sistemde iyileştirme yapmamız gerekir. Mikroservis mimarisinde yüksek istek alan servislerimizi istediğimiz saatlarde veya anlarda birden fazla hostta(portta) ayağa kaldırabilir, load balancer algoritmaları ile yoğunluk olduğu durumda gelen istekleri bu instancelara dağıtabilir uygulamamızı tamamen ölçeklenebilir yapıda geliştirmiş oluruz.
Kolay Yayınlama(Ease of Deployment):
Monolotik uygulamaların deploymont süreçleri daha uzun ve dikkat istiyordu.Production ortamına çıkmak belirli ekiplerin kontrolüyle haftalık/aylık şekilde yapılıyordu. Mikroservis mimaride yardımcı toollar ile developerlar kendi servislerini düşük riskler ile hızlı bir şekilde deployment yapabiliyor.
Organizasyonel Uyum:
Bir çoğumuz büyük takımlar ve fazla kod parçacıkları yüzünden sorunlarla karşılaşmışızdır. Bu problemler daha ufak ekiplere ayrıldığında kontrol edilebilir hale gelir. Mikroservisler daha ufak ve uyumlu ekipler oluşturmamıza izin verirler. Bu aynı zamanda agile ilerlememize daha uygun bir yapıdır. Ekipler kendi mikroservislerinden sorumludur ve ihtiyaç dahilinde sadece onlarda geliştirme yapar, hızlı aksiyon alabilirler.
Dezavantajlar:
- Bu mimarinin büyük avantajları olsa da diğer mimariler gibi dezavantaları da bulunmaktadır. Bu yüzden oluşturacağınız projelerde tüm durumları göz önüne alarak doğru seçimi yapmak durumundayız. Mikroservisler monolotik uygulamalara göre geliştiriciler için farklı kompleks sorunlar getirir.
- Servisler arası iletişim ve uyumlu şekilde çalışması zorlayıcıdır. 100 lerce mikroservisiniz olabilir bunların iletişimi güvenli ve sorunsuz olmalıdır. Mikro projelerde debug etmek zorlaşır bu sorunu çözmek için güçlü bir loglama alt yapısı ve monitoring araçları kullanılmalıdır.
- Unit test mikroservisler için basitken integration test daha zor hale gelir.
- Her mikrosersvis kendi API endpointlerine sahiptir. Değişiklik yapmak kolay olmasına rağmen bu endpointlere istek atılan başka servisleri göz önüne almalıyız. Kısacası sahip olduğunuz mikroservisleri kimlerin kullandığını ve business logice hakim olmanız gerekir.
- Mikro servis mimarisinin verimli çalışması için, güvenlik ve bakım desteği ile yeterli barındırma altyapısına ve tüm hizmetleri anlaya, yönetebilen nitelikli geliştirme ekiplerine ihtiyacınız vardır.
Son Söz:
Mikroservis mimarisi son zamanlarda birçok şirket tarafından tercih edilmekte büyük ölçekli yazılımlarda kullanılmaktadır. Umarım bu yazıyı okuduktan sonra genel hatlarıyla neden tercih edildiği avantajları ve dezavantajları kafanızda yer etmiştir. Bu mimariyi kullanma fırsatınız olmadıysa ve yeni yeni duyuyorsanız kafanızda soru işaretleri anlamadığınız yerler olabilir. Bu yazıyı serinin ilk girişi olarak ele aldım. Sonraki yazılarda Spring Boot ile yardımcı kütüphaneler kullanarak mimariyi nasıl kullandığımıza değineceğim.
Kaynakça:
Vikipedia
Newman, S. (2015). Building microservices: designing fine-grained systems. O'Reilly Media, Inc.