Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124

Yazılım dünyasında en çok tartışılan konulardan biri: “Monolith mi yoksa microservice mi?” Bu yazıda bu iki yaklaşımın ne olduğunu gerçekten anlayacaksın. Ayrıca sadece tanım değil, hangi durumda hangisini seçmen gerektiğini de net şekilde kavrayacaksın.
Yazılım dünyasında en çok tartışılan konulardan biri: “Monolith mi yoksa microservice mi?”
Bu yazıda bu iki yaklaşımın ne olduğunu gerçekten anlayacaksın. Ayrıca sadece tanım değil, hangi durumda hangisini seçmen gerektiğini de net şekilde kavrayacaksın.
Çoğu kişi monolith’i şöyle hayal eder:
“Tek bir dev sunucu var ve bütün sistem onun içinde çalışıyor.”
Ama gerçek bu değil.
Monolith, tüm iş mantığının tek bir uygulama içinde toplandığı bir mimaridir. Ama bu, tek makine demek değildir.
Yani şöyle düşün:
Aynı uygulamayı birden fazla sunucuda çalıştırabilirsin. Kullanıcılar bu sunuculara bağlanır ama aslında hepsi aynı uygulamanın kopyalarıdır.
Bu da şu anlama gelir:
Monolith sistemler de horizontal scaling yapabilir.
Bunu şöyle hayal edebilirsin:
Bir restoranın tek bir menüsü var (monolith). Ama aynı menüyü sunan 5 farklı şube açıyorsun. Menü değişmedi, sadece kapasite arttı.
“Micro” kelimesi seni yanıltmasın.
Microservice demek küçük küçük parçalar demek değildir.
Aslında her biri tek bir iş alanına odaklanan bağımsız servislerdir.
Örneğin:
Her biri kendi verisine ve iş mantığına sahiptir.
Yani şöyle düşün:
Her servis kendi işini bilir ve başkasının işine karışmaz.
Ama önemli bir detay var:
Bu servisler doğrudan kullanıcıyla konuşmaz çoğu zaman.
Burada devreye API Gateway girer.
Bunu şöyle hayal edebilirsin:
Bir alışveriş merkezine giriyorsun. Sen tek kapıdan giriyorsun (gateway), içeride seni doğru mağazaya yönlendiriyor.
Şimdi işin pratik tarafına gelelim.
Eğer ekip küçükse ve herkes birbiriyle sürekli iletişim halindeyse, sistemi parçalara bölmek çoğu zaman gereksiz yük olur.
Yani şöyle düşün:
3 kişilik bir ekipte herkes her şeyi biliyorken, sistemi 10 parçaya bölmek işleri hızlandırmaz, yavaşlatır.
Microservice’te:
Monolith’te bunların çoğu yok.
Her şey tek yerde.
Bunu şöyle hayal edebilirsin:
Tek bir makineyi yönetmek mi daha kolay, yoksa 10 farklı makineyi senkronize etmek mi?
Bağlantı ayarları, test setup’ları gibi şeyleri her servis için tekrar yazmana gerek yok.
Hepsi tek yerde.
Çünkü servisler arası network çağrısı yok.
RPC (Remote Procedure Call) yerine direkt fonksiyon çağrısı yaparsın.
Yani şöyle düşün:
Aynı odadaki birine seslenmek ile başka şehirdeki birini aramak aynı şey değil.
Tüm sistem tek yerde olduğu için anlaması zaman alır.
Yani şöyle düşün:
Küçük bir kitap yerine ansiklopedi okuyorsun.
Küçük bir değişiklik bile tüm sistemi yeniden deploy etmeyi gerektirir.
Her şey birbirine bağlı olduğu için bir değişiklik birçok yeri etkiler.
En kritik noktalardan biri bu.
Bunu şöyle hayal edebilirsin:
Tek bir sigorta var ve atınca tüm evin elektriği gidiyor.
Her servisi ayrı ayrı büyütebilirsin.
Yani şöyle düşün:
Sadece yoğun olan kasaya ekstra çalışan koyuyorsun, tüm mağazaya değil.
Bir kişiye sadece tek servis verirsin.
Tüm sistemi öğrenmesine gerek yok.
Farklı ekipler aynı anda farklı servislerde çalışabilir.
Bunu şöyle hayal edebilirsin:
Aynı anda birisi mutfakta yemek yapıyor, diğeri servis hazırlıyor. Birbirlerini beklemiyorlar.
Hangi servis ne kadar yük alıyor net şekilde görülür.
Monolith’te bu ayrım daha zordur.
En kritik konu:
Yanlış parçalarsan sistem daha kötü hale gelir.
Özellikle şu duruma dikkat:
Eğer bir servis sürekli sadece başka bir servisi çağırıyorsa, bu kötü bir işarettir.
Yani şöyle düşün:
İki kişi sürekli birbirine soru soruyorsa, belki de aynı odada oturmaları gerekiyordur.
Gerçek cevap: Duruma bağlı
Ama pratikte şunu görürsün:
Özellikle sistem design mülakatlarında çoğu zaman microservice tercih edilir. Çünkü senaryolar genelde büyük ölçeklidir.
Ama bu şu demek değil:
Monolith kötü.
Örneğin Stack Overflow uzun süre monolith mimariyle başarılı şekilde çalıştı.
Öte yandan Google ve Facebook gibi şirketler yoğun şekilde microservice kullanır.
Aslında mesele “hangisi daha iyi?” sorusu değil.
Mesele, hangi problem için hangisi daha uygun?
Monolith sana hız, basitlik ve düşük operasyon maliyeti verir.
Microservice ise esneklik, ölçeklenebilirlik ve ekip bağımsızlığı sağlar.
Eğer sistemi gereğinden erken parçalarsan karmaşa yaratırsın.
Ama geç kalırsan da büyüyen sistemi yönetmek zorlaşır.
Dengeyi kurmak işin özü.
Bu yazı Monolith vs Microservices videosundan ilham alınarak yazılmıştır.