Alokasikan proksi paling jarang dipakai secara atomik di Redis
Gunakan himpunan terurut dan skrip Lua pendek untuk memilih dan menaikkan jumlah alokasi sebuah proksi di antara pekerja.
Ketika beberapa pekerja berbagi kumpulan melalui Redis, himpunan terurut dapat menerapkan kebijakan sederhana: pilih proksi yang memenuhi syarat dengan alokasi tercatat paling sedikit. Simpan pengenal proksi sebagai anggota dan jumlah alokasinya sebagai skor.
Untuk kumpulan yang melayani permintaan publik yang diizinkan, daftar proksi gratis dapat menyediakan kandidat titik akhir untuk dinilai menurut aturan kelayakan kumpulan tersebut. Inisialisasi anggota yang memenuhi syarat dengan jumlah awal yang disepakati. Lalu jadikan pemilihan dan penaikan sebagai satu operasi sisi server:
local chosen = redis.call('ZRANGE', KEYS[1], 0, 0)[1]
if not chosen then
return nil
end
redis.call('ZINCRBY', KEYS[1], 1, chosen)
return chosenTeruskan kunci himpunan terurut sebagai satu-satunya argumen kunci skrip melalui antarmuka EVAL klien Redis Anda. Kumpulan kosong menghasilkan null yang harus ditangani aplikasi tanpa membuat permintaan.
Mengapa menggabungkan kedua perintah?
Pembacaan dan penaikan terpisah memungkinkan dua pekerja melihat minimum yang sama sebelum salah satunya memperbaruinya. Redis menjalankan skrip Lua secara atomik, sehingga pekerja lain tidak dapat menyisipkan pemilihan di antara pembacaan dan penaikan skrip ini. Jaga skrip tetap pendek karena eksekusinya memblokir pekerjaan Redis lain.
ZRANGE mengembalikan skor terendah lebih dulu; skor yang sama diselesaikan menurut urutan anggota, bukan acak. ZINCRBY menaikkan skor anggota terpilih sebesar satu untuk alokasi berikutnya.
Tentukan arti skor
Ini menghitung alokasi, termasuk alokasi yang permintaan jaringannya gagal kemudian. Ini tidak mengukur latensi, permintaan berhasil, atau pekerjaan yang sedang berjalan. Memilih satu-satunya anggota yang memenuhi syarat berulang kali masih mungkin; skrip tidak memesannya secara eksklusif.
Pertahankan kelayakan dengan aturan kesehatan dan kebijakan kumpulan. Jika Anda menghapus anggota lalu memulihkannya, putuskan apakah jumlah historisnya dipertahankan. Memulai proksi yang dipulihkan dari nol dapat memusatkan alokasi padanya saat ia mengejar.
Kebijakan konkurensi terendah memerlukan siklus hidup berbeda, termasuk penyelesaian dan penanganan pekerjaan yang ditinggalkan. Jangan menafsirkan penghitung kumulatif ini sebagai siklus hidup tersebut.