Mikroservisler bir dönem her projenin varsayılan cevabı gibi sunuldu. Bugün ise pek çok ekip, gereksiz yere dağıtık sistem kurmanın bedelini ödedikten sonra daha dengeli bir noktaya dönüyor. Doğru soru "hangisi daha modern?" değil, "bizim ekibimiz ve problemimiz için hangisi daha az maliyetli?" olmalı.
Monolit
Uygulamanın tamamı tek bir birim olarak geliştirilir ve dağıtılır.
Artıları: Basit geliştirme ve hata ayıklama, tek dağıtım, kolay transaction yönetimi, düşük altyapı maliyeti.
Riskleri: Kod disiplin olmadan büyürse her şeyin her şeye bağlı olduğu bir "büyük çamur yumağına" dönüşebilir.
Mikroservis
Uygulama, bağımsız geliştirilen ve dağıtılan küçük servislere bölünür; her servisin kendi verisi vardır.
Artıları: Ekiplerin bağımsız çalışması, servis bazında ölçeklenme, farklı teknolojiler kullanabilme.
Gizli maliyetleri:
- Ağ çağrıları başarısız olabilir; tekrar deneme, zaman aşımı ve idempotency şarttır.
- Servisler arası veri tutarlılığı zorlaşır.
- Dağıtım, izleme ve hata ayıklama için ciddi altyapı gerekir (gözlemlenebilirlik, Kubernetes).
- Bir isteği takip etmek için birden çok servisin logunu birleştirmek gerekir.
Karşılaştırma
| Ölçüt | Monolit | Mikroservis |
|---|---|---|
| Başlangıç hızı | Yüksek | Düşük |
| Altyapı maliyeti | Düşük | Yüksek |
| Ekip bağımsızlığı | Sınırlı | Yüksek |
| Hata ayıklama | Kolay | Zor |
| Bağımsız ölçeklenme | Sınırlı | Yüksek |
| Uygun ekip büyüklüğü | Küçük-orta | Çok sayıda ekip |
Orta yol: Modüler monolit
Tek bir uygulama olarak dağıtılır ama içi net sınırlarla modüllere ayrılır. Her modülün kendi kodu ve mümkünse kendi veritabanı şeması vardır; modüller birbirine yalnızca tanımlı arayüzler üzerinden erişir. Bu sınırlar genellikle bounded context kavramıyla belirlenir.
Avantajı şudur: bir gün gerçekten gerekirse, sınırları net olan bir modülü ayrı servise çıkarmak kolaydır. Tersine, baştan yanlış bölünmüş mikroservisleri birleştirmek çok daha zordur.
Ne zaman mikroservis?
- Birbirinden bağımsız çalışması gereken çok sayıda ekip varsa
- Sistemin bazı parçaları çok farklı yük profillerine sahipse
- Organizasyon, dağıtık sistemleri işletecek altyapı ve deneyime sahipse
İşletme yazılımlarının büyük çoğunluğu için iyi yapılandırılmış bir monolit, yıllarca yeterli ve en ekonomik çözümdür. .NET dünyasında dağıtık uygulamaları geliştirmeyi kolaylaştıran araçlar için Aspire yazısına bakabilirsiniz.
Sık sorulan sorular
Monolit ölçeklenemez mi?
Ölçeklenir. Aynı uygulamanın birden çok kopyasını yük dengeleyici arkasında çalıştırmak, çoğu iş yükü için yeterlidir.
Mevcut monoliti mikroservislere bölmeli miyim?
Somut bir sorun (ekiplerin birbirini beklemesi, belirli bir parçanın ölçeklenme ihtiyacı) yoksa genellikle hayır. Önce modül sınırlarını netleştirmek daha akıllıcadır.
Sonuç
Mimari, ekibin büyüklüğüne ve problemin gerçek ihtiyaçlarına göre seçilmelidir. Çoğu proje için en iyi başlangıç, sınırları net bir modüler monolittir.