Pan fydd sawl gweithiwr yn rhannu pwll drwy Redis, gall set drefnus weithredu polisi syml: dewis y procsy cymwys sydd â'r nifer lleiaf o ddyrannu cofnodedig. Storiwch ddynodwr procsy fel yr aelod a'i gyfrif dyrannu fel y sgôr.

Ar gyfer pwll sy'n gwasanaethu ceisiadau cyhoeddus a ganiateir, gall y rhestr procsïau am ddim ddarparu ymgeiswyr pen draw i'w gwerthuso o dan reolau cymhwyster y pwll hwnnw. Cychwynnwch aelodau cymwys â chyfrif cychwynnol y cytunwyd arno. Yna gwnewch y dewis a'r cynyddiad yn un weithred ar y gweinydd:

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

Trosglwyddwch allwedd y set drefnus fel unig ddadl allwedd y sgript drwy ryngwyneb EVAL eich cleient Redis. Mae pwll gwag yn cynhyrchu canlyniad null y mae'n rhaid i'r ap ei drin heb wneud cais.

Pam cyfuno'r ddau orchymyn?

Mae darlleniadau a chynyddiadau ar wahân yn gadael i ddau weithiwr weld yr un lleiafswm cyn i'r naill na'r llall ei ddiweddaru. Mae Redis yn gweithredu sgript Lua yn atomig, felly ni all gweithiwr arall fewnosod dewis rhwng darlleniad a chynyddiad y sgript hon. Cadwch y sgript yn fer oherwydd mae ei gweithrediad yn rhwystro gwaith Redis arall.

Mae ZRANGE yn dychwelyd y sgôr isaf yn gyntaf; mae sgorau cyfartal yn cael eu datrys yn ôl trefn aelodau, nid ar hap. Mae ZINCRBY yn codi sgôr yr aelod a ddewiswyd o un ar gyfer y dyrannu nesaf.

Diffiniwch beth y mae'r sgôr yn ei olygu

Mae hyn yn cyfrif dyranniadau, gan gynnwys dyrannu y bydd ei gais rhwydwaith yn methu yn ddiweddarach. Nid yw'n mesur oedi, ceisiadau llwyddiannus na gwaith sydd ar y gweill ar hyn o bryd. Mae dal yn bosibl dewis yr unig aelod cymwys dro ar ôl tro; nid yw'r sgript yn ei gadw'n gyfyngedig.

Cynhelwch gymhwyster gan ddefnyddio rheolau iechyd a pholisi'r pwll. Os byddwch yn tynnu aelod ac yn ei adfer yn ddiweddarach, penderfynwch a ddylid cadw ei gyfrif hanesyddol. Gall cychwyn procsy adferedig ar sero grynhoi dyranniadau arno wrth iddo ddal i fyny.

Mae angen cylch bywyd gwahanol ar bolisi lleiaf cydamserol, gan gynnwys cwblhau a thrin swyddi a adawyd. Peidiwch â dehongli'r rhifydd cronnus hwn fel y cylch bywyd hwnnw.

Erthyglau cysylltiedig