Атамна размеркаваць найменш выкарыстоўваемы проксі ў Redis
Выкарыстайце ўпарадкаванае мноства і кароткі скрыпт Lua, каб выбіраць і павялічваць лік размеркаванняў проксі паміж працоўнымі.
Калі некалькі працоўных сумесна выкарыстоўваюць пул праз Redis, упарадкаванае мноства можа рэалізаваць простую палітыку: выбраць прыдатны проксі з найменшай колькасцю зафіксаваных размеркаванняў. Захоўвайце ідэнтыфікатар проксі як элемент, а колькасць яго размеркаванняў як бал.
Для пула, які абслугоўвае дазволеныя публічныя запыты, спіс бясплатных проксі можа даць кандыдатаў у канчатковыя пункты для ацэнкі па правілах прыдатнасці гэтага пула. Ініцыялізуйце прыдатныя элементы ўзгодненым пачатковым лікам. Затым зрабіце выбар і павелічэнне адной сервернай аперацыяй:
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 chosenПерадайце ключ упарадкаванага мноства як адзіны ключавы аргумент скрыпта праз інтэрфейс EVAL вашага кліента Redis. Пусты пул дае вынік null, які праграма павінна апрацаваць, не робячы запыту.
Навошта аб'ядноўваць дзве каманды?
Асобныя чытанні і павелічэнні дазваляюць двум працоўным убачыць аднолькавы мінімум, перш чым хто-небудзь яго абновіць. Redis выконвае скрыпт Lua атамна, таму іншы працоўны не можа ўставіць выбар паміж чытаннем і павелічэннем гэтага скрыпта. Трымайце скрыпт кароткім, бо яго выкананне блакуе іншую працу Redis.
ZRANGE вяртае найніжэйшы бал першым; роўныя балы вырашаюцца парадкам элементаў, а не выпадкова. ZINCRBY павялічвае бал выбранага элемента на адзінку для наступнага размеркавання.
Вызначце, што значыць бал
Гэта лічыць размеркаванні, уключаючы размеркаванне, сеткавы запыт якога пазней не ўдасца. Ён не вымярае затрымку, паспяховыя запыты ці працу, якая зараз выконваецца. Паўторны выбар адзінага прыдатнага элемента ўсё яшчэ магчымы; скрыпт не рэзервуе яго выключна.
Падтрымлівайце прыдатнасць з дапамогай правілаў здароўя і палітыкі пула. Калі вы выдаліце элемент, а потым аднавіце яго, вырашыце, ці захоўваць яго гістарычны лік. Запуск адноўленага проксі з нуля можа сканцэнтраваць на ім размеркаванні, пакуль ён даганяе.
Палітыка найменшай адначасовасці патрабуе іншага жыццёвага цыкла, уключаючы апрацоўку завяршэння і закінутых задач. Не тлумачце гэты кумулятыўны лічыльнік як такі жыццёвы цыкл.