Geçmişe göre artık oldukça fazla yazılım konulu içerikler üretiliyor. Çoğu giriş seviyesi olsa da tecrübe kazanmak ve konuyu öğrenmek için bu çok güzel bir eylem. Umarım daha fazla içerik üretilir. Son zamanlarda Microservice temalı oldukça fazla içerik oluşturulduğu dikkatimden kaçmadı. Tabii aralarında kopyala yapıştır, izinsiz çeviri yapılmış olan etik dışı yazılar olsa da çoğu konuyu oldukça güzel anlatıyor. Bu yazıların bir kısmı ise genelleme kurbanı maalesef. Genellemeler ile bir derdim yok, fakat bazı durumlarda dozaj fazla kaçabiliyor ve yanlış öğrenmenin yolunu açıyor. Bu yazı da microservice yazılarında gördüğüm bazı genellemeler ve hatalar üzerine yazıldı.
Bu mimari yaklaşımı ortaya atan makale [1] içerisinde Martin Fowler sıklıkla monolith yapılar ile karşılaştırmaya gitmiştir. Kendisi mümkün olduğunca kesin yargılardan kaçınmış olsa da bu yazıdan türetilen içeriklerde bu kesinlik içermeyen yargılar kanunlara dönüşmüştür. "Genellikle monolith yaklaşımlarda" diye başlayan cümleler alıntılarda "Monolith yaklaşımda" şeklinde "genellikle" kısmı uçurularak kesinliğine ve tekilliğine dönüşmektedir. Tekillik derken amaç, monolith'in tek şekli, yöntemi olmadığına bir vurgudur. Bir çok modüler ve mimari açıdan şaheser monolith (modular monolith) yaklaşımlar da bulunmaktadır, pek tabii kötü yazılmış kütükler de.
Genellemelerimiz şunlar;
"Monolith uygulamalarda tek bir programlama dil kullanılır. Microservice'ler her servisin başka programlama dili geliştirilmesine olanak sağlar."
Martin Fowler, monolith yaklaşımlarda standart bir dil kullanılmasının daha yaygın olduğundan (ve yönelimin bu yönde olduğundan), microservice'lerin ise bu durumun daha gevşek olduğundan bahseder. Özünde ihtiyaç duyuyorsanız monolith bir uygulamada da istediğiniz kadar programlama dilinden parçalar bulundurabilirsiniz. Keyif tamamen sizin.
"Monolith uygulamalarda tek proje olduğundan zamanla yönetmesi zorlaşır"
Orijinal makaledeki "projelere değil ürünlere odaklanmak" kısmının, monolith'lerin tek bir projeden oluştuğuna evrildiğini düşünüyorum. Biraz büyüyen bir çok monolith projenin farklı kısımları farklı projelerde saklanır. Microservice'lerde ise her proje monolith'lerde olduğu gibi bütünün parçası değil, tek başına bir üründür.
"Microservice mimari, gevşek bağımlılık, yüksek uyum vb. prensipleri sağlar"
Bu prensiplerin çoğunun ortaya çıkışı epey eskidir ve zaten yıllardır monolith olsun, dağıtık olsun uygulanmaktadır. Bu biraz, "Microservice'lerde kod yazılır" gibi.
"Microservice'ler tekrar kullanılabilirlik sağlar"
Modülerlikteki en büyük amaç zaten budur. Bugün NuGet, NPM vb. paket yöneticisi ile uygulamanıza tekrar kullanılabilir bir parça ekliyorsunuz. Bunu kendi ürünleriniz için neden yapamayasınız?
"Monolith projelerde takımlar birbirini bekler"
Modüler olsun veya olmasın, bu iş yönetimi ile ilgili bir konu. Microservice'ler bunun için farklı bir yol sunabilir ve bu mevcut takım için işleri çok kolaylaştırıyor olabilir. Ama bu monolith'lerde bunun zor olduğunu göstermez.
"Sürümleme daha kolay yapılabilir"
Modüler mimarilerde de her modül kendi sürümünü kendisi tutar.
"Monolith uygulamalar ölçeklenemez"
Uygun yazılmış her uygulama dikey ve/veya yatay ölçeklenebilir. Orijinal makalede bahsi geçen konu "bağımsız" ölçeklemedir.
"Monolith uygulamaları ölçeklemek maliyetlidir"
Doğru, fakat bu avantaj dağıtık mimarilerin genel bir avantajıdır. Microservice'ler bunu en iyi gösteren dağıtık mimarilerden birisidir.
"Monolith sistemlerde tek bir veritabanı bulunur"
Tercih meselesidir. Ama microservice'lerde servislerin veri depolarının özerk olma prensibi vardır.
"Monolith uygulamalar elle dağıtılır, microservice'ler de araçlar (CI/CD) sayesinde otomatik dağıtılır"
CI/CD araçları mimari seçmez.
"Microservice uygulamada bir service bozulsa diğerleri yaşamaya devam edeceğinden daha dirençlidir"
Dirençlilik doğru mühendislik ile sağlanır.
"Microservice mimariler daha esnektir"
Esnektir ama "daha" değil. Modüler bir çok mimari de, dağıtık başka mimariler de gayet esnek olabilmektedir. Bu konudan orijinal makalede hiç bahsedilmez.
Microservice'ler, NanoService'ler XService'ler harika araçlar, yöntemler. Yazılımda tek bir doğru olmadığını her yöntemin, ürünün, dilin vs. farklı avantajları olduğunu unutmayın. Asıl beceri işi en yenisi, en havalısı ile değil en uygunu (asla en doğrusu olmaz) ile yapmaktır.