dev-tools
Sözlük ↗Saga Deseni
Saga deseni, tek bir veritabanı işleminin hepsini kapsayamadığı durumlarda servisler arasında veriyi tutarlı tutmanın bir yoludur. Ya tamamen başarılı olan ya da tamamen geri alınan tek bir atomik commit yerine saga, işi her biri kendi servisinde bağımsız olarak commit edilen yerel işlemler dizisine böler ve her adımı, sonraki bir adım başarısız olursa onu anlamsal olarak geri alan bir telafi eylemiyle eşleştirir. Tipik bir SaaS arka ucundaki abonelik yükseltmesi bunu iyi gösterir: karttan tahsil et, yetkilendirmeyi güncelle, ek koltukları sağla, makbuzu gönder. Dört servis, dört ayrı veritabanı ve ortak işlem yok. Tahsilat başarılı olduktan sonra koltuk sağlama başarısız olursa, tahsilatı veritabanı anlamında geri alacak hiçbir şey yoktur — para hareket etmiştir. Buradaki telafi eylemi bir iadedir; yani her iki kaydı da yerinde bırakan yeni ve ileri yönlü bir işlem. Tanımlayıcı özellik budur ve en çok yanlış okunan da budur: telafi anlamsaldır, birebir değil. İki koordinasyon biçimi vardır. Koreografide her servis bir olay yayımlar ve bir sonraki ona tepki verir; bu servisleri gevşek bağlı tutar ama akışı kod tabanına dağıtır, öyle ki işlemin gerçekte ne yaptığını anlatan tek bir yer kalmaz. Orkestrasyonda tek bir bileşen her adımı çağırmaktan ve başarısızlıkta telafileri tetiklemekten sorumludur; bu, akışı okunabilir ve test edilebilir kılar, karşılığında o bileşenin kendisinin dayanıklı yapılması gerekir — saga ortasında durumunu kaybedemez. Çoğu ekip iki üç adım için koreografiyle başlar ve dizi büyüdüğünde ya da birinin onu ayıklaması gerektiğinde orkestrasyona geçer. Sagalar atomikliği kullanılabilirlikle takas eder ve bedeli ara durumların görünür olmasıdır: bir süre boyunca müşteriden tahsilat yapılmıştır ama koltukları henüz yoktur. Sistem, bu durumun şaşırtıcı değil okunabilir olacağı şekilde tasarlanmalıdır. Her adımın ayrıca idempotent olması gerekir, çünkü yeniden denemeler garantidir ve iki kez çalışan bir telafi eylemi iki kez iade yapmamalıdır. Pratik not: her sagaya bir kimliği, güncel adımı ve nihai sonucu olan kalıcı bir durum kaydı verin ve telafileri bu kimlik üzerinden idempotent yapın. Sagalar üretimde telafi yazmak zor olduğu için değil, takılı kalmış bir işlemin hangi adımda olduğunu kimse yanıtlayamadığı için çöker.
İlgili terimler