Cấp phát nguyên tử proxy ít được dùng nhất trong Redis
Dùng tập có thứ tự và một script Lua ngắn để chọn và tăng số lần cấp phát của proxy giữa các worker.
Khi nhiều worker chia sẻ một nhóm qua Redis, tập có thứ tự có thể thực hiện một chính sách đơn giản: chọn proxy đủ điều kiện có ít lần cấp phát được ghi nhận nhất. Lưu định danh proxy làm thành viên và số lần cấp phát của nó làm điểm.
Với một nhóm phục vụ các yêu cầu công khai được phép, danh sách proxy miễn phí có thể cung cấp các ứng viên điểm cuối để đánh giá theo quy tắc đủ điều kiện của nhóm đó. Khởi tạo các thành viên đủ điều kiện với số đếm ban đầu đã thống nhất. Sau đó gộp việc chọn và tăng thành một thao tác phía máy chủ:
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 chosenTruyền khóa của tập có thứ tự làm đối số khóa duy nhất của script qua giao diện EVAL của ứng dụng khách Redis. Nhóm rỗng tạo ra kết quả null mà ứng dụng phải xử lý mà không gửi yêu cầu.
Vì sao kết hợp hai lệnh?
Đọc và tăng riêng rẽ cho phép hai worker thấy cùng một mức tối thiểu trước khi bất kỳ bên nào cập nhật. Redis thực thi script Lua một cách nguyên tử, nên worker khác không thể chèn lựa chọn vào giữa lần đọc và lần tăng của script này. Giữ script ngắn vì việc thực thi nó chặn công việc khác của Redis.
ZRANGE trả về điểm thấp nhất trước; điểm bằng nhau được giải quyết theo thứ tự thành viên, không ngẫu nhiên. ZINCRBY tăng điểm của thành viên được chọn thêm một cho lần cấp phát kế tiếp.
Định nghĩa ý nghĩa của điểm
Đây là đếm số lần cấp phát, kể cả lần cấp phát mà yêu cầu mạng sau đó thất bại. Nó không đo độ trễ, yêu cầu thành công hay công việc đang diễn ra. Vẫn có thể chọn lặp lại thành viên đủ điều kiện duy nhất; script không giữ riêng nó.
Duy trì điều kiện đủ bằng quy tắc sức khỏe và chính sách của nhóm. Nếu bạn xóa một thành viên rồi khôi phục sau, hãy quyết định có giữ số đếm lịch sử của nó hay không. Khởi động proxy được khôi phục từ 0 có thể tập trung cấp phát vào nó trong lúc nó bắt kịp.
Chính sách đồng thời thấp nhất cần một vòng đời khác, gồm hoàn tất và xử lý công việc bị bỏ dở. Đừng hiểu bộ đếm tích lũy này là vòng đời đó.