Microservices Architecture
Mikroservis mimarisi sektörde hızlı bir şekilde monolitik uygulmalalara ve servis odaklı mimarilere alternatif oldu. Bu mimari hala gelişimini sürdürmektedir. Sektörde bu mimarinin ne olduğu ve nasıl implement edildiği konularında çok fazla kafa karışıklığı da mevcuttur.
Bu mimaride birden fazla ana konsept bulunur;
Bağımsız Dağıtılmış Birimler (Separately Deployed Units)
Mikroservis mimarisinin bileşenleri bağımsız bir şekilde deploy edilir. Bu yapı dağıtımın efektif bir şekilde olmasını, ölçeklendirme yeteneklerinin artmasını ve bileşenlerin uygulamadan ayrılmasını kolaylaştırır.
Servis Bileşeni (Service Component)
Bu mimaride anlaşılması gereken en önemli konsept service bileşeni kavramıdır. Servis bileşenlerini tek bir modül veya uygulamanın büyük bir parçası olarak düşünmek gerekir. Servis bileşenleri bir veya birden fazla modül barındırır. Bu modüller tek amaçlı fonksiyonları veya bir iş uygulamasının bağımsız büyük parçasını temsil eder.
Dağıtık Mimari (Distributed Architecture)
Bu mimarideki tüm bileşenler birbirinden tamamen bağımsızdır ve birbirleriyle çeşitli uzaktan erişim protokolleriyle (REST, JMS, AMQP, SOAP vb.) konuşurlar. Mikroservis mimarisi iki ana kaynaktan gelişmiştir; Katmanlı mimari kullanılarak geliştirilen monolitik uygulamalar ve servis temelli mimari kullanılarak geliştirilen dağıtık uygulamalardır. Monolitik uygulamaların mikroservis mimariye olan dönüşümü sürekli dağıtım ve sürekli geliştirmenin etkisiyle olmaktadır. Monolitik uygulama bileşenlerinin birbirlerine fazla bağımlı olması, uygulamada yapılacak değişikliklerin, testlerin ve uygulamanını dağıtılmasını zorlaştırır. Mikroservis mimarisi bu sıkıntıları uygulamayı tek tek dağıtılan, gelşiştirilen ve test edilen birden fazla servise bölerek çözmeye yöneliktir.
En yaygın ve popüler topolojiler şunlardır: API REST-tabanlı, uygulama REST-tabanlı ve merkezi mesajlaşma.
- API REST tabanlı topoloji, bir tür API aracılığıyla küçük, kendi kendine yeten tekil servislerin olduğu web siteleri için uygundur.
- Uygulama REST-tabanlı topolojinin API REST-tabanlı topolojiden farkı, istemci istekleri bir API katmanından değil de bir uygulama ekranından gelmesidir. Uygulamanın kullanıcı arayüzü katmanı ayrı bir web uygulaması olarak dağıtılır. Bu uygulama, bağımsız dağıtılmış servis bileşenlerine bir REST tabanlı arayüzden ulaşır.
- Bir diğer yaygın yaklaşım merkezi mesajlaşma topolojisidir. Bu topoloji uzaktan erişim için REST kullanmak yerine merkezi mesajlaşma sistemi kullanır. Buradaki mesajlaşma, herhangi bir orkestrasyon, dönüştürme veya karmaşık bir yönlendirme yapmaz.
- Merkezi mesajlaşma topolojisi genellikle daha büyük iş uygulamalarında veya kullanıcı arabirimi ile hizmet bileşenleri arasındaki taşıma katmanı üzerinde daha karmaşık kontrol gerektiren uygulamalarda bulunur. Bu topolojinin REST-tabanlı topolojiye göre avantajları; gelişmiş kuyruk mekanizmaları, asenkron mesajlaşma, uygulamanın izlenmesi, hata yönetimi ve daha iyi genel yük dengeleme ve ölçeklenebilirliktir.
Mikroservis mimarisindeki karşılaşılan zorlukların başında servis bileşenlerinin ayrıntı seviyesinin belirlenmesidir. Daha büyük servis bileşenleri ve daha büyük altbileşenler, mikroservis mimarisinin getirdiği faydaların (Dağıtım, ölçeklenebilirlik, test edilebilirlik ve gevşek bağlılık) farkına varılmasının önüne geçebilir. Daha küçük servis bileşenleri, servislerin orkestrasyon gerekliliğini ortaya çıkarır.
Mikroservis mimarisi, servis temelli mimarilerde ve monolitik uygulamalarda karşılaşılan sorunlara cevaplar sunar. Ana uygulama bileşenleri daha küçük, bağımsız bir şekilde dağıtılan birimlere bölündüğünden, mikro servis mimarisi modeli kullanılarak oluşturulan uygulamalar genellikle daha sağlıklıdır, daha iyi ölçeklenebilirlik sağlar ve sürekli dağıtımı kolay bir şekilde destekler.
Bu mimarinin bir diğer avantajı ise eş zamanlı dağıtımdır. Geleneksel yapıdaki aylık veya haftalık yapılan dağıtımları ortadan kaldırır. Değişiklikler servis bazlı olduğu için sadece değişiklik yapılan servisin dağıtılması yeterlidir.
Değerlendirme kısmı okuduğum kitapta 6 ana başlık altında toplanıyor. Bu şekildeki anlatım hoşuma gittiği için ben de aynı yapıda değerlendirme kısmını oluşturdum.
Mikroservis Mimarinin Değerlendirilmesi;
- Çeviklik: Yüksek
– Ayrı olarak dağıtılan birimler sayesinde servis bileşenlerindeki değişiklikler tek tek ve izole bir şekilde yapılır. Bu da dağıtımın hızlı ve kolay bir şekilde yapılmasını sağlar. - Dağıtım Kolaylığı: Yüksek
– Servisler genel olarak birbirinden ayrı şekilde dağıtılır ve bu durum gün içerisinde herhangi bir saatte dağıtım yapılması avantajını sağlar. Başarısız olan dağıtımlar kolay bir şekilde geri döndürülebilir. - Testedilebilirlik: Yüksek
– Bütün bir uygulamayı test etmektense belirli bir servis bileşenini test etmek çok daha kolaydır. Servis bileşenlerinin birbiriyle düşük seviyede bağlılığı sayesinde, yapılan dağıtımlar uygulamanın diğer kısımlarını nadiren bozar. Yapılan ufak bir değişiklikte bile tüm uygulamayı test etme gerekliliği yoktur. - Performans: Düşük
– Mikroservis mimarisinin dağıtık doğasından ötürü yüksek performans beklenen uygulamalara uygun değildir. - Ölçeklenebilirlik: Yüksek
– Uygulamanın ayrı birimlere bölünmesi sayesinde her servis bileşeni tek tek ölçeklendirilebilir ve bu da uygulamanın düzgün bir şekilde ölçeklendirilmesi olanağını sağlar. - Geliştirme kolaylığı: Yüksek
– Servis bileşenlerinin izole olması, geliştirmeyi kolaylaştırır. Bir servis üzerinde yapılan geliştirmeler uygulamanın diğer bileşenlerini etkilemez. Bu da geliştiriciler ve geliştirici takımı arasında ihtiyaç duyulan kordinasyonu iyi yönde azaltır.
Yazımın devamında Uzay Tabanlı Mimariden (Space-based Architecture) bahsedeceğim.
Kaynakça: Software Architecture Patterns — Mark Richards