Bildiri Özeti: Efsaneler
H. Garcia-Molina ve K. Salem. 1987. Efsaneler . 1987 ACM SIGMOD uluslararası veri yönetimi konferansı (SIGMOD '87) Bildiri Kitabında. Association for Computing Machinery, New York, NY, ABD, 249–259.
Anahtar Kelimeler: Uzun Süren Süreçler, Sagalar, İşlemler, Tazminat, Hata Azaltma, Hata Toleransı, Hata Şeffaflığı
Sagalar hakkındaki orijinal makale 35 yıl önce yazılmış olsa da, sorun bugün hala geçerliliğini koruyor. Bu gönderi, birden çok veritabanı işlemini kapsayan uzun süredir devam eden süreçler olan Sagas kavramının kökenlerini araştırıyor.
giriiş
Hector Garcia -Molina ve Kenneth Salem gazetelerinde Sagas , "uzun vadeli" operasyonları uygulamak için destan kavramını tanıtıyor.
Molina ve Salem, tek bir adımdan oluşan süreçleri “kısa süreli” veya “kısa ömürlü” süreçler olarak ve birden çok adımdan oluşan süreçleri “uzun süren” veya “uzun ömürlü” olarak adlandırır. Bu nedenle, kısa çalışma veya uzun çalışma, fiziksel zamanla ilgili bir ifade değil, her adımın bir saat tik tak olduğu mantıksal zamanla ilgili bir ifadedir (Şekil 1).
Sorun
Dağıtılmış işlemler veya kilitleri uzun süre tutma fikrini büyük ölçüde reddeden bir ekosistemde, uzun süren herhangi bir süreç, uzun süredir devam eden, dağıtılmış bir işlemle basitçe eşleştirilemez. Bunun yerine, kısa süreli, dağıtılmamış işlemlerden uzun süreli işlemler oluşturmak için farklı bir mekanizmaya ihtiyacımız var.
Makale, bir P sürecini, her adımın bir veritabanı işlemi olduğu a, b, vb. adımlardan oluşan bir dizi olarak tanımlar. Daha tanıdık terimler kullanmak için, bir işlemi bir işlev olarak ve adım dizisini veritabanına yapılan API çağrıları dizisi olarak düşünebilirsiniz.
a, b, vb. adımların sırasına iz olarak atıfta bulunuruz:
trace(P) = a • b • …
Başka bir deyişle: İki işlemden oluşan bir işlem, bir işlem değildir!
Önemsiz bir şekilde, bir süreç tek bir işlemden oluşuyorsa, süreç bir işlemin atomiklik garantilerini sergiler (Şekil 3).
Bununla birlikte, bir işlem birden çok işlemden oluşuyorsa, işlem bir işlemin atomiklik garantilerini göstermez: İşlem kısmen yürütülebilir (Şekil 4).
Bununla birlikte, diğer işlemlerin aksine, bir sürecin işlemleri ilişkilidir ve bir birim olarak yürütülmelidir, bir işlemin herhangi bir kısmi yürütmesi istenmez.
Makale, bir seyahatin potansiyel olarak farklı havayollarında birden fazla uçuştan oluştuğu bir seyahat rezervasyonu uygulamasını tartışmaktadır. Burada, bir gezi rezervasyonu, yolculuk ayağı başına bir tane olmak üzere birden fazla işlemi içerir. Seyahat edenler olarak, tüm işlemlerin bir birim olarak yürütülmesini istiyoruz: Tüm uçuşları rezerve etmek ya da hiç uçuş yapmamak istiyoruz, bazı uçuşlar için rezervasyon yapmak kabul edilemez.
Çözüm
Makale, uzun süren süreçleri uygulamaya yönelik bir protokol olan Sagas'ı tanıtmaktadır. Saga protokolü, bir işlemin atomik olmasını, yani bir işlemin gözlemlenebilir şekilde tamamen veya hiç yürütülmemesine eşdeğer olmasını sağlar.
Kısmi yürütmeyi azaltmak için, bir işlem ileri veya geri kurtarmayı uygulayabilir [2]:
İleri Kurtarma
İleri hata kurtarma, sistemi ara durumdan nihai duruma eşdeğer bir duruma (işlemi ileriye taşıma) geçiren hata azaltma stratejilerini ifade eder.
Geriye Dönük Kurtarma
Geriye doğru hata kurtarma, sistemi ara durumdan başlangıç durumuna eşdeğer bir duruma (işlemi geriye doğru hareket ettirerek) geçiren hata azaltma stratejilerini ifade eder.
Geriye Dönük Tazminat ve Tazminat
Geriye doğru kurtarmayı etkinleştirmek için her işlem, her adım için bir telafi adımı kaydetmelidir (Şekil 6).
Telafi adımı - anlamsal bir bakış açısıyla - adımı geri alır, ancak veritabanını adım başladığında var olan duruma döndürmesi gerekmez. Tazminat, dünyayı, işlemin başlamasından önceki duruma kabul edilebilir bir yaklaşım olan bir duruma geri getirecektir.
Örneğin, seyahat rezervasyonu uygulamasına geri dönersek, bir yolculuk iki uçuştan oluşuyorsa ve ilk uçuşun rezervasyonu başarılı ancak ikinci uçuşun rezervasyonu başarısız olduysa, destanın veri tabanını duruma göre kabul edilebilir bir yaklaşıma döndürmek için ilk rezervasyonu iptal etmesi gerekir. gezi rezervasyonu başlamadan önce vardı.
Uygulamak
Bu nedenle, başarısızlık olmadığında, bir P işlemi istenen izi üretir.
trace(P) = s₁ • s₂ • … sₙ • ✔️
trace(P) = s₁ • s₂ • … sᵢ • × • cᵢ … • c₂ • c₁ • ✔️
Bir arıza bir Saga'yı kesintiye uğrattığında, bir Saga mevcut durumunu kurtarabilmeli ve ileri veya geri kurtarma gerçekleştirebilmelidir. Bu nedenle, bir Saga, bir Saga'nın başlangıcını, bir Saga'nın bitişini ve kontrol noktalarını ve tazminatları kaydedebilmelidir.
Veritabanına sahipseniz, her adımda işlemsel olarak kontrol noktalarını ve tazminatları kaydedebilirsiniz. Her adımda kontrol noktalarını ve tazminatları işlemsel olarak kaydedemiyorsanız, kontrol noktaları telafilerini güvenilir bir şekilde kaydetmek için bir mekanizma geliştirmeniz gerekir.
Tartışma
Makale 35 yılı aşkın bir süre önce yazılmış olmasına rağmen, sorun ve önerilen çözüm olarak Sagalar bugün hala geçerlidir. Ancak dikkatler, veritabanı işlemleri oluşturmaktan hizmet çağrıları oluşturmaya kaydı.
Hizmetlerin işlemsel özellikler göstermediğini unutmayın: Hizmetler, bir hizmet çağrısından sonra atomik olmayabilir ve hizmet çökerse, hizmetin etkili olup olmadığını bilemezsiniz.
Bu nedenle, bir hizmeti çalıştırmadan önce bir telafi eylemi kaydetmeli ve hizmet devreye girsin ya da girmesin, tazminat mantığını doğru olacak şekilde tasarlamalısınız.
Çözüm
Makalenin yayınlanmasından bu yana teori ve pratikteki önemli ilerlemelere rağmen sagalar geçerliliğini koruyor. İşlemler veya hizmetler arasında dağıtılmış bir ortamda atomikliği uygulamaya yönelik bir protokol olarak bir Saga'nın temel konsepti, makalede açıklanan teknikler bugün yaygın olarak kullanılmaya devam ediyor.
Referanslar
- [1] Uzun süren işlemler için iz semantiği, M. Butler, CAR Hoare & C. Ferreira, 2005
- [2] İlk İlkelerden Hataları Ele Alma , Dominik Tornow, 2022

![Bağlantılı Liste Nedir? [Bölüm 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































