Ringkasan Makalah: Sagas

Feb 16 2023
H. Garcia-Molina dan K.
Foto oleh Nathan Riley di Unsplash

H. Garcia-Molina dan K. Salem. 1987. Saga . Dalam Prosiding konferensi internasional ACM SIGMOD 1987 tentang manajemen data (SIGMOD '87). Asosiasi Mesin Komputasi, New York, NY, USA, 249–259.

Kata kunci: Proses Lama Berjalan, Sagas, Transaksi, Kompensasi, Mitigasi Kegagalan, Toleransi Kegagalan, Transparansi Kegagalan

Meskipun makalah asli tentang Sagas ditulis 35 tahun yang lalu, masalahnya masih relevan hingga saat ini. Posting ini mengeksplorasi asal-usul konsep Sagas, proses berjalan lama yang menjangkau banyak transaksi basis data.

Perkenalan

Dalam makalah mereka Sagas, Hector Garcia-Molina dan Kenneth Salem memperkenalkan konsep saga untuk menerapkan operasi "berjalan lama".

Molina dan Salem menyebut proses yang terdiri dari satu langkah sebagai proses "berjalan pendek" atau "berumur pendek" dan proses yang terdiri dari beberapa langkah sebagai "berjalan lama" atau "berumur panjang". Oleh karena itu, short-running atau long-running bukanlah pernyataan tentang waktu fisik, melainkan pernyataan tentang waktu logis dengan setiap langkahnya adalah clock tick (Gambar 1).

Gambar 1 Lari Pendek & Lari Panjang

Masalah

Dalam ekosistem yang sebagian besar menolak gagasan transaksi terdistribusi atau menahan kunci untuk jangka waktu yang lama, setiap proses yang berjalan lama tidak dapat dengan mudah dipetakan ke transaksi terdistribusi yang berjalan lama. Sebaliknya, kita membutuhkan mekanisme yang berbeda untuk menyusun proses yang berjalan lama dari transaksi yang berjalan pendek dan tidak terdistribusi.

Makalah ini mendefinisikan proses P sebagai urutan langkah a, b, dll, di mana setiap langkah adalah transaksi basis data. Untuk menggunakan istilah yang lebih familiar, Anda dapat menganggap proses sebagai fungsi dan urutan langkah sebagai urutan panggilan API ke database.

Kami mengacu pada urutan langkah a, b, dll sebagai jejak:

trace(P) = a • b • …

Dengan kata lain: Urutan dua transaksi bukanlah transaksi!

Gambar 2. Komposisi berurutan dari dua transaksi itu sendiri bukanlah sebuah transaksi.

Sepele, jika suatu proses terdiri dari satu transaksi, proses tersebut menunjukkan jaminan atomisitas dari suatu transaksi (Gambar 3).

Gambar 3. Sebuah proses P terdiri dari satu langkah a

Namun, jika suatu proses terdiri dari beberapa transaksi, proses tersebut tidak menunjukkan jaminan atomisitas dari suatu transaksi: Proses dapat dijalankan sebagian (Gambar 4).

Gambar 4. Sebuah proses P terdiri dari dua langkah a dan b

Namun, tidak seperti transaksi lainnya, transaksi proses terkait dan harus dijalankan sebagai satu kesatuan, setiap eksekusi parsial dari suatu proses tidak diinginkan.

Makalah ini membahas aplikasi reservasi perjalanan, di mana perjalanan terdiri dari beberapa penerbangan yang berpotensi pada maskapai yang berbeda. Di sini, memesan perjalanan melibatkan banyak transaksi, satu per perjalanan. Sebagai pelancong, kami ingin semua transaksi dilakukan sebagai satu unit: Kami ingin memesan semua penerbangan atau tidak ada penerbangan, pemesanan beberapa penerbangan tidak dapat diterima.

Solusinya

Makalah ini memperkenalkan Sagas, sebuah protokol untuk mengimplementasikan proses yang berjalan lama. Protokol Saga memastikan bahwa suatu proses bersifat atomik, yaitu, suatu proses dieksekusi secara setara dengan sepenuhnya atau tidak sama sekali.

Gambar 5. Pemulihan Mundur & Maju

Untuk memitigasi eksekusi parsial, sebuah proses dapat mengimplementasikan pemulihan maju atau mundur [2]:

Pemulihan Maju

Pemulihan kegagalan maju mengacu pada strategi mitigasi kegagalan yang mentransisikan sistem dari keadaan perantara ke keadaan yang setara dengan keadaan akhir (memindahkan proses ke depan).

Pemulihan Mundur

Pemulihan kegagalan mundur mengacu pada strategi mitigasi kegagalan yang mentransisikan sistem dari keadaan perantara ke keadaan yang setara dengan keadaan awal (memindahkan proses ke belakang).

Mundur Pemulihan & Kompensasi

Untuk mengaktifkan pemulihan mundur, setiap proses harus mendaftarkan langkah kompensasi untuk setiap langkah (Gambar 6).

Gambar 6. Transaksi sᵢ & Kompensasi cᵢ

Langkah kompensasi membatalkan - dari sudut pandang semantik - langkah, tetapi tidak selalu mengembalikan database ke keadaan yang ada saat langkah dimulai. Kompensasi akan mengembalikan dunia ke keadaan yang merupakan perkiraan yang dapat diterima dengan keadaan sebelum dimulainya transaksi.

Misalnya, kembali ke aplikasi reservasi perjalanan, jika perjalanan terdiri dari dua penerbangan dan pemesanan penerbangan pertama berhasil namun pemesanan penerbangan kedua gagal, saga harus membatalkan reservasi pertama untuk mengembalikan database ke perkiraan yang dapat diterima ke negara bagian itu sebelum dimulainya pemesanan perjalanan.

Eksekusi

Jadi dengan tidak adanya kegagalan, proses P menghasilkan jejak yang diinginkan

trace(P) = s₁ • s₂ • … sₙ • ✔️

trace(P) = s₁ • s₂ • … sᵢ • × • cᵢ … • c₂ • c₁ • ✔️

Saat kegagalan menghentikan Saga, Saga harus dapat memulihkan kondisinya saat ini dan melakukan pemulihan maju atau mundur. Oleh karena itu, sebuah Saga harus dapat merekam awal dari sebuah Saga, penyelesaian dari sebuah Saga, dan mencatat pos pemeriksaan dan kompensasi.

Jika Anda memiliki database, Anda dapat mencatat pos pemeriksaan dan kompensasi secara transaksional dengan setiap langkah. Jika Anda tidak dapat mencatat pos pemeriksaan dan kompensasi secara transaksional dengan setiap langkah, Anda harus menyusun mekanisme untuk mencatat kompensasi pos pemeriksaan dengan andal.

Diskusi

Meskipun makalah ini ditulis lebih dari 35 tahun yang lalu, masalah dan Sagas sebagai solusi yang diusulkan masih relevan hingga saat ini. Namun, perhatian telah beralih dari menyusun transaksi basis data menjadi menyusun permintaan layanan.

Ingatlah bahwa layanan tidak menunjukkan properti transaksional: Layanan mungkin tidak bersifat atomik, setelah pemanggilan layanan, dan jika layanan mogok, Anda mungkin tidak tahu apakah layanan tersebut berfungsi atau tidak.

Oleh karena itu, Anda harus mendaftarkan tindakan kompensasi sebelum menjalankan layanan dan merancang logika kompensasi agar benar baik layanan tersebut diterapkan atau tidak.

Kesimpulan

Sagas tetap relevan, meskipun ada kemajuan signifikan dalam teori dan praktik sejak publikasi makalah. Konsep dasar Saga sebagai protokol untuk mengimplementasikan atomisitas dalam lingkungan terdistribusi di seluruh transaksi atau layanan, teknik yang dijelaskan dalam makalah terus digunakan secara luas hingga saat ini.

Referensi