Yeni bir projeye mikroservislerle mi başlamalıyım?
Kısa cevap: Büyük ihtimalle hayır. Sıfırdan başlayan çoğu ürün için doğru başlangıç noktası, iyi modüllere ayrılmış bir monolittir.
Mikroservislerin çözdüğü asıl problem teknik değil, organizasyoneldir: birbirinden bağımsız deploy edilebilen, ayrı ekiplerin sahiplendiği, farklı hızlarda ölçeklenmesi gereken parçalar. Tek kişilik ya da küçük bir ekipsen ve domain’i henüz tam oturmadıysa, bu problemlerin hiçbirine sahip değilsin — ama dağıtık sistemin tüm maliyetini (ağ gecikmesi, kısmi hatalar, dağıtık transaction, gözlemlenebilirlik, deploy karmaşası) baştan ödüyorsun.
Önerdiğim yol:
- Modüler monolitle başla. Domain’i net sınırlara (bounded context) böl, ama hepsini tek bir deploy edilebilir uygulamada tut. Modüller arası iletişimi açık arayüzlerden geçir, doğrudan tabloya uzanma.
- Sınırları kodda zorla. Modüller arasında dairesel bağımlılığa izin verme. Bu disiplin, ileride bir modülü servise çıkarman gerektiğinde işin %80’ini önceden yapmış olmanı sağlar.
- Acıyı ölçtüğünde ayır. Bir modül gerçekten ayrı ölçeklenmek zorunda kaldığında, ayrı bir ekip onu sahiplendiğinde ya da deploy’lar birbirini bloke etmeye başladığında — işte o zaman o sınırı bir servise terfi ettir.
Mikroservis bir hedef değil, belirli bir ölçekte ödediğin bir bedeldir. O ölçeğe ulaşmadan ödemeye başlama. “Monolitten servise çıkmak zor” derler; doğrudur — ama iyi çizilmiş sınırların olduğu bir monolitten çıkmak, baştan yanlış çizilmiş servis sınırlarını düzeltmekten çok daha kolaydır.