Microservice Mimari Nedir ? Neden Önemlidir ?
Herkese Selamlar ! Bugün sizler ile beraber son zamanlarda ciddi anlamda herkes tarafından merak edilen, hatırı sayılır sayıda şirketin şu an aktif olarak kullandığı microservice mimari nedir ? Neden önemlidir ? bir bakalım istedim bu yazı içerisinde. Yavaş yavaş başlayalım o zaman !
Microservice Mimari Nedir ?
Microservice, service oriented architecture (SOA) yapısının bir çeşididir aslında. Bir uygulama içerisinde ki o uygulamanın çalışmasını stabil bir sekilde götürebilen, belirli hizmet, tek bir amaç ve en önemlisi birbirinden bağımsız olarak çalışan alt hizmetlerdir. Aslında ben en çok bunu SOLID principles içerisinde yer alan Single Responsibilitye benzetiyorum. Tek bir sorumluluk alacak kurguladığımız yapı ve tamamen buna dayalı olarak yoluna devam edecek. Normalde kullandığımız yapı ise monolithic. Tam olarak aşağıda ki resimde yer aldığı gibi.
Monolithic yapıyı şu an hali hazırda herkes kullanıyordur zaten. Çok büyük projelerde ise bu yapı sorun olmaya başladı. Mesela Amazon tamamen bu yapı üzerindeydi fakat proje ciddi anlamda çok büyüdü. Amazon mühendisleri ortalama olarak her 11.7 saniyede bir kod gönderirler proje içerisine yani production ortamına kod pushlamaktan ve ardından deploy almaktan bahsediyorum. Büyük bir proje içerisinde çalışıyorsanız ve bu büyük projeyi yönetmek için büyük bir ekibiniz var ise monolithic yapı size uygun değildir. Sebebi ise katmanlar üzerinde birbirine bağımlı çok fazla alt hizmetler vardır. Yapmış olduğunuz basit bir değişiklik diğer katmanları gereksiz yere etkileyebilir ve sürekli birbirini ezmeye çalışan kodlar üzerinde ki problemleri çözmeye harcayabilirsiniz vaktinizi. Şu an ise Amazon, Netflix, Google, PayPal ve Uber bu mimariyi oldukça benimsemiş durumda. Ülkemiz içerisinde de büyük, orta ölçekli ya da küçük geliştirmenlik firmaları projelerinde bu mimariyi uygulamak için ellerinden geleni yapıyorlar.
Microservice mimarisini daha detaylı bir çizim ile gösterecek olursak ise;
Microservice mimarisi neden bu kadar önemli 8 madde de incelemeye çalışalım sizinle.
Esneklik (Flexibility)
Microserviceler iç yapısında birbirinden bağımsız olduğu için farklı servisler kullanmaya ihtiyaç duyduğumuz da en uygun teknolojinin kullanımına izin verir. Bunu biraz daha detaylı olarak incelemek istersek; belirli bir servisi oluşturan her ekibin bağımsız olarak çalıştıkları için tercih ettikleri programlama diline ve frameworke karar verebileceği anlamına gelir. Bu bağımsızlık kolaylıkla birbirleri arasında iletişimin sağlanmasının yanı sıra servislere kolay bir şekilde bakım yapılmasını da olanak tanır. Aynı zamanda bir web uygulamasının işlevselliğini etkilemeden ona ek bir özellik eklemek ya da artık kullanılmayan bir özelliği ortadan kaldırmak anlamına da gelir.
Yeniden Kullanılabilirlik (Reusability)
Bir şirket mikroservice mimarisini bir proje için geliştirip uyguladığında, diğer projeler için genişletilebilir bir referansa yani en azından şematik diyagrama sahip olur. Farklı projelerde programlama dili, geliştirme araçları farklı olsa bile çekirdek mimarinin çoğunu koruyabileceği ve yeniden kullanabileceği anlamına gelir.
Riski Azaltmak (Reduces Risk)
Yazının başından itibaren sürekli bağımsızlık diyorum ya aslında her bir servis microservices içerisinde yer alan ayrı bir servis ayrı bir nesnedir. Bu sebeple birbirinden bağımsız çalışırlar. Bağımsızlık sebebi ile herhangi bir bileşen, diğer bir ismiyle component kendi problemini tüm uygulamaya yayamaz. Diğer componentler başarılı bir şekilde çalışmaya devam ederler. Tabi bu hatayı gidermek ya da yeniden yazmak kolaylaşır. Problemi tüm yapı üzerinde aramak yerine sorumlu olan componente gidersiniz ve çözersiniz. Uygulamanın tamamen durması sorununu ortadan kaldırmış olursunuz.
Ölçeklenebilirlik (Scalability)
Bu madde benim favori maddem diyebiliriz. Monolithic mimari üzerinde ölçeklendirme yapmak isterseniz eğer ihtiyacınız olsa da olmasada istemsizce tüm uygulama üzerinde yapmanız gerekir tabi ona göre bir maliyet çıkar ya da en azından ona göre vakit harcarsınız fakat microservice içerisinde istediğiniz component üzerinde istediğiniz oranda ölçekleme yapabilirisiniz.
Continuous Delivery
Microserviceler, bir uygulamanın tüm yaşam döngüsünü yönetmek için sabit bir delivery model kullanır. Bu cümle kısa olmasına rağmen biraz anlamsız gelebilir ama demek istenilen geliştirmenler ve test ekipleri tek bir servis üzerinde birlikte çalıştığında, test süreci kolay ve hızlı bir şekilde tamamlanır. Üzerinde çalıştığımız mikroservice belirli bir amaca yönelik hizmet verdiği için kolay test edilebilir hale gelir. Bu da genel anlamda süreci hızlandırır.
Çeşitli Veri Depolama (Various Data Storage)
Yukarıda yer alan resimde de görebileceğiniz gibi microservice mimari monolithic mimarinin aksine uygulama içerisinde kullanacağınız verilerin farklı konumlarda depolanmasını sağlar. Bazı durumlarda iş yaptığımız şirketler büyük veri kümeleri ile ilgilenir ve bu verilerin kendine has özellikleri olabilir. Bu nedenle bazı sorunlara ortaya çıkabilir. Buna rağmen microservice mimari her servisin ihtiyaç duyduğu en uygun depolama yöntemini kullanarak bu sorunu da çözebilir.
Ekip İşbirliği (Easy Team Collaboration)
Bir servis üzerinde çalışan ekip üyeleri yeteneklerine göre o servise atanır. Aynı amaca hizmet eden ekip üyeleri odaklanma problemi yaşamaz ve servis kısa sürede tamamlanır. Netflix’in microservice mimarisi kullanmasının ana sebeplerinden bir tanesi budur. 25 mühendisleri aynı proje üzerinde çeşitli sorunlar ile karşılaşırken birlikte ve uyum içerisinde çalışmak zorundaydılar. Tabi bu biraz zor. Microservice mimarisine geçtikten sonra ise bir sürü küçük mühendislik ekibi kurdular ve sorunlarda ekip işbirliğide ekiplere özgü olarak güncellendi.
Çeviklik (Agility)
Yukarıda da söylediğimiz gibi, microservice mimarisinde ki her bir servis sadece bir işlev üzerinde çalışır. Üzerinde değişiklik yapmış olduğunuz kod parçacığını ölçeklendirme yapmak (scalability), test etmek ve release etmek çok daha kolaydır. Amazon sadece bu yüzden monolithic mimarisini microservicelere taşıdı. Karmaşık ekip yapılarının ve kod mimarisinin yerine daha küçük, daha verimli ve yapılar arası işlevliği olan bir mimari yer aldı.
Bildiğim kadarıyla ve elimden geldiğince sizlere microservice mimarinin önemini 8 madde ile açıklamaya çalıştım. Sonra ki yazılarda görüşmek üzere.
Bu yazı wikipediadan faydalanılarak yazılmıştır.
Eline sağlık.