İçeriğe geç
Blog

Monolitten mikroservise tedrici geçiş

Big-bang yeniden yazımın neden başarısız olduğunu ve strangler-fig örüntüsüyle nasıl yapılacağını anlatıyoruz.

Tarih
Yazar Murat Haktanır
Okuma süresi 2 dk

“Sistemi sıfırdan yazalım” cümlesi, çoğu zaman 2 yıl sonra “yine sıfırdan yazalım” cümlesine dönüşür. Sebep, big-bang yeniden yazımların alan bilgisini kaybetmesidir: orijinal sistemde dile getirilmemiş yüzlerce küçük kural, yeni sistemde tekrar bulunmak zorundadır.

Strangler-Fig örüntüsü

Martin Fowler’ın popülerleştirdiği bu yaklaşımda, eski sistem yavaş yavaş “boğularak” yenisine bırakılır. Anahtar üç yapı vardır:

  1. Facade. Yeni ve eski sistemin önünde duran bir yönlendirici (genellikle API gateway).
  2. Asset capture. Eskiden çekilecek ilk parçanın seçimi.
  3. Synchronization. Eski ve yeni veri kaynakları arasında olay-temelli senkronizasyon.

İlk parçayı seçmek

Doğru sıralama, projenin başarısını belirler. Tercih ettiğimiz kriterler:

  • Düşük bağımlılık. Az sayıda diğer modüle bağlı olan parça
  • Net domain sınırı. Üretim ekipleri tarafından zaten ayrı düşünülen sorumluluk
  • Yüksek değişim oranı. Bakım borcunun en çok yavaşlattığı yer

Ödeme entegrasyonları, bildirim altyapısı veya raporlama gibi parçalar genelde ilk aday olur.

Geçiş sırasında veri tutarlılığı

İki sistem aynı anda yazıyorsa tutarlılık karmaşıklaşır. Pratiğimizde tercihimiz:

  • Outbox pattern. Eski ve yeni sistem aynı veritabanına yazar; outbox’tan event yayınlanır.
  • Shadow read. Yeni sistem üretim okumalarını taklit eder, sonuçlar eski ile karşılaştırılır.
  • Kanary write. Yeni sisteme yazma trafiği %1’den başlayarak artar.

Ne zaman yapmamalı?

Sistem henüz olgun değilse, yani domain modeli oturmamışsa, mikroservis ayrımı erkendir. Önce monolit içinde modül sınırlarını sertleştirin. Servis sınırı bir paket sınırından sertleştirilir; tersi pahalıya çıkar.

Tedrici geçiş, “hiç riske girmeden” değildir; risk dağıtılmıştır. İyi tasarlandığında her ay küçük bir kazanç verir, ekip moralini de yüksek tutar.

mimariyeniden yazım