Giapod-apod nga pag-lock gamit ang Redis

Hoy Habr!

Karon among gidala sa imong atensyon ang usa ka paghubad sa usa ka komplikado nga artikulo bahin sa pagpatuman sa giapod-apod nga pag-lock gamit ang Redis ug gidapit ka sa paghisgot bahin sa mga palaaboton sa Redis isip usa ka hilisgutan. Pagtuki sa Redlock algorithm nga gipangutana gikan ni Martin Kleppmann, tagsulat sa libro "Taas nga Load Applications", gihatag dinhi.

Ang giapod-apod nga locking usa ka mapuslanon kaayo nga primitive nga gigamit sa daghang mga palibot diin ang lainlaing mga proseso kinahanglan molihok sa gipaambit nga mga kapanguhaan sa usa ka paagi nga eksklusibo sa usag usa.

Adunay ubay-ubay nga mga librarya ug mga post didto nga naghulagway kung unsaon pagpatuman ang DLM (Distributed Lock Manager) gamit ang Redis, apan ang matag librarya nagkinahanglan og lain-laing pamaagi ug ang mga garantiya nga ilang gihatag medyo huyang kon itandi sa unsa ang makab-ot sa gamay nga mas sopistikado nga disenyo.

Niini nga artikulo atong sulayan ang paghulagway sa usa ka conditional canonical algorithm nga nagpakita kung giunsa pagpatuman ang giapod-apod nga locking gamit ang Redis. Maghisgot kami bahin sa usa ka algorithm nga gitawag Redlock, kini nagpatuman sa usa ka distributed lock manager ug, sa among opinyon, kini nga algorithm mas luwas kay sa naandan nga single-instance nga pamaagi. Kami nanghinaut nga ang komunidad mag-analisa niini, maghatag og feedback, ug gamiton kini isip sinugdanan sa mas komplikado o alternatibong mga proyekto.

Pagpatuman

Sa wala pa ipadayon ang paghulagway sa algorithm, naghatag kami daghang mga link sa mga andam nga pagpatuman. Mahimo silang gamiton alang sa pakisayran.

  • Redlock-rb (implementasyon alang kang Ruby). Adunay usab tinidor Redlock-rb, nga nagdugang usa ka pakete (mutya) alang sa kadali sa pag-apod-apod, ug dili lamang alang niana.
  • Redlock-py (Pagpatuman sa Python).
  • Airedlock (pagpatuman alang sa Asyncio Python).
  • Redlock-php (implementasyon para sa PHP).
  • PHPRedisMutex (laing pagpatuman para sa PHP)
  • cheprasov/php-redis-lock (PHP library para sa mga kandado)
  • Redsync (implementasyon para sa Go).
  • Redisson (pagpatuman alang sa Java).
  • Redis:: DistLock (pagpatuman alang sa Perl).
  • Redlock-cpp (pagpatuman alang sa C++).
  • Redlock-cs (pagpatuman para sa C#/.NET).
  • RedLock.net (pagpatuman para sa C#/.NET). Uban ang suporta alang sa async ug lock extension.
  • ScarletLock (pagpatuman alang sa C# .NET nga adunay ma-configure nga tindahan sa datos)
  • Redlock4Net (pagpatuman para sa C# .NET)
  • node-redlock (pagpatuman alang sa NodeJS). Naglakip sa suporta alang sa pagpalapad sa mga kandado.

Mga Garantiya sa Seguridad ug Pagkaanaa

Imodelo namo ang among desinyo nga adunay tulo lang ka mga kabtangan nga among gihunahuna nga naghatag sa minimum nga mga garantiya nga gikinahanglan aron epektibong magamit ang gipang-apod-apod nga locking.

  1. Panag-iya sa seguridad: Mutual exclusion. Sa bisan unsang oras, usa ra ka kliyente ang makakupot sa kandado.
  2. Availability Property A: Walay deadlocks. Kanunay nga posible nga makakuha usa ka kandado sa katapusan, bisan kung ang kliyente nga nag-lock sa kapanguhaan napakyas o naa sa lain nga bahin sa disk.
  3. Availability Property B: Fault Tolerance. Hangtud nga ang kadaghanan sa mga Redis node nagdagan, ang mga kliyente makahimo sa pag-angkon ug pagpagawas sa mga kandado.

Ngano nga ang pagpatuman base sa pagkaayo sa kapakyasan dili igo sa kini nga kaso
Aron masabtan kung unsa ang atong pauswagon, atong analisahon ang kasamtangan nga kahimtang sa kadaghanan nga gipang-apod-apod nga mga locking library base sa Redis.

Ang pinakasimple nga paagi sa pag-lock sa usa ka kapanguhaan gamit ang Redis mao ang paghimo og usa ka yawe sa pananglitan. Kasagaran, ang usa ka yawe gihimo uban ang usa ka limitado nga kinabuhi, kini makab-ot gamit ang expire nga bahin nga gihatag sa Redis, mao nga sa madugay o sa madali kini nga yawe gipagawas (property 2 sa among lista). Kung kinahanglan nga buhian sa kliyente ang kapanguhaan, gitangtang niini ang yawe.

Sa una nga pagtan-aw, kini nga solusyon maayo kaayo, apan adunay problema: ang among arkitektura nagmugna usa ka punto sa kapakyasan. Unsa ang mahitabo kung ang host Redis nga pananglitan mapakyas? Magdugang ta ug ulipon unya! Ug gamiton namo kini kung dili magamit ang presenter. Ikasubo, kini nga kapilian dili mahimo. Pinaagi sa pagbuhat niini, dili kita makahimo sa husto nga pagpatuman sa mutual exclusion kabtangan nga atong gikinahanglan aron sa pagsiguro sa seguridad, tungod kay ang replikasyon sa Redis mao ang asynchronous.

Dayag, sa ingon nga modelo adunay kahimtang sa lumba:

  1. Ang Kliyente A nakakuha og kandado sa agalon.
  2. Ang agalon mapakyas sa dili pa ang yawe nga pagsulod ibalhin ngadto sa ulipon.
  3. Ang sumusunod gipataas ngadto sa lider.
  4. Ang kliyente B nakakuha og kandado sa parehas nga kapanguhaan nga gi-lock na ni A. PAGLABAG SA SEGURIDAD!

Usahay kini hingpit nga normal nga sa espesyal nga mga kahimtang, sama sa pagkapakyas, daghang mga kliyente ang makagunit sa kandado sa parehas nga oras. Sa ingon nga mga kaso, ang usa ka solusyon nga nakabase sa replikasyon mahimong magamit. Kung dili, girekomenda namon ang solusyon nga gihulagway sa kini nga artikulo.

Husto nga pagpatuman sa usa ka higayon

Sa dili pa mosulay sa pagbuntog sa mga kakulangan sa usa ka-instance configuration nga gihulagway sa ibabaw, atong masabtan kon sa unsang paagi sa husto nga paagi sa pagdumala sa niini nga yano nga kaso, tungod kay kini nga solusyon mao ang tinuod nga balido sa mga aplikasyon diin ang usa ka lumba kahimtang mao ang madawat sa matag karon ug unya, ug usab tungod kay blocking sa usa ka Ang usa ka pananglitan nagsilbi nga basehan nga gigamit sa gipang-apod-apod nga algorithm nga gihulagway dinhi.

Aron makakuha og kandado, buhata kini:

SET resource_name my_random_value NX PX 30000

Kini nga sugo nag-instalar sa usa ka yawe lamang kung kini wala na (NX option), nga adunay balido nga panahon sa 30000 milliseconds (PX option). Ang yawe gibutang sa "myrandomvalue" Kini nga kantidad kinahanglan nga talagsaon sa tanan nga mga kliyente ug tanan nga mga hangyo sa kandado.
Sa panguna, ang usa ka random nga kantidad gigamit aron luwas nga buhian ang kandado, nga adunay usa ka script nga nagsulti sa Redis: kuhaa lang ang yawe kung kini naglungtad ug ang kantidad nga gitipigan niini mao gyud ang gipaabut. Kini makab-ot gamit ang mosunod nga Lua script:

if redis.call("get",KEYS[1]) == ARGV[1] then
    return redis.call("del",KEYS[1])
else
    return 0
end

Importante kini aron dili matangtang ang kandado nga gikuptan sa laing kliyente. Pananglitan, ang usa ka kliyente mahimong makakuha og kandado, unya ma-lock sa pipila ka operasyon nga molungtad og mas dugay kaysa sa unang kandado (aron ang yawe adunay panahon nga ma-expire), ug unya tangtangon ang kandado nga gibutang sa ubang kliyente.
Ang paggamit sa usa ka yano nga DEL dili luwas tungod kay ang usa ka kliyente makatangtang sa usa ka kandado nga gikuptan sa laing kliyente. Sa kasukwahi, kung gamiton ang script sa ibabaw, ang matag lock "gipirmahan" gamit ang usa ka random nga hilo, mao nga ang kliyente nga nagbutang niini kaniadto ang makatangtang niini.

Unsa man kini nga random string? Nagtuo ko nga kini kinahanglan nga 20 bytes gikan sa / dev / urandom, apan makit-an nimo ang dili kaayo mahal nga mga paagi aron mahimo ang hilo nga talagsaon nga igo alang sa imong mga katuyoan. Pananglitan, maayo nga magsabwag sa RC4 sa /dev/urandom ug dayon makamugna og pseudo-random nga sapa gikan niini. Ang mas simple nga solusyon naglakip sa kombinasyon sa unix time sa microsecond nga resolusyon ug ang client ID; dili kini ingon ka segurado, apan kini lagmit naa sa buluhaton sa kadaghanan nga mga konteksto.

Ang oras nga atong gigamit isip sukdanan sa kinabuhi sa yawe gitawag nga "lifetime sa lock". Kini nga kantidad mao ang gidugayon sa oras sa wala pa ang kandado awtomatik nga gipagawas ug ang gidugayon sa oras nga ang usa ka kliyente kinahanglan nga makompleto ang usa ka operasyon sa wala pa ang lain nga kliyente maka-lock sa kana nga kapanguhaan, nga wala gyud makalapas sa mga garantiya sa usag usa. Kini nga garantiya limitado lamang sa usa ka piho nga bintana sa panahon, nga magsugod gikan sa higayon nga ang kandado gipalit.

Mao nga among gihisgutan ang usa ka maayong paagi sa pag-angkon ug pagpagawas sa usa ka kandado. Ang sistema (kung naghisgot kita bahin sa usa ka dili-apod-apod nga sistema nga naglangkob sa usa ug kanunay nga magamit nga pananglitan) luwas. Atong ipaabot kini nga konsepto ngadto sa usa ka distributed nga sistema, diin kita walay ingon nga mga garantiya.

Redlock nga algorithm

Ang gipang-apod-apod nga bersyon sa algorithm nagtuo nga kita adunay N Redis masters. Kini nga mga node hingpit nga independente sa usag usa, mao nga dili kami mogamit og replikasyon o bisan unsang lain nga dili klaro nga sistema sa koordinasyon. Nasakup na namon kung giunsa ang luwas nga pag-angkon ug pagpagawas sa usa ka kandado sa usa ka higayon. Gidawat namon nga ang algorithm, kung nagtrabaho sa usa ka higayon, mogamit gyud niini nga pamaagi. Sa among mga pananglitan gibutang namon ang N sa 5, nga usa ka makatarunganon nga kantidad. Busa, kinahanglan natong gamiton ang 5 ka Redis masters sa lain-laing mga computer o virtual machines aron maseguro nga sila molihok nga independente sa usag usa.

Aron makakuha og kandado, ang kliyente naghimo sa mosunod nga mga operasyon:

  1. Nakuha ang kasamtangan nga oras sa milliseconds.
  2. Sunod-sunod nga pagsulay nga makakuha usa ka kandado sa tanan nga mga kaso sa N, gamit ang parehas nga yawe nga ngalan ug mga random nga kantidad sa tanan nga mga kaso. Sa Stage 2, kung ang kliyente mag-set up sa usa ka kandado sa matag higayon nga basehan, ang kliyente mogamit usa ka paglangan aron makuha kini nga mubo ra kung itandi sa oras nga pagkahuman ang kandado awtomatiko nga gipagawas. Pananglitan, kung ang gidugayon sa pag-block 10 segundos, nan ang paglangan mahimong naa sa sakup nga ~5-50 milliseconds. Giwagtang niini ang sitwasyon diin ang kliyente mahimong magpabilin nga gibabagan sa dugay nga panahon nga naningkamot sa pagkab-ot sa usa ka napakyas nga Redis node: kung ang instance dili magamit, nan maningkamot kami nga makonektar sa laing higayon sa labing madali.
  3. Sa pagkuha sa usa ka kandado, ang kliyente kalkulado kon sa unsang paagi sa daghang mga panahon nga milabay; Aron mahimo kini, kini mokuha gikan sa aktuwal nga kantidad sa oras ang timestamp nga nakuha sa lakang 1. Kung ug kung nakuha lang sa kliyente ang kandado sa kadaghanan sa mga higayon (labing menos 3), ug ang kinatibuk-ang oras nga gikuha sa makuha ang kandado, ubos sa gidugayon sa kandado, ang kandado giisip nga nakuha.
  4. Kung nakuha ang usa ka kandado, ang gidugayon sa kandado giisip nga orihinal nga gidugayon sa kandado minus ang milabay nga oras nga gikalkula sa lakang 3.
  5. Kung ang kliyente mapakyas sa pagkuha sa lock sa usa ka rason (bisan dili kini makahimo sa pag-lock sa N/2 + 1 nga mga higayon, o ang gidugayon sa lock negatibo), nan kini mosulay sa pag-abli sa tanan nga mga higayon (bisan kadtong gihunahuna nga dili maka-block. ).

Asynchronous ba ang algorithm?

Kini nga algorithm gibase sa pangagpas nga, bisan tuod walay synchronized nga orasan diin ang tanan nga mga proseso molihok, ang lokal nga oras sa matag proseso nagaagay gihapon sa gibana-bana nga parehas nga dagan, ug ang sayup gamay ra kung itandi sa kinatibuk-ang oras nga pagkahuman ang lock. awtomatik nga gipagawas. Kini nga pangagpas susama kaayo sa sitwasyon nga kasagaran sa ordinaryo nga mga kompyuter: ang matag kompyuter adunay lokal nga orasan, ug kasagaran kita makasalig sa kamatuoran nga ang kalainan sa oras tali sa lain-laing mga kompyuter gamay ra.

Niining puntoha, kinahanglan natong mas mabinantayon nga maghimo sa atong mutual exclusion rule: mutual exclusion garantisado lamang kung ang kliyente nga nagkupot sa kandado mogawas sa panahon nga balido ang kandado (kini nga bili nakuha sa lakang 3), minus ang pipila ka oras (total sa pipila milliseconds aron mabayran ang kalainan sa oras tali sa mga proseso).

Ang mosunod nga makapaikag nga artikulo nagsulti ug dugang mahitungod sa maong mga sistema nga nagkinahanglan sa koordinasyon sa mga agwat sa panahon: Pag-abang: usa ka episyente nga fault-tolerant nga mekanismo alang sa giapod-apod nga file cache consistency.

Pagsulay pag-usab sa kapakyasan

Kung ang usa ka kliyente mapakyas sa pagkuha sa usa ka kandado, kini kinahanglan nga mosulay pag-usab human sa usa ka random nga paglangan; gihimo kini aron ma-de-synchronize ang daghang mga kliyente nga naningkamot nga makakuha usa ka kandado sa parehas nga kapanguhaan sa parehas nga oras (nga mahimong mosangput sa usa ka kahimtang nga "split-brain" diin wala’y mga mananaog). Dugang pa, ang labi ka paspas nga pagsulay sa usa ka kliyente nga makakuha usa ka kandado sa kadaghanan sa mga higayon sa Redis, labi ka pig-ot ang bintana diin mahimo’g mahitabo ang usa ka kahimtang sa split-utok (ug labi ka gamay ang panginahanglan alang sa pagsulay pag-usab). Busa, labing maayo, ang kliyente kinahanglan nga mosulay sa pagpadala sa SET nga mga sugo sa N nga mga higayon nga dungan nga naggamit sa multiplexing.

Angayan nga hatagan og gibug-aton dinhi kung unsa ka hinungdanon alang sa mga kliyente nga napakyas sa pag-angkon sa kadaghanan sa mga kandado nga buhian ang (partially) nakuha nga mga kandado, aron dili na sila maghulat nga ma-expire ang yawe sa dili pa makuha pag-usab ang kandado sa kapanguhaan. (bisan kung mahitabo ang pagkabahinbahin sa network, ug ang kliyente mawad-an sa kontak sa mga higayon sa Redis, nan kinahanglan ka nga magbayad usa ka silot nga magamit samtang naghulat nga ma-expire ang yawe).

Pagpagawas sa kandado

Ang pagpagawas sa usa ka kandado usa ka yano nga operasyon nga yano nga nanginahanglan pag-abli sa tanan nga mga higayon, bisan kung ang kliyente makita nga malampuson nga naka-lock sa usa ka partikular nga higayon.

Mga Konsiderasyon sa Seguridad

Luwas ba ang algorithm? Atong sulayan paghanduraw kon unsay mahitabo sa lain-laing mga senaryo.

Sa pagsugod, atong hunahunaon nga ang kliyente nakakuha og kandado sa kadaghanan sa mga higayon. Ang matag instance adunay usa ka yawe nga adunay parehas nga kinabuhi alang sa tanan. Bisan pa, ang matag usa niini nga mga yawe gi-install sa lahi nga oras, aron kini ma-expire sa lainlaing mga oras. Apan, kung ang unang yawe na-install sa usa ka panahon nga dili mas grabe kay sa T1 (ang panahon nga atong gipili sa wala pa makontak ang unang server), ug ang kataposang yawe gi-install sa usa ka panahon nga dili mas grabe kay sa T2 (ang panahon diin ang tubag nadawat. gikan sa katapusan nga server), nan kami masaligon nga ang unang yawe sa set nga mo-expire mabuhi sa labing menos MIN_VALIDITY=TTL-(T2-T1)-CLOCK_DRIFT. Ang tanan nga uban nga mga yawe matapos sa ulahi, aron kita makasiguro nga ang tanan nga mga yawe mahimong dungan nga balido sa labing menos niining panahona.

Sa panahon nga ang kadaghanan sa mga yawe nagpabilin nga balido, laing kliyente ang dili makakuha sa kandado, tungod kay ang N/2+1 SET NX nga mga operasyon dili molampos kon ang N/2+1 nga mga yawe anaa na. Busa, kung makuha na ang usa ka kandado, imposible nga makuha kini pag-usab sa samang higayon (makalapas kini sa panag-iya sa usag dili pag-apil).
Bisan pa, gusto namon nga masiguro nga daghang mga kliyente nga naningkamot nga makakuha usa ka kandado sa parehas nga oras dili molampos sa parehas nga oras.

Kung gi-lock sa kliyente ang kadaghanan sa mga higayon sa hapit o labaw pa sa labing taas nga gidugayon sa lock, isipon niini nga dili balido ang lock ug maablihan ang mga higayon. Busa, kinahanglan lang natong tagdon ang kaso diin ang kliyente nakahimo sa pagbabag sa kadaghanan sa mga higayon sa usa ka panahon nga ubos pa sa expiration date. Niini nga kaso, mahitungod sa argumento sa ibabaw, sa panahon MIN_VALIDITY walay kliyente ang kinahanglan nga makakuha pag-usab sa kandado. Busa, daghang mga kliyente ang makahimo sa pag-lock sa N/2+1 nga mga higayon sa samang higayon (nga matapos sa kataposan sa yugto 2) lamang kung ang oras sa pag-lock sa kadaghanan mas dako pa kay sa TTL nga oras, nga naghimo sa lock nga dili balido.

Makahatag ka ba usa ka pormal nga pruweba sa seguridad, nagpaila nga adunay parehas nga mga algorithm, o makapangita usa ka bug sa taas?

Mga Konsiderasyon sa Accessibility

Ang pagkaanaa sa sistema nagdepende sa tulo ka panguna nga mga kinaiya:

  1. Awtomatikong buhian ang mga kandado (samtang ma-expire ang mga yawe): Ang mga yawe sa kadugayan magamit na usab aron magamit alang sa mga kandado.
  2. Ang kamatuoran nga ang mga kliyente kasagarang magtinabangay sa usag usa pinaagi sa pagtangtang sa mga kandado kung ang gitinguha nga kandado wala pa makuha, o nakuha ug ang trabaho nahuman; mao nga lagmit dili na kita maghulat nga ma-expire ang mga yawe aron makuha pag-usab ang kandado.
  3. Ang kamatuoran nga kung ang usa ka kliyente kinahanglan nga mosulay pag-usab sa pagkuha sa usa ka kandado, kini maghulat alang sa usa ka medyo taas nga panahon kaysa sa panahon nga gikinahanglan aron makuha ang kadaghanan nga mga kandado. Gipamenos niini ang posibilidad sa usa ka split-brain nga sitwasyon nga motumaw kung makigkompetensya alang sa mga kapanguhaan.

Bisan pa, adunay silot nga magamit nga katumbas sa TTL sa mga bahin sa network, mao nga kung adunay magkadugtong nga mga bahin, ang silot mahimong dili tino. Kini mahitabo sa matag higayon nga ang usa ka kliyente makakuha og usa ka kandado ug unya magisi sa laing bahin sa dili pa kini makapagawas niini.

Sa prinsipyo, tungod sa walay kinutuban nga mga bahin sa network, ang usa ka sistema mahimong magpabilin nga dili magamit sa usa ka walay katapusan nga yugto sa panahon.

Performance, failover ug fsync

Daghang mga tawo ang naggamit sa Redis tungod kay kinahanglan nila ang taas nga performance sa lock server sa termino sa latency nga gikinahanglan aron maangkon ug buhian ang mga kandado, ug ang gidaghanon sa mga pagkuha/pagpagawas nga mahimong makompleto kada segundo. Aron matubag kini nga kinahanglanon, adunay usa ka estratehiya sa pagpakigsulti sa mga server sa N Redis aron makunhuran ang latency. Kini usa ka multiplexing nga estratehiya (o "poor man's multiplexing", diin ang socket gibutang sa non-blocking mode, nagpadala sa tanan nga mga sugo, ug nagbasa sa mga sugo sa ulahi, nga nagtuo nga ang round-trip nga oras tali sa kliyente ug matag higayon parehas) .

Bisan pa, kinahanglan usab naton tagdon ang konsiderasyon nga may kalabotan sa dugay nga pagtipig sa datos kung maningkamot kita nga maghimo usa ka modelo nga adunay kasaligan nga pagbawi gikan sa mga kapakyasan.

Sa panguna, aron matin-aw ang isyu, ibutang naton nga gi-configure namon ang Redis nga wala’y dugay nga pagtipig sa datos. Ang kliyente nakahimo sa pag-block sa 3 sa 5 nga mga higayon. Usa sa mga higayon nga ang kliyente nakahimo sa pag-block gi-restart, ug niining higayona adunay 3 nga mga higayon pag-usab alang sa sama nga kapanguhaan, nga mahimo natong babagan, ug ang lain nga kliyente mahimo, sa baylo, maka-block sa gi-restart nga pananglitan, nga naglapas sa kabtangan sa seguridad nga nag-isip sa pagka-eksklusibo sa mga kandado.

Kung mahimo nimo ang data sa unahan (AOF), ang sitwasyon mouswag og gamay. Pananglitan, mahimo nimong i-promote ang usa ka server pinaagi sa pagpadala sa SHUTDOWN nga mando ug i-restart kini. Tungod kay ang mga operasyon sa pag-expire sa Redis gipatuman sa paagi nga ang oras nagpadayon sa pagdagayday bisan kung ang server gipalong, ang tanan namong mga kinahanglanon maayo. Normal kini basta masiguro ang normal nga pagsira. Unsa ang buhaton kung adunay pagkawala sa kuryente? Kung ang Redis gi-configure pinaagi sa default, nga adunay fsync nga pag-synchronize sa disk matag segundo, nan posible nga pagkahuman sa pag-restart wala na ang among yawe. Sa teoretikal, kung gusto namon nga garantiya ang seguridad sa lock sa bisan unsang pagsugod pag-usab, kinahanglan namon nga himuon fsync=always sa mga setting alang sa dugay nga pagtipig sa datos. Kini hingpit nga makapatay sa pasundayag, hangtod sa lebel sa mga sistema sa CP nga tradisyonal nga gigamit aron luwas nga ipatuman ang giapod-apod nga mga kandado.

Apan ang kahimtang mas maayo kaysa sa una nga pagtan-aw. Sa prinsipyo, ang seguridad sa algorithm gipreserbar tungod kay kung ang pananglitan gi-restart pagkahuman sa usa ka kapakyasan, wala na kini moapil sa bisan unsang kandado nga karon aktibo.

Aron masiguro kini, kinahanglan lang naton sigurohon nga pagkahuman sa usa ka kapakyasan ang instance magpabilin nga dili magamit sa usa ka yugto sa panahon nga labi ka gamay sa labing taas nga TTL nga among gigamit. Niining paagiha maghulat kami hangtod sa petsa sa pag-expire ug awtomatik nga pagpagawas sa tanan nga mga yawe nga aktibo sa panahon sa kapakyasan.

Ang paggamit sa nalangan nga pag-restart, sa prinsipyo posible nga makab-ot ang seguridad bisan kung wala ang bisan unsang dugay nga pagpadayon sa Redis. Hinumdumi, bisan pa, nga kini mahimong moresulta sa usa ka multa alang sa paglapas sa accessibility. Pananglitan, kung ang kadaghanan sa mga higayon mapakyas, ang sistema mahimong dili magamit sa tibuok kalibutan alang sa TTL (ug walay kapanguhaan nga mahimong babagan niining panahona).

Gidugangan namon ang pagkaanaa sa algorithm: gipalugway namon ang pag-block

Kung ang trabaho nga gihimo sa mga kliyente naglangkob sa gagmay nga mga lakang, posible nga makunhuran ang gidugayon sa default nga lock ug ipatuman ang usa ka mekanismo alang sa pagpalapad sa mga kandado. Sa prinsipyo, kung ang kliyente nagkapuliki sa pag-compute ug ang lock expiration value delikado kaayo, mahimo kang magpadala ug Lua script sa tanang higayon nga molugway sa TTL sa yawe kon ang yawe anaa pa ug ang bili niini usa gihapon ka random nga bili nga makuha sa dihang ang nakuha ang lock.

Ang usa ka kliyente kinahanglan nga maghunahuna lamang sa usa ka kandado nga maangkon pag-usab kung kini nakahimo sa pag-lock sa kadaghanan sa mga higayon sulod sa panahon sa balido.

Tinuod, sa teknikal ang algorithm dili mausab, mao nga ang labing kadaghan nga gibalikbalik nga pagsulay sa pag-angkon sa mga kandado kinahanglan nga limitado, kung dili ang mga kabtangan sa pag-access malapas.

Source: www.habr.com

Idugang sa usa ka comment