Бир нече жумушчу 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

Иреттелген топтомдун ачкычын скрипттин жалгыз ачкыч аргументи катары Redis кардарыңыздын EVAL интерфейси аркылуу өткөрүңүз. Бош пул null натыйжа берет, колдонмо аны суроо жөнөтпөстөн иштетүүгө тийиш.

Эмне үчүн эки буйрукту бириктирүү керек?

Өзүнчө окуу жана көбөйтүү эки жумушчуга бири жаңыртпай туруп эле бирдей минимумду көрүүгө мүмкүндүк берет. Redis Lua скриптин атомдук түрдө аткарат, ошондуктан башка жумушчу бул скрипттин окуусу менен көбөйтүүсүнүн ортосуна тандоо киргизе албайт. Скрипти кыска кармаңыз, анткени анын аткарылышы башка Redis ишин бөгөттөйт.

ZRANGE эң төмөнкү упайды биринчи кайтарат; тең упайлар мүчөлөрдүн тартиби менен чечилет, туш келди эмес. ZINCRBY тандалган мүчөнүн упайын кийинки бөлүштүрүү үчүн бирге көбөйтөт.

Упай эмнени билдирерин аныктаңыз

Бул бөлүштүрүүлөрдү санайт, анын ичинде тармактык суроосу кийин ийгиликсиз болгон бөлүштүрүү да бар. Ал кечигүүнү, ийгиликтүү суроолорду же учурда аткарылып жаткан ишти өлчөбөйт. Жалгыз ылайыктуу мүчөнү кайра-кайра тандоо дагы эле мүмкүн; скрипт аны өзүнө гана бөлүп койбойт.

Ылайыктуулукту пулдун ден соолук жана саясат эрежелери менен кармаңыз. Эгер мүчөнү алып салып, кийин калыбына келтирсеңиз, анын тарыхый санын сактоо керекпи, ошону чечиңиз. Калыбына келтирилген проксини нөлдөн баштоо ал кууп жеткенче бөлүштүрүүлөрдү ага топтоп коюшу мүмкүн.

Эң аз бир убактагы саясат башка жашоо циклин талап кылат, анын ичинде аяктоо жана ташталган иштерди иштетүү бар. Бул жыйынды эсептегичти ошол жашоо цикли деп түшүндүрбөңүз.

Тектеш макалалар