Corak Pemilihan Pemimpin
Terokai cara Redis boleh digunakan untuk memudahkan pemilihan pemimpin dalam perkhidmatan teragih bagi mencapai ketersediaan tinggi.
Corak Pemilihan Pemimpin ialah pelajaran Pengcachingan & Pemesejan Redis (Pub/Sub, Streams) percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Pengcachingan & Pemesejan Redis (Pub/Sub, Streams), dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Pengcachingan & Pemesejan Redis (Pub/Sub, Streams) merangkumi sejumlah 4 pelajaran.
Mengapa Pemilihan Ketua?
Dalam sistem teragih, beberapa tika aplikasi anda berjalan serentak. Kadangkala, anda memerlukan satu tika untuk melaksanakan tugas tertentu, seperti memproses baris gilir atau menyelaraskan kemas kini, bagi mengelakkan konflik atau kerja pendua.
Di sinilah pemilihan ketua digunakan. Ia ialah proses apabila nod teragih bersetuju untuk memilih satu nod sebagai "ketua" pada satu-satu masa.
Redis untuk Penyelarasan Pemilihan
Redis ialah pilihan yang sangat baik untuk melaksanakan pemilihan ketua kerana kelajuannya, operasi atomik, dan jaminan ketekalan yang kukuh untuk operasi satu kunci.
- Operasi Atomik: Arahan seperti
SETNXatauSET ... NX EXdilaksanakan sepenuhnya atau tidak dilaksanakan langsung, sekali gus mencegah keadaan perlumbaan. - Kegigihan: Jika dikonfigurasikan, Redis boleh mengekalkan data, menjadikan keadaan pemilihan ketua lebih tahan lama.
- Keadaan Berpusat: Menyediakan sumber kebenaran tunggal yang dipersetujui tentang identiti ketua semasa.
Pemilihan Asas: SETNX
Cara paling mudah untuk mencuba pemilihan ketua dengan Redis adalah dengan menggunakan arahan SETNX. SETNX key value ("Set if Not eXists") menetapkan kunci hanya jika kunci itu belum wujud. Jika kunci berjaya ditetapkan, arahan ini mengembalikan 1; jika tidak, 0.
Proses pertama yang berjaya menetapkan kunci ketua akan menjadi ketua.
import redis
import time
# Connect to Redis
r = redis.Redis(decode_responses=True)
LEADER_KEY = "my_app:leader_v1"
MY_ID = "process_A" # Unique ID for this process
print(f"Process {MY_ID} attempting to become leader...")
# Try to acquire leadership
if r.setnx(LEADER_KEY, MY_ID):
print(f"Process {MY_ID} is now the leader!")
# Simulate leader work
time.sleep(3) # Work for 3 seconds
# In a real scenario, the leader would perform tasks
# and eventually release leadership or renew its lease.
r.delete(LEADER_KEY) # Release leadership
print(f"Process {MY_ID} released leadership.")
el:
current_leader = r.get(LEADER_KEY)
print(f"Process {MY_ID}: Another process ({current_leader}) is already the leader.")Masalah: Kegagalan Ketua
Pertimbangkan pendekatan asas SETNX. Apakah yang berlaku jika ketua yang dipilih (process_A daripada contoh sebelumnya) terhenti sejurus selepas menetapkan LEADER_KEY, tetapi sebelum berpeluang memadamkannya?
LEADER_KEY akan kekal dalam Redis tanpa had, lalu menghalang proses lain daripada menjadi ketua. Keadaan ini mewujudkan kebuntuan kekal dan menjejaskan ketersediaan tinggi sistem teragih anda.
TTL untuk Toleransi Kesalahan
Untuk mencegah kebuntuan, kita mesti menambahkan masa tamat tempoh (Time-To-Live atau TTL) pada kunci ketua. Dengan ini, walaupun ketua terhenti, kunci kepimpinannya akhirnya akan tamat tempoh dan membolehkan pemilihan baharu.
Kita boleh menggunakan arahan EXPIRE key seconds sejurus selepas SETNX untuk menetapkan TTL.
import redis
import time
r = redis.Redis(decode_responses=True)
LEADER_KEY = "my_app:leader_v2"
MY_ID = "process_B"
LOCK_TTL = 10 # seconds
print(f"Process {MY_ID} attempting to become leader...")
if r.setnx(LEADER_KEY, MY_ID):
r.expire(LEADER_KEY, LOCK_TTL) # Set expiration
print(f"Process {MY_ID} is now the leader with TTL {LOCK_TTL}s!")
# Simulate leader work for a short period
time.sleep(LOCK_TTL // 2)
print(f"Process {MY_ID} completed its short task.")
if r.get(LEADER_KEY) == MY_ID: # Check if still leader before deleting
r.delete(LEADER_KEY)
print(f"Process {MY_ID} released leadership.")
else:
print(f"Process {MY_ID}: Leadership lost or expired already.")
el:
current_leader = r.get(LEADER_KEY)
print(f"Process {MY_ID}: Another process ({current_leader}) is already the leader.")Keadaan Perlumbaan SETNX + EXPIRE
Walaupun penambahan EXPIRE lebih baik, keadaan perlumbaan kritikal masih wujud! Bayangkan urutan berikut:
- Proses A memanggil
SETNX LEADER_KEY process_A. Arahan ini berjaya (mengembalikan1). - Proses A kemudiannya terhenti sebelum dapat memanggil
EXPIRE LEADER_KEY 10.
LEADER_KEY telah ditetapkan, tetapi tanpa TTL, lalu membawa kepada situasi kebuntuan yang sama seperti sebelumnya. Kita memerlukan cara atomik untuk menetapkan kunci dan tamat tempohnya.
SET Atomik untuk Keteguhan
Redis menyediakan arahan SET yang berkuasa dan atomik untuk menggabungkan penetapan nilai kunci dengan tamat tempohnya. Formatnya ialah SET key value [EX seconds | PX milliseconds] [NX | XX].
NX: Hanya menetapkan kunci jika kunci itu belum wujud (sepertiSETNX).EX seconds: Menetapkan masa tamat tempoh dalam saat.PX milliseconds: Menetapkan masa tamat tempoh dalam milisaat.
Menggunakan SET LEADER_KEY MY_ID NX EX 10 memastikan kedua-dua syarat (kunci belum wujud dan tamat tempoh) digunakan secara atomik.
import redis
import time
r = redis.Redis(decode_responses=True)
LEADER_KEY = "my_app:leader_v3"
MY_ID = "process_C"
LOCK_TTL = 10 # seconds
print(f"Process {MY_ID} attempting to become leader atomically...")
# Try to acquire leadership using atomic SET with NX and EX
# This command returns True if the key was set, False otherwise.
if r.set(LEADER_KEY, MY_ID, nx=True, ex=LOCK_TTL):
print(f"Process {MY_ID} is now the leader with atomic TTL {LOCK_TTL}s!")
# Simulate leader work
time.sleep(LOCK_TTL // 2)
print(f"Process {MY_ID} still working as leader.")
if r.get(LEADER_KEY) == MY_ID: # Important: check value before deleting!
r.delete(LEADER_KEY)
print(f"Process {MY_ID} gracefully released leadership.")
else:
print(f"Process {MY_ID}: Leadership lost or expired already.")
el:
current_leader = r.get(LEADER_KEY)
print(f"Process {MY_ID}: Another process ({current_leader}) is already the leader.")Mengekalkan Kepimpinan: Isyarat Denyutan
Selepas ketua dipilih menggunakan arahan SET atomik, ketua itu perlu memberi isyarat secara berkala bahawa ia masih aktif dan mampu memimpin. Isyarat ini dipanggil "denyutan".
Denyutan melibatkan ketua menyegarkan masa tamat tempoh kunci kepimpinannya sebelum kunci itu tamat tempoh (contohnya, menggunakan EXPIRE LEADER_KEY NEW_TTL atau PEXPIRE). Jika ketua gagal menghantar denyutan, kuncinya akan tamat tempoh dan mencetuskan pemilihan baharu dalam kalangan proses yang masih ada.
Uji Pemahaman Anda
Manakah antara berikut merupakan manfaat menggunakan arahan SET key value NX EX seconds atomik untuk pemilihan ketua berbanding arahan SETNX dan EXPIRE yang berasingan?
Ulang Kaji: Pemilihan Ketua
Kita telah meneroka cara Redis memudahkan pemilihan ketua dalam sistem teragih. Kita bermula dengan SETNX asas, mengenal pasti kelemahannya, dan mempelajari cara memperbaikinya dengan EXPIRE.
Yang penting, kita menemui arahan SET key value NX EX seconds yang teguh dan atomik untuk mencegah keadaan perlumbaan serta memastikan kunci sentiasa mempunyai tamat tempoh. Akhir sekali, kita menyentuh kepentingan denyutan ketua untuk mengekalkan kepimpinan yang aktif.
Pelajari Pengcachingan & Pemesejan Redis (Pub/Sub, Streams) dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 12
- Pelajaran
- 48
Soalan Lazim
Adakah pelajaran “Corak Pemilihan Pemimpin” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Pengcachingan & Pemesejan Redis (Pub/Sub, Streams), termasuk “Corak Pemilihan Pemimpin”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Pengcachingan & Pemesejan Redis (Pub/Sub, Streams) merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Corak Pemilihan Pemimpin”?
Terokai cara Redis boleh digunakan untuk memudahkan pemilihan pemimpin dalam perkhidmatan teragih bagi mencapai ketersediaan tinggi. Anda berlatih Pengcachingan & Pemesejan Redis (Pub/Sub, Streams) menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Pengcachingan & Pemesejan Redis (Pub/Sub, Streams)?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Pengcachingan & Pemesejan Redis (Pub/Sub, Streams) di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Corak Pemilihan Pemimpin” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Pengcachingan & Pemesejan Redis (Pub/Sub, Streams) ini?
Ya. Setiap pelajaran Pengcachingan & Pemesejan Redis (Pub/Sub, Streams) menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Kunci Teragih dengan Redis
- Corak Pemilihan Pemimpin
- Redis sebagai Perkhidmatan Penyelarasan
- Pengehadan Kadar Teragih