Data intiKoordinasi

Kunci Terdistribusi

Pastikan hanya satu worker yang menjalankan pekerjaan pada satu waktu, dengan kunci yang kedaluwarsa sendiri dan dilepas dengan aman oleh pemiliknya.

perintah untuk memperoleh
1
perintah untuk melepas dengan aman
1
skrip Lua
0
Langkah 1 dari 5
Worker A mengambil kunci

NX mengambilnya hanya jika tidak ada yang memegang. PX 30000 membuatnya kedaluwarsa dalam 30 detik jika A mati.

Sesi contohplaying
# Worker A mengambil kunci
hotkv> SET lock:billing-run tok-a81f NX PX 30000
OK

Panduan beranimasi dengan perintah HotKV yang sebenarnya dan balasan contoh. Klik langkah mana pun untuk melompat ke sana. Perintah dan balasan tetap dalam bahasa Inggris, persis seperti yang Anda ketik dan lihat di HotKV.

Masalahnya

Cron job di beberapa mesin, penangkapan pembayaran, dan pembangunan ulang cache tidak boleh berjalan dua kali sekaligus. Kunci tanpa kedaluwarsa ditahan selamanya ketika pemiliknya crash, dan melepas kunci dengan DEL biasa dapat menghapus kunci milik orang lain setelah kunci Anda kedaluwarsa.

Cara HotKV menanganinya

SET dengan NX dan PX memperoleh kunci hanya jika tidak ada yang memegangnya, dan memberinya kedaluwarsa agar pemilik yang crash tidak dapat menahannya selamanya. Setiap pemilik menyimpan token acak sebagai nilai. DELEX dengan IFEQ menghapus kunci hanya jika masih berisi token Anda, yaitu pelepasan aman yang dulu memerlukan skrip Lua.

Langkah demi langkah

Apa yang terjadi, perintah demi perintah

  1. 01

    Worker A mengambil kunci

    NX mengambilnya hanya jika tidak ada yang memegang. PX 30000 membuatnya kedaluwarsa dalam 30 detik jika A mati.

    SET lock:billing-run tok-a81f NX PX 30000
  2. 02

    Worker B ditolak

    Kunci sedang dipegang, jadi B mendapat nil dan melewati eksekusi ini.

    SET lock:billing-run tok-b22c NX PX 30000
  3. 03

    A mengerjakan tugas

    Hanya satu worker yang menjalankan pekerjaan penagihan.

    PTTL lock:billing-run
  4. 04

    Lepas hanya kunci Anda sendiri

    DELEX menghapus kunci hanya jika nilainya masih token A.

    DELEX lock:billing-run IFEQ tok-a81f
  5. 05

    Token yang salah tidak melakukan apa-apa

    Jika A terlalu lambat dan B kini memegang kunci, pelepasan oleh A akan membiarkan kunci B.

    DELEX lock:billing-run IFEQ tok-stale
Di mana ini cocok

Skenario dunia nyata

Pekerjaan terjadwal

Cron yang sama berjalan di setiap instance, dan kunci memastikan tepat satu dari mereka yang mengerjakannya.

Pembayaran

Operasi penangkapan dan pengembalian dana pada satu pesanan diserialkan agar tidak pernah tumpang tindih.

Perlindungan cache stampede

Hanya satu permintaan yang membangun ulang entri cache yang mahal sementara yang lain menunggu atau menyajikan nilai basi.

Bawaan

Yang Anda dapatkan

Peroleh dengan kedaluwarsa

SET NX PX mengambil kunci hanya jika bebas, dengan timeout.

SETNXPX

Pelepasan aman

DELEX IFEQ menghapus hanya jika nilainya cocok dengan token Anda.

DELEX

Perpanjang selama bekerja

Periksa waktu tersisa dan perpanjang untuk pekerjaan panjang.

PTTLPEXPIRE

Bandingkan berdasarkan digest

Untuk nilai besar, DELEX IFDEQ membandingkan digest, bukan seluruh nilai.

DIGESTIFDEQ
Referensi:SETDELEXDIGEST

Pertanyaan umum

Mengapa tidak langsung DEL kuncinya?

Jika kunci Anda kedaluwarsa dan worker lain mengambilnya, DEL biasa akan menghapus kunci mereka. DELEX IFEQ hanya menghapusnya selama masih berisi token Anda.

Berapa lama kedaluwarsanya?

Lebih lama dari waktu yang biasanya diperlukan pekerjaan. Untuk pekerjaan panjang, perpanjang kedaluwarsa secara berkala selama Anda masih memegang kunci.

Apakah saya memerlukan Lua untuk pelepasan aman?

Tidak. DELEX melakukan perbandingan dan penghapusan dalam satu perintah.

Kasus penggunaan terkait

Coba pada beban kerja Anda sendiri

HotKV berbicara protokol Redis, jadi Anda dapat mengarahkan klien yang sudah ada ke HotKV dan menjalankan perintah yang sama.