Кога неколку работници делат пул преку 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 го зголемува резултатот на избраниот член за еден за следното доделување.

Определете што значи резултатот

Ова брои доделувања, вклучително доделување чие мрежно барање подоцна не успева. Не мери задоцнување, успешни барања или работа што е во тек. Сè уште е можно постојано избирање на единствениот подобен член; скриптата не го резервира исклучиво.

Одржувајте ја подобноста со правилата за здравје и политика на пулот. Ако отстраните член и подоцна го вратите, одлучете дали да се задржи неговиот историски број. Стартувањето на вратено прокси од нула може да ги концентрира доделувањата на него додека не го достигне.

Политиката на најмала истовременост бара друг животен циклус, вклучително завршување и справување со напуштени задачи. Не толкувајте го овој кумулативен бројач како тој животен циклус.

Поврзани статии