Bagikan melalui


Transaksi dan mode kunci dalam Koleksi Andal Azure Service Fabric

Transaksi

Transaksi adalah urutan operasi yang dilakukan sebagai satu unit kerja logis. Ini menunjukkan properti ACID yang umum (atomitas, konsistensi, isolasi, durabilitas) dari transaksi database:

  • Atomitas: Transaksi harus menjadi unit kerja atomik. Dengan kata lain, semua modifikasi datanya dilakukan, atau tidak ada yang dilakukan.
  • Konsistensi: Setelah selesai, transaksi harus meninggalkan semua data dalam keadaan konsisten. Semua struktur data internal harus benar di akhir transaksi.
  • Isolasi: Modifikasi yang dilakukan dengan transaksi serentak harus diisolasi dari modifikasi yang dilakukan oleh transaksi serentak lainnya. Tingkat isolasi yang digunakan untuk operasi dalam ITransaction ditentukan oleh IReliableState yang melakukan operasi.
  • Durabilitas: Setelah transaksi selesai, efeknya secara permanen diberlakukan dalam sistem. Modifikasi akan bertahan meskipun terjadi kegagalan sistem.

Tingkat isolasi

Tingkat isolasi menentukan tingkat mana transaksi harus diisolasi dari modifikasi yang dilakukan oleh transaksi lain. Ada dua tingkat isolasi yang didukung dalam Koleksi Andal:

  • Baca Berulang: Menentukan bahwa pernyataan tidak dapat membaca data yang telah dimodifikasi, tetapi belum dilakukan oleh transaksi lain dan tidak ada transaksi lain yang dapat memodifikasi data yang telah dibaca oleh transaksi berjalan hingga transaksi berjalan selesai.
  • Snapshot: Menentukan bahwa data yang dibaca oleh pernyataan apa pun dalam transaksi adalah versi data yang konsisten secara transaksional yang ada di awal transaksi. Transaksi hanya dapat mengenali modifikasi data yang dilakukan sebelum dimulainya transaksi. Modifikasi data yang dilakukan oleh transaksi lain setelah dimulainya transaksi berjalan tidak terlihat oleh pernyataan yang dieksekusi dalam transaksi saat ini. Efeknya seolah-olah pernyataan dalam transaksi mendapatkan snapshot dari data yang berkomitmen seperti yang ada di awal transaksi. Snapshot konsisten di seluruh Koleksi Andal.

Koleksi Andal akan otomatis memilih tingkat isolasi yang akan digunakan untuk operasi baca tertentu, bergantung pada operasi dan peran replika pada saat pembuatan transaksi. Berikut ini adalah tabel yang menggambarkan nilai default tingkat isolasi untuk operasi Kamus dan Antrean Andal.

Operasi\Peran Primer Sekunder
Entitas Dibaca Sekali Dibaca Berulang Snapshot
Enumerasi, Hitungan Snapshot Snapshot

Catatan

Contoh umum Operasi Entitas Tunggal adalah IReliableDictionary.TryGetValueAsync, IReliableQueue.TryPeekAsync.

Kamus dan Antrean Andal mendukung Baca Tulisan Anda. Dengan kata lain, setiap tulisan dalam transaksi akan terlihat oleh bacaan berikut yang termasuk dalam transaksi yang sama.

Kunci

Dalam Koleksi Andal, semua transaksi menerapkan penguncian dua fase yang ketat: transaksi tidak melepaskan kunci yang diperolehnya sampai transaksi berakhir dengan pembatalan atau penerapan.

Kamus Andal menggunakan penguncian tingkat baris untuk semua operasi entitas tunggal. Antrean Andal memperdagangkan konkurensi untuk properti FIFO transaksional yang ketat. Antrean Andal menggunakan kunci tingkat operasi yang memungkinkan satu transaksi dengan TryPeekAsync dan/atau TryDequeueAsync dan satu transaksi dengan EnqueueAsync dalam satu waktu. Perhatikan bahwa untuk mempertahankan FIFO, jika TryPeekAsync atau TryDequeueAsync pernah mengamati bahwa Antrean Andal kosong, keduanya juga akan mengunci EnqueueAsync.

Operasi tulis selalu mengambil Penguncian Eksklusif. Untuk operasi baca, penguncian bergantung pada beberapa faktor:

  • Setiap operasi baca yang dilakukan menggunakan isolasi Snapshot tidak dikunci.
  • Setiap operasi Baca Berulang secara default menerapkan Penguncian bersama.
  • Namun, untuk setiap operasi baca yang mendukung Baca Berulang, pengguna dapat meminta kunci Pembaruan alih-alih Penguncian bersama. Kunci Pembaruan adalah kunci asimetris yang digunakan untuk mencegah bentuk kebuntuan umum yang terjadi ketika beberapa transaksi mengunci sumber daya terkait potensi pembaruan di lain waktu.

Matriks kompatibilitas kunci dapat ditemukan dalam tabel berikut:

Permintaan\Diberikan Tidak ada Bersama Pembaruan Eksklusif
Bersama Tidak ada konflik Tidak ada konflik Konflik Konflik
Pembaruan Tidak ada konflik Tidak ada konflik Konflik Konflik
Eksklusif Tidak ada konflik Konflik Konflik Konflik

Argumen waktu tunggu dalam API Koleksi Andal digunakan untuk deteksi kebuntuan. Misalnya, dua transaksi (T1 dan T2) mencoba membaca dan memperbarui K1. Keduanya mungkin mengalami kebuntuan, karena akhirnya memiliki Penguncian bersama. Dalam hal ini, satu atau kedua operasi akan kehabisan waktu. Dalam skenario ini, kunci Pembaruan dapat mencegah kebuntuan seperti itu.

Langkah berikutnya