Qfil imqassam bl-użu ta' Redis

Ħej Habr!

Illum aħna nġibu għall-attenzjoni tiegħek traduzzjoni ta 'artiklu kumpless dwar l-implimentazzjoni ta' qfil imqassam bl-użu ta 'Redis u nistednuk titkellem dwar il-prospetti ta' Redis bħala suġġett. Analiżi tal-algoritmu Redlock inkwistjoni minn Martin Kleppmann, awtur tal-ktieb "Applikazzjonijiet ta 'Tagħbija Għolja", mogħtija hawn.

L-illokkjar imqassam huwa primittiv utli ħafna użat f'ħafna ambjenti fejn proċessi differenti jridu jaħdmu fuq riżorsi kondiviżi b'mod esklużiv reċiprokament.

Hemm numru ta 'libreriji u postijiet hemmhekk li jiddeskrivu kif jiġi implimentat DLM (Distributed Lock Manager) bl-użu ta' Redis, iżda kull librerija tieħu approċċ differenti u l-garanziji li jipprovdu huma pjuttost dgħajfa meta mqabbla ma 'dak li jista' jinkiseb b'disinn kemmxejn aktar sofistikat.

F'dan l-artikolu se nippruvaw niddeskrivu algoritmu kanoniku kondizzjonali li juri kif timplimenta l-illokkjar distribwit bl-użu ta 'Redis. Aħna ser nitkellmu dwar algoritmu msejjaħ Redlock, timplimenta maniġer tal-illokkjar distribwit u, fl-opinjoni tagħna, dan l-algoritmu huwa aktar sikur mill-approċċ tas-soltu ta 'istanza waħda. Nittamaw li l-komunità tanalizzaha, tipprovdi feedback, u tużaha bħala punt tat-tluq għal proġetti aktar kumplessi jew alternattivi.

Implimentazzjoni

Qabel ma ngħaddu għad-deskrizzjoni tal-algoritmu, nipprovdu diversi links għal implimentazzjonijiet lesti. Jistgħu jintużaw bħala referenza.

  • Redlock-rb (implimentazzjoni għal Ruby). Hemm ukoll furketta Redlock-rb, li żżid pakkett (gem) għall-faċilità ta 'distribuzzjoni, u mhux biss għal dak.
  • Redlock-py (Implimentazzjoni Python).
  • Aioredlock (implimentazzjoni għal Asyncio Python).
  • Redlock-php (implimentazzjoni għal PHP).
  • PHPRedisMutex (implimentazzjoni oħra għal PHP)
  • cheprasov/php-redis-lock (Librerija PHP għal serraturi)
  • Redsync (implimentazzjoni għal Go).
  • Redisson (implimentazzjoni għal Java).
  • Redis::DistLock (implimentazzjoni għal Perl).
  • Redlock-cpp (implimentazzjoni għal C++).
  • Redlock-cs (implimentazzjoni għal C#/.NET).
  • RedLock.net (implimentazzjoni għal C#/.NET). B'appoġġ għall-estensjonijiet async u lock.
  • ScarletLock (implimentazzjoni għal C# .NET b'maħżen tad-dejta konfigurabbli)
  • Redlock4Net (implimentazzjoni għal C# .NET)
  • node-redlock (implimentazzjoni għal NodeJS). Jinkludi appoġġ għall-estensjoni tas-serraturi.

Garanziji ta' Sigurtà u Disponibbiltà

Aħna se nimudellaw id-disinn tagħna bi tliet proprjetajiet biss li naħsbu li jipprovdu l-garanziji minimi meħtieġa biex nużaw b'mod effettiv l-illokkjar distribwit.

  1. Proprjetà ta' sigurtà: Esklużjoni reċiproka. Fi kwalunkwe ħin partikolari, klijent wieħed biss jista 'jżomm is-serratura.
  2. Disponibbiltà Proprjetà A: L-ebda deadlocks. Huwa dejjem possibbli li eventwalment takkwista lock, anki jekk il-klijent li ssakkar ir-riżors ifalli jew jinżel fuq segment ta 'diska differenti.
  3. Disponibbiltà Proprjetà B: Tolleranza għal Ħsara. Sakemm il-maġġoranza tan-nodi Redis ikunu qed jaħdmu, il-klijenti jkunu jistgħu jakkwistaw u jirrilaxxaw serraturi.

Għaliex l-implimentazzjoni bbażata fuq l-irkupru tal-falliment mhix biżżejjed f'dan il-każ
Biex nifhmu x'se ntejbu, ejja nanalizzaw l-istat attwali tal-affarijiet mal-biċċa l-kbira tal-libreriji tal-illokkjar distribwiti bbażati fuq Redis.

L-aktar mod sempliċi biex tissakkar riżors bl-użu ta 'Redis huwa li toħloq ċavetta fl-istanza. Tipikament, ċavetta tinħoloq b'ħajja limitata, dan jinkiseb bl-użu tal-karatteristika tiskadi pprovduta f'Redis, għalhekk illum jew għada din iċ-ċavetta tiġi rilaxxata (proprjetà 2 fil-lista tagħna). Meta l-klijent ikollu bżonn jirrilaxxa r-riżorsa, iħassar iċ-ċavetta.

L-ewwel daqqa t'għajn, din is-soluzzjoni taħdem pjuttost tajjeb, iżda hemm problema: l-arkitettura tagħna toħloq punt wieħed ta 'falliment. X'jiġri jekk l-istanza Redis ospitanti tfalli? Ejja nżidu skjav mela! U se nużawha jekk il-preżentatur ma jkunx disponibbli. Sfortunatament, din l-għażla mhix vijabbli. Billi nagħmlu dan, ma nkunux nistgħu nimplimentaw sew il-proprjetà ta 'esklużjoni reċiproka li għandna bżonn biex niżguraw is-sigurtà, minħabba li r-replikazzjoni f'Redis hija asinkronika.

Ovvjament, f'tali mudell sseħħ kundizzjoni ta 'razza:

  1. Klijent A jakkwista lock fuq il-kaptan.
  2. Il-kaptan ifalli qabel ma d-daħla taċ-ċavetta tiġi trasferita lill-iskjav.
  3. Is-segwaċi jiġi promoss għal mexxej.
  4. Klijent B jakkwista serratura fuq l-istess riżorsa li A diġà ssakkar. VOLANT TA' SIGURTÀ!

Xi drabi huwa kompletament normali li f'ċirkostanzi speċjali, bħal falliment, ħafna klijenti jistgħu jżommu s-serratura fl-istess ħin. F'każijiet bħal dawn, tista' tiġi applikata soluzzjoni bbażata fuq ir-replikazzjoni. Inkella, nirrakkomandaw is-soluzzjoni deskritta f'dan l-artikolu.

Implimentazzjoni korretta b'istanza waħda

Qabel ma tipprova tegħleb in-nuqqasijiet tal-konfigurazzjoni ta’ istanza waħda deskritta hawn fuq, ejja nifhmu kif timmaniġġa sew dan il-każ sempliċi, peress li din is-soluzzjoni hija fil-fatt valida f’applikazzjonijiet fejn kundizzjoni tat-tellieqa hija aċċettabbli minn żmien għal żmien, u wkoll minħabba l-imblukkar fuq istanza waħda sservi bħala l-bażi li tintuża fl-algoritmu distribwit deskritt hawn.

Biex tikseb lock, agħmel dan:

SET resource_name my_random_value NX PX 30000

Dan il-kmand jinstalla ċavetta biss jekk ma teżistix diġà (għażla NX), b'perjodu ta 'validità ta' 30000 millisekondi (għażla PX). Iċ-ċavetta hija ssettjata għal "myrandomvalue" Dan il-valur għandu jkun uniku fil-klijenti kollha u t-talbiet kollha tal-lock.
Bażikament, jintuża valur każwali biex jirrilaxxa s-serratura b'mod sikur, b'kitba li tgħid lil Redis: neħħi ċ-ċavetta biss jekk teżisti u l-valur maħżun fih huwa eżattament dak li kien mistenni. Dan jinkiseb bl-użu tal-iskript Lua li ġej:

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

Dan huwa importanti biex jiġi evitat li lock miżmum minn klijent ieħor jitneħħa. Per eżempju, klijent jista 'jakkwista serratura, imbagħad jissakkar f'xi operazzjoni li ddum aktar mill-ewwel serratura (sabiex iċ-ċavetta jkollha żmien biex tiskadi), u aktar tard ineħħi s-serratura li xi klijent ieħor kien poġġa.
L-użu ta' DEL sempliċi mhuwiex sigur minħabba li klijent jista' jneħħi serratura miżmuma minn klijent ieħor. B'kuntrast, meta tuża l-iskrittura ta 'hawn fuq, kull serratura hija "iffirmata" b'sekwenza każwali, għalhekk biss il-klijent li poġġieha qabel jista' jneħħiha.

X'għandha tkun din is-sekwenza każwali? Qed naħseb li għandu jkun 20 bytes minn /dev/urandom, imma tista' ssib modi inqas għaljin biex tagħmel is-sekwenza unika biżżejjed għall-iskopijiet tiegħek. Pereżempju, ikun tajjeb li żerriegħa RC4 ma '/dev/urandom u mbagħad tiġġenera nixxiegħa psewdo-random minnha. Soluzzjoni aktar sempliċi tinvolvi taħlita ta 'ħin unix f'riżoluzzjoni ta' mikrosekonda flimkien mal-ID tal-klijent; mhuwiex daqshekk sigur, iżda probabbilment huwa f'idejn il-kompitu fil-biċċa l-kbira tal-kuntesti.

Il-ħin li nużaw bħala kejl tal-ħajja taċ-ċavetta jissejjaħ il-"ħajja tal-lock". Dan il-valur huwa kemm l-ammont ta 'żmien qabel ma s-serratura tiġi rilaxxata awtomatikament kif ukoll l-ammont ta' ħin li klijent għandu jlesti operazzjoni qabel ma klijent ieħor ikun jista 'jsakkar dik ir-riżorsa, mingħajr ma fil-fatt jikser il-garanziji ta' esklużjoni reċiproka. Din il-garanzija hija limitata biss għal ċertu tieqa ta 'żmien, li tibda mill-mument li jinxtara l-lock.

Allura ddiskutejna mod tajjeb biex takkwista u rilaxx lock. Is-sistema (jekk qed nitkellmu dwar sistema mhux distribwita li tikkonsisti f'istanza waħda u dejjem disponibbli) hija sigura. Ejja testendi dan il-kunċett għal sistema distribwita, fejn ma għandna l-ebda garanziji bħal dawn.

Algoritmu Redlock

Il-verżjoni mqassma tal-algoritmu tassumi li għandna N Redis masters. Dawn in-nodi huma kompletament indipendenti minn xulxin, għalhekk ma nużawx replikazzjoni jew kwalunkwe sistema ta 'koordinazzjoni impliċita oħra. Diġà koprejna kif takkwista u rilaxx b'mod sikur lock fuq istanza waħda. Aħna nieħdu bħala fatt li l-algoritmu, meta jaħdem ma 'istanza waħda, se juża eżattament dan il-metodu. Fl-eżempji tagħna aħna waqqafna N għal 5, li huwa valur raġonevoli. Għalhekk, ikollna bżonn nużaw 5 masters Redis fuq kompjuters jew magni virtwali differenti biex niżguraw li jaġixxu fil-biċċa l-kbira b'mod indipendenti minn xulxin.

Biex jakkwista lock, il-klijent iwettaq l-operazzjonijiet li ġejjin:

  1. Iġib il-ħin kurrenti f'millisekondi.
  2. Sekwenzjali jipprova jikseb lock fuq N istanzi kollha, billi juża l-istess isem taċ-ċavetta u valuri każwali fil-każijiet kollha. Fl-Istadju 2, meta l-klijent iwaqqaf serratura fuq bażi ta' kull istanza, il-klijent juża dewmien biex jakkwistah li huwa qasir biżżejjed meta mqabbel mal-ħin li warajh is-serratura tiġi rilaxxata awtomatikament. Pereżempju, jekk it-tul tal-imblukkar huwa ta '10 sekondi, allura d-dewmien jista' jkun fil-medda ta '~5-50 millisekondi. Dan jelimina s-sitwazzjoni li fiha l-klijent jista 'jibqa' mblukkat għal żmien twil jipprova jilħaq node Redis fallut: jekk l-istanza ma tkunx disponibbli, allura nippruvaw nikkonnettjaw ma 'istanza oħra kemm jista' jkun malajr.
  3. Biex tieħu serratura, il-klijent jikkalkula kemm għadda ħin; Biex tagħmel dan, inaqqas mill-valur attwali tal-ħin il-timestamp li nkiseb fil-pass 1. Jekk u biss jekk il-klijent kien kapaċi jikseb il-lock fuq il-maġġoranza tal-istanzi (mill-inqas 3), u l-ħin totali li ħa biex tikseb il-lock, inqas mit-tul tal-lock, il-lock jitqies li nkiseb.
  4. Jekk lock ikun ġie akkwistat, it-tul tal-lock jittieħed bħala t-tul tal-lock oriġinali nieqes il-ħin li għadda kkalkulat fil-pass 3.
  5. Jekk il-klijent jonqos milli jikseb il-lock għal xi raġuni (jew ma setax jissakkar N/2+1 każijiet, jew it-tul tal-lock kien negattiv), allura jipprova jiftaħ l-istanzi kollha (anki dawk li ħaseb li ma setax jimblokka ).

L-algoritmu huwa asinkronu?

Dan l-algoritmu huwa bbażat fuq is-suppożizzjoni li, għalkemm m'hemm l-ebda arloġġ sinkronizzat li fuqu jaħdmu l-proċessi kollha, il-ħin lokali f'kull proċess għadu jiċċirkola bejn wieħed u ieħor bl-istess pass, u l-iżball huwa żgħir meta mqabbel mal-ħin totali li warajh is-serratura tkun. rilaxxati awtomatikament. Din is-suppożizzjoni hija simili ħafna għas-sitwazzjoni tipika għal kompjuters ordinarji: kull kompjuter għandu arloġġ lokali, u ġeneralment nistgħu noqogħdu fuq il-fatt li d-differenza fil-ħin bejn kompjuters differenti hija żgħira.

F'dan il-punt, irridu nifformulaw bir-reqqa r-regola tagħna ta 'esklużjoni reċiproka: l-esklużjoni reċiproka hija garantita biss jekk il-klijent li jżomm is-serratura joħroġ matul iż-żmien li s-serratura tkun valida (dan il-valur miksub fil-pass 3), nieqes ftit aktar ħin (total ta' ftit millisekondi biex tikkumpensa għad-differenza fil-ħin bejn il-proċessi).

L-artikolu interessanti li ġej jgħid aktar dwar sistemi bħal dawn li jeħtieġu koordinazzjoni ta 'intervalli ta' ħin: Kirjiet: mekkaniżmu effiċjenti li tollera l-ħsarat għall-konsistenza tal-cache tal-fajls distribwit.

Erġa' pprova mal-falliment

Meta klijent jonqos milli jakkwista lock, għandu jerġa' jipprova wara dewmien każwali; dan isir biex jiġu desinkronizzati klijenti multipli li jippruvaw jakkwistaw lock fuq l-istess riżors fl-istess ħin (li jista 'jwassal għal sitwazzjoni ta' "split-brain" li fiha ma jkunx hemm rebbieħa). Barra minn hekk, aktar ma klijent jipprova jakkwista lock fuq il-maġġoranza tal-istanzi ta' Redis, iktar ikun idjaq it-tieqa li fiha tista' sseħħ sitwazzjoni ta' moħħ maqsum (u inqas il-ħtieġa għal tentattivi mill-ġdid). Għalhekk, idealment, il-klijent għandu jipprova jibgħat kmandi SET lil N istanzi fl-istess ħin billi juża multiplexing.

Ta' min jenfasizza hawn kemm huwa importanti li l-klijenti li jonqsu milli jakkwistaw il-maġġoranza tas-serraturi jirrilaxxaw is-serraturi (parzjalment) akkwistati, sabiex ma jkollhomx għalfejn jistennew li ċ-ċavetta tiskadi qabel ma s-serratura fuq ir-riżorsa tkun tista' terġa' tinkiseb (għalkemm jekk isseħħ il-frammentazzjoni tan-netwerk, u l-klijent jitlef il-kuntatt mal-istanzi Redis, allura trid tħallas penali għad-disponibbiltà waqt li tistenna li tiskadi ċ-ċavetta).

Itlaq is-serratura

Ir-rilaxx ta 'lock hija operazzjoni sempliċi li sempliċiment teħtieġ li jinfetaħ l-istanzi kollha, irrispettivament minn jekk il-klijent jidhirx li ssakkar b'suċċess istanza partikolari.

Konsiderazzjonijiet ta' Sigurtà

L-algoritmu huwa sigur? Ejja nippruvaw nimmaġinaw x'jiġri f'xenarji differenti.

Biex tibda, ejja nassumu li l-klijent kien kapaċi jikseb lock fuq il-maġġoranza tal-każijiet. Kull istanza se jkun fiha ċavetta bl-istess ħajja għal kulħadd. Madankollu, kull waħda minn dawn iċ-ċwievet ġiet installata fi żmien differenti, għalhekk se jiskadu f'ħinijiet differenti. Iżda, jekk l-ewwel ċavetta ġiet installata fi żmien mhux agħar minn T1 (il-ħin li nagħżlu qabel ma nikkuntattjaw l-ewwel server), u l-aħħar ċavetta ġiet installata fi żmien mhux agħar minn T2 (il-ħin li fih waslet ir-rispons mill-aħħar server), allura aħna kunfidenti li l-ewwel ċavetta fis-sett li tiskadi se tibqa 'ħajja mill-inqas MIN_VALIDITY=TTL-(T2-T1)-CLOCK_DRIFT. Iċ-ċwievet l-oħra kollha jiskadu aktar tard, għalhekk nistgħu nkunu ċerti li ċ-ċwievet kollha se jkunu validi fl-istess ħin għal mill-inqas dan iż-żmien.

Matul iż-żmien li l-biċċa l-kbira taċ-ċwievet jibqgħu validi, klijent ieħor ma jkunx jista’ jakkwista s-serratura, peress li l-operazzjonijiet N/2+1 SET NX ma jistgħux jirnexxu jekk diġà jeżistu ċwievet N/2+1. Għalhekk, ladarba serratura tkun ġiet akkwistata, huwa impossibbli li terġa 'takkwista fl-istess mument (dan jikser il-proprjetà ta' esklużjoni reċiproka).
Madankollu, irridu niżguraw li klijenti multipli li jippruvaw jiksbu serratura fl-istess ħin ma jistgħux jirnexxu fl-istess ħin.

Jekk il-klijent ikun ssakkar il-maġġoranza tal-istanzi għal madwar jew aktar mit-tul massimu tal-illokkjar, iqis is-serratura bħala invalida u jiftaħ l-istanzi. Għalhekk, irridu nqisu biss il-każ li fih il-klijent irnexxielu jimblokka l-maġġoranza tal-istanzi fi żmien inqas mid-data tal-iskadenza. F'dan il-każ, rigward l-argument t'hawn fuq, matul iż-żmien MIN_VALIDITY l-ebda klijent m'għandu jkun jista' jerġa' jakkwista s-serratura. Għalhekk, ħafna klijenti jkunu jistgħu jissakkru N/2+1 istanzi fl-istess ħin (li jispiċċa fl-aħħar tal-istadju 2) biss meta l-ħin biex jissakkar il-maġġoranza kien akbar mill-ħin TTL, li jirrendi l-lock invalidu.

Tista' tipprovdi prova formali ta' sigurtà, tindika algoritmi simili eżistenti, jew issib xi bug f'dan ta' hawn fuq?

Konsiderazzjonijiet ta' Aċċessibilità

Id-disponibbiltà tas-sistema tiddependi fuq tliet karatteristiċi ewlenin:

  1. Ħoll is-serraturi awtomatikament (kif jiskadu ċ-ċwievet): Eventwalment, iċ-ċwievet jerġgħu jkunu disponibbli biex jintużaw għas-serraturi.
  2. Il-fatt li l-klijenti normalment jgħinu lil xulxin billi jneħħu serraturi meta s-serratura mixtieqa ma tkunx ġiet akkwistata, jew tkun ġiet akkwistata u x-xogħol ikun tlesta; għalhekk huwa probabbli li mhux se jkollna nistennew li ċ-ċwievet jiskadu biex jerġgħu jakkwistaw is-serratura.
  3. Il-fatt li meta klijent jeħtieġ li jerġa 'jipprova jakkwista serratura, jistenna għal żmien komparattivament itwal mill-perjodu meħtieġ biex jakkwista l-biċċa l-kbira tas-serraturi. Dan inaqqas il-probabbiltà li tinqala' sitwazzjoni ta' moħħ maqsum meta tikkompeti għar-riżorsi.

Madankollu, hemm penali tad-disponibbiltà ugwali għat-TTL tas-segmenti tan-netwerk, għalhekk jekk ikun hemm segmenti kontigwi, il-penali tista 'tkun indefinita. Dan iseħħ kull meta klijent jakkwista lock u mbagħad iqatta 'segment ieħor qabel ma jkun jista' jirrilaxxha.

Fil-prinċipju, minħabba segmenti infiniti ta' netwerk kontigwi, sistema tista' tibqa' mhux disponibbli għal perjodu ta' żmien infinit.

Prestazzjoni, failover u fsync

Ħafna nies jużaw Redis minħabba li jeħtieġu prestazzjoni għolja tas-server tal-lock f'termini tal-latency meħtieġa biex jakkwistaw u jirrilaxxaw serraturi, u n-numru ta 'akkwisti/rilaxxi li jistgħu jitlestew kull sekonda. Biex tissodisfa dan ir-rekwiżit, hemm strateġija biex tikkomunika mas-servers N Redis biex titnaqqas il-latenza. Din hija strateġija ta 'multiplexing (jew "multiplexing ta' bniedem fqir", fejn is-sokit jitqiegħed f'modalità mhux imblukkata, jibgħat il-kmandi kollha, u jaqra l-kmandi aktar tard, billi wieħed jassumi li l-ħin tar-ritorn bejn il-klijent u kull istanza huwa simili) .

Madankollu, irridu nqisu wkoll il-konsiderazzjoni assoċjata mal-ħażna tad-dejta fit-tul jekk naħdmu biex noħolqu mudell b'irkupru affidabbli minn fallimenti.

Bażikament, biex tiċċara l-kwistjoni, ejja nassumu li aħna kkonfigurat Redis bl-ebda ħażna ta 'dejta fit-tul. Il-klijent jirnexxielu jimblokka 3 minn 5 każijiet. Waħda mill-istanzi li l-klijent irnexxielu jimblokka terġa’ tinbeda, u f’dan il-mument hemm 3 każijiet għal darb’oħra għall-istess riżorsa, li nistgħu nibblukkaw, u klijent ieħor jista’, min-naħa tiegħu, jimblokka l-istanza restartjata, u jikser il-proprjetà tas-sigurtà li jassumi esklussività tas-serraturi.

Jekk tattiva data qabel (AOF), is-sitwazzjoni titjieb xi ftit. Per eżempju, tista 'tippromwovi server billi tibgħat il-kmand SHUTDOWN u terġa' tibda. Peress li l-operazzjonijiet ta 'skadenza f'Redis huma implimentati semantikament b'tali mod li l-ħin ikompli jgħaddi anke meta s-server jintefa, ir-rekwiżiti kollha tagħna huma tajbin. Dan huwa normali sakemm jiġi żgurat għeluq normali. X'għandek tagħmel f'każ ta' qtugħ tad-dawl? Jekk Redis huwa kkonfigurat awtomatikament, b'fsync sinkronizzanti fuq disk kull sekonda, allura huwa possibbli li wara bidu mill-ġdid ma jkollnax iċ-ċavetta tagħna. Teoretikament, jekk irridu niggarantixxu s-sigurtà tal-illokkjar waqt kwalunkwe istartjar mill-ġdid, għandna nippermettu fsync=always fis-settings għall-ħażna tad-data fit-tul. Dan se joqtol kompletament il-prestazzjoni, sal-livell ta 'sistemi CP li huma tradizzjonalment użati biex jimplimentaw b'mod sigur serraturi distribwiti.

Iżda s-sitwazzjoni hija aħjar milli tidher mal-ewwel daqqa t'għajn. Fil-prinċipju, is-sigurtà tal-algoritmu hija ppreservata għaliex meta l-istanza terġa 'tibda wara falliment, ma tibqax tipparteċipa fl-ebda serratura li hija attwalment attiva.

Biex niżguraw dan, irridu biss niżguraw li wara falliment l-istanza tibqa' mhux disponibbli għal perjodu ta' żmien li jaqbeż xi ftit it-TTL massimu li nużaw. Dan il-mod se nistennew sad-data ta 'skadenza u r-rilaxx awtomatiku taċ-ċwievet kollha li kienu attivi fil-ħin tal-falliment.

Bl-użu ta 'startjar mill-ġdid ittardjat, huwa fil-prinċipju possibbli li tinkiseb sigurtà anke fin-nuqqas ta' kwalunkwe persistenza fit-tul f'Redis. Innota, madankollu, li dan jista 'jirriżulta f'multa għall-ksur tal-aċċessibilità. Pereżempju, jekk il-maġġoranza tal-każijiet ifallu, is-sistema ssir globalment mhux disponibbli għat-TTL (u l-ebda riżors ma jista' jiġi mblukkat matul dan iż-żmien).

Inżidu d-disponibbiltà tal-algoritmu: nestendew l-imblukkar

Jekk ix-xogħol imwettaq mill-klijenti jikkonsisti f'passi żgħar, huwa possibbli li jitnaqqas it-tul tal-lock default u jiġi implimentat mekkaniżmu għall-estensjoni tas-serraturi. Fil-prinċipju, jekk il-klijent ikun okkupat bil-kompjuters u l-valur tal-iskadenza tal-lock huwa perikoluż b'mod baxx, tista 'tibgħat script Lua lill-istanzi kollha li testendi t-TTL taċ-ċavetta jekk iċ-ċavetta għadha teżisti u l-valur tagħha għadu valur każwali miksub meta l- lock ġie akkwistat.

Klijent għandu jikkunsidra biss lock li jerġa' jiġi akkwistat jekk ikun irnexxielu jissakkar il-maġġoranza tal-istanzi fil-perjodu ta' validità.

Veru, teknikament l-algoritmu ma jinbidilx, għalhekk in-numru massimu ta 'tentattivi ripetuti biex jinkisbu serraturi għandu jkun limitat, inkella l-proprjetajiet ta' aċċessibbiltà jinkisru.

Sors: www.habr.com

Żid kumment