Strangler fig: monoliti parça parça yenisiyle değiştirmek
Strangler fig deseni, eski sistemi bir anda değil parça parça yenisiyle değiştirme yaklaşımıdır. Yönlendirme katmanını, adımları ve riskleri okuyun.
Strangler fig deseni nedir?
Strangler fig deseni, eski bir yazılım sisteminin yerine yenisini bir anda yazmak yerine, işlevleri tek tek yeni sisteme taşıyarak eskiyi zamanla devre dışı bırakma yaklaşımıdır. Adını, bir ağaca sarılıp onu zamanla saran ve sonunda onun yerini alan bir asma türünden alır. Martin Fowler bu benzetmeyi eski yazılımların modernizasyonu için kullanmıştır.
Deseni popüler yapan, tam yeniden yazım projelerinin uzun sürmesi ve çoğu zaman kimsenin istemediği davranışları da yeniden üretmesidir. Kademeli yaklaşımda her taşınan parça kısa sürede değer üretir, riski dağıtır ve ekip her adımda öğrenerek ilerler.
Nasıl uygulanır?
Süreç, eski sistemin önüne bir yönlendirme katmanı koymakla başlar. Bu katman, gelen isteğin eski sisteme mi yoksa yeni parçaya mı gideceğini belirler. Başlangıçta tüm trafik eskiye akar. Sonra seçilen bir işlev yeni sistemde yeniden yazılır, yönlendirme kuralı değiştirilir ve o işlevin trafiği yeniye geçer.
Her taşıma şu döngüyü izler: bir dilim seç, yeni sistemde geliştir, eski ve yeni sonuçları kıyasla, trafiği yönlendir, eskiyi kapat. Döngü, eski sistemde taşınacak bir şey kalmayana dek tekrarlanır. Fowler'ın tarifinde de temel fikir, eski sistemin kenarında yeni davranışı yavaş yavaş büyütmektir.
Dilim seçimi ve dikişler
Başarının büyük kısmı ilk dilimin seçimine bağlıdır. İyi aday, eski sistemden görece az bağımlılığı olan, iş değeri anlaşılır bir işlevdir. Fowler bu ayrılma noktalarına dikiş der: eski sistemin içinde davranışın izole edilip değiştirilebileceği yerler.
Bağımlılığı çok yüksek bir çekirdek işlev ilk dilim olarak seçilirse proje başlamadan tıkanır. Önce çevre işlevlerden başlayıp deneyim kazanmak, sonra çekirdeğe yaklaşmak daha güvenli bir sıralamadır. Alan sınırlarını belirlemek için alan odaklı tasarım kavramları sık kullanılır.
Veri meselesi
Kodu taşımak çoğu zaman işin kolay yarısıdır. Asıl zorluk veridir. Eski sistem tek bir veritabanını paylaşıyorsa, yeni parça hangi verinin sahibi olacak? Taşıma süresince eski ve yeni sistem aynı kayıtları farklı yerlerden güncellerse tutarsızlık oluşur.
Bu nedenle veri sahipliği her dilim için baştan karara bağlanır. Geçiş döneminde verinin eşitlenmesi gerekebilir; ancak çift yönlü eşitleme karmaşıklığı artırır. Mümkün olduğunda bir dilimin verisi tek bir yönde, yeni sisteme doğru taşınır ve eski sistem bu veriyi artık yazmaz.
Riskler ve sık hatalar
Geçici yönlendirme ve eşitleme kodu, geçiş boyunca ek bir maliyet olarak yaşar ve işi bitirmeden bırakılırsa kalıcı bir yük hâline gelir. Bir diğer hata, eski sistemi kapatmayı unutmaktır; eski ve yeni sistem yıllarca yan yana çalışır ve bakım yükü katlanır.
Fowler ayrıca örgütsel yapının da değişmesi gerektiğini vurgular. Ekipler eskisi gibi çalışmaya devam ederse yeni sistem de zamanla eskisi kadar katılaşır. Yeni parçaların izlenmesi, her dilimde geri dönüş planı ve ilerlemeyi gösteren ölçümler baştan kurulmalıdır.
Mikroservisle ilişkisi
Strangler fig bir mikroservis deseni değil, bir geçiş stratejisidir. Hedef mimari mikroservis olabilir, ama aynı yaklaşım bir monoliti daha derli toplu bir monolite ya da modüler yapıya taşımak için de kullanılabilir. Dilim yeni sistemde mutlaka ayrı bir servis olmak zorunda değildir.
Monolitten mikroservise geçiş kararında da sorulması gereken soru, mikroservisin gerçekten bir ihtiyaca cevap verip vermediğidir. Strangler fig, bu soruyu cevaplarken geri dönülemez büyük kararlardan kaçınmanın yolunu sunar.
Mindset programlarında nerede yer alır?
Mindset'te bu konuya ayrılmış eğitimler vardır. Strangler Fig ile Monolitten Mikroservise Kademeli Geçiş eğitiminde modüller arasında mevcut sistem analizi, alan sınırları ve ilk dilim seçimi, yönlendirme katmanı ve cephe deseni, veri bölme stratejileri yer alır. Strangler Fig ile Aşamalı Monolit Modernizasyonu eğitimi ise dilimleme ve taşıma sırası planı, trafik yönetimi, veri sahipliği ve senkronizasyon modüllerini içerir.
İlgili Mindset programı
Strangler Fig ile Monolitten Mikroservise Kademeli Geçiş
Sık sorulan sorular
Strangler fig ile tam yeniden yazım arasındaki fark nedir?
Tam yeniden yazımda yeni sistem bitene kadar kullanıcıya değer gitmez ve geçiş tek büyük anda yapılır. Strangler fig'de her dilim ayrı ayrı canlıya alınır, böylece risk dağılır ve ekip erken geri bildirim alır. Karşılığında geçici bir yönlendirme katmanı ve eşitleme maliyeti ödenir.
Yönlendirme katmanı olarak ne kullanılır?
Genellikle bir ters vekil sunucu, API ağ geçidi ya da uygulama önüne konan bir cephe bileşeni bu işi görür. Gerekli olan, isteğin yola göre veya kurala göre eski ya da yeni sisteme gönderilebilmesidir. Araç seçimi altyapıya ve ekibin deneyimine bağlıdır.
Küçük bir uygulama için de uygun mu?
Uygulama küçükse ve ekip kapsamı iyi biliyorsa doğrudan yeniden yazmak daha ucuz olabilir. Strangler fig'in değeri, sistemin kritik olduğu, bilgisinin dağıldığı ve kesinti toleransının düşük olduğu durumlarda ortaya çıkar. Karar, geçiş maliyeti ile yeniden yazım riskinin karşılaştırılmasıyla verilir.
Geçiş ne zaman tamamlanmış sayılır?
Eski sistemin üzerinde artık hiçbir iş akışı kalmadığında ve kapatıldığında. Yönlendirme katmanı, eşitleme kodu ve geçici bağlantılar da kaldırılmalıdır. Aksi hâlde eski ve yeni sistem yan yana yaşamaya devam eder ve modernizasyonun faydası eksik kalır.
İlgili rehberler
İlgili eğitimler
Kategori: Yazılım Geliştirme