Hey Habr!
Loni a mu si akiyesi rẹ itumọ ti nkan eka kan nipa imuse ti titiipa pinpin ni lilo Redis ati pe o lati sọrọ nipa awọn ireti Redis bi koko-ọrọ kan. Onínọmbà ti Redlock algorithm ni ibeere lati ọdọ Martin Kleppmann, onkọwe ti iwe naa "", fun .
Titiipa pinpin jẹ alakoko ti o wulo pupọ ti a lo ni ọpọlọpọ awọn agbegbe nibiti awọn ilana oriṣiriṣi gbọdọ ṣiṣẹ lori awọn orisun pinpin ni ọna iyasọtọ ti ara-ẹni.
Nọmba awọn ile-ikawe ati awọn ifiweranṣẹ wa nibẹ ti o ṣapejuwe bi o ṣe le ṣe imuse DLM (Oluṣakoso Titiipa Pipin) ni lilo Redis, ṣugbọn ile-ikawe kọọkan gba ọna ti o yatọ ati awọn iṣeduro ti wọn pese jẹ alailagbara ni akawe si ohun ti o ṣee ṣe pẹlu apẹrẹ isọdi diẹ sii.
Ninu nkan yii, a yoo gbiyanju lati ṣapejuwe algorithm canonical kan ti o ṣe afihan bi o ṣe le ṣe imuse titiipa pinpin ni lilo Redis. A yoo sọrọ nipa algorithm kan ti a pe Redlock, o ṣe imuse oluṣakoso titiipa pinpin ati, ninu ero wa, algoridimu yii jẹ ailewu ju ọna deede-ọkan lọ. A nireti pe agbegbe yoo ṣe itupalẹ rẹ, pese esi, ati lo bi aaye ibẹrẹ fun eka diẹ sii tabi awọn iṣẹ akanṣe miiran.
Imuse
Ṣaaju ki o to lọ si apejuwe ti algorithm, a pese awọn ọna asopọ pupọ si awọn imuse ti a ti ṣetan. Wọn le ṣee lo fun itọkasi.
- (imuse fun Ruby). O tun wa Redlock-rb, eyiti o ṣe afikun package (olowoiyebiye) fun irọrun pinpin, kii ṣe fun iyẹn nikan.
- (Imuse Python).
- (imuse fun Asyncio Python).
- (imuse fun PHP).
- (imuse miiran fun PHP)
- (Iwe-ikawe PHP fun awọn titiipa)
- (imuse fun Go).
- (imuse fun Java).
- (imuse fun Perl).
- (imuse fun C ++).
- (imuse fun C #/.NET).
- (imuse fun C #/.NET). Pẹlu atilẹyin fun async ati awọn amugbooro titiipa.
- (imuse fun C # .NET pẹlu atunto data itaja)
- (imuse fun C # .NET)
- (imuse fun NodeJS). Pẹlu atilẹyin fun faagun awọn titiipa.
Awọn iṣeduro Aabo ati Wiwa
A yoo ṣe apẹẹrẹ apẹrẹ wa pẹlu awọn ohun-ini mẹta ti a ro pe pese awọn iṣeduro ti o kere ju ti o nilo lati lo titiipa pinpin ni imunadoko.
- Ohun-ini aabo: Iyasọtọ kọọkan. Ni akoko eyikeyi, alabara kan ṣoṣo le di titiipa mu.
- Ohun-ini Wiwa A: Ko si awọn titiipa. O ṣee ṣe nigbagbogbo lati gba titiipa kan, paapaa ti alabara ti o tiipa awọn orisun ba kuna tabi gbe si apakan disk ọtọtọ.
- Ohun-ini Wiwa B: Ifarada Aṣiṣe. Niwọn igba ti ọpọlọpọ awọn apa Redis nṣiṣẹ, awọn alabara ni anfani lati gba ati tusilẹ awọn titiipa.
Kini idi ti imuse ti o da lori imularada ikuna ko to ninu ọran yii
Lati loye ohun ti a yoo ni ilọsiwaju, jẹ ki a ṣe itupalẹ ipo awọn ọran lọwọlọwọ pẹlu ọpọlọpọ awọn ile-ikawe titiipa pinpin ti o da lori Redis.
Ọna ti o rọrun julọ lati tii orisun kan ni lilo Redis ni lati ṣẹda bọtini kan ninu apẹẹrẹ. Ni deede, bọtini kan ti ṣẹda pẹlu igbesi aye to lopin, eyi jẹ aṣeyọri nipa lilo ẹya ipari ti a pese ni Redis, nitorinaa laipẹ tabi ya bọtini yii ti tu silẹ (ohun-ini 2 ninu atokọ wa). Nigbati alabara ba nilo lati tu awọn orisun, o paarẹ bọtini naa.
Ni iwo akọkọ, ojutu yii ṣiṣẹ daradara, ṣugbọn iṣoro kan wa: faaji wa ṣẹda aaye ikuna kan. Kini yoo ṣẹlẹ ti apẹẹrẹ Redis agbalejo ba kuna? Jẹ ki a ṣafikun ẹrú lẹhinna! Ati pe a yoo lo ti olupilẹṣẹ ko ba si. Laanu, aṣayan yii ko ṣee ṣe. Nipa ṣiṣe eyi, a kii yoo ni anfani lati ṣe ni deede ohun-ini iyasoto ti ara ẹni ti a nilo lati rii daju aabo, nitori ẹda ni Redis jẹ asynchronous.
O han ni, ni iru awoṣe iru ipo-ije kan waye:
- Onibara A gba titiipa lori oluwa.
- Ọga naa kuna ṣaaju ki o to gbe iwọle bọtini si ẹrú naa.
- Olutẹle ti wa ni igbega si olori.
- Onibara B gba titiipa lori orisun kanna ti A ti tiipa tẹlẹ. AABO O ṣẹ!
Nigba miiran o jẹ deede patapata pe ni awọn ipo pataki, gẹgẹbi ikuna, ọpọlọpọ awọn onibara le di titiipa ni akoko kanna. Ni iru awọn ọran, ojutu ti o da lori ẹda le ṣee lo. Bibẹẹkọ, a ṣeduro ojutu ti a ṣalaye ninu nkan yii.
Atunse imuse pẹlu apẹẹrẹ kan
Ṣaaju ki o to gbiyanju lati bori awọn ailagbara ti iṣeto ni apẹẹrẹ-ẹyọkan ti a ṣalaye loke, jẹ ki a loye bi o ṣe le mu ọran ti o rọrun yii daradara, nitori pe ojutu yii wulo ni awọn ohun elo nibiti ipo ije kan jẹ itẹwọgba lati igba de igba, ati nitori idilọwọ lori a apẹẹrẹ ẹyọkan n ṣiṣẹ bi ipilẹ ti o lo ninu algoridimu pinpin ti a ṣalaye nibi.
Lati gba titiipa, ṣe eyi:
SET resource_name my_random_value NX PX 30000
Aṣẹ yii nfi bọtini kan sori ẹrọ nikan ti ko ba si tẹlẹ (aṣayan NX), pẹlu akoko iwulo ti 30000 milliseconds (aṣayan PX). Ti ṣeto bọtini naa si "myrandomvalue" Iye yii gbọdọ jẹ alailẹgbẹ kọja gbogbo awọn alabara ati gbogbo awọn ibeere titiipa.
Ni ipilẹ, iye laileto ni a lo lati tu titiipa silẹ lailewu, pẹlu iwe afọwọkọ ti n sọ Redis: yọ bọtini kuro nikan ti o ba wa ati pe iye ti o fipamọ sinu rẹ jẹ deede ohun ti a nireti. Eyi jẹ aṣeyọri nipa lilo iwe afọwọkọ Lua atẹle yii:
if redis.call("get",KEYS[1]) == ARGV[1] then
return redis.call("del",KEYS[1])
else
return 0
endEyi ṣe pataki lati ṣe idiwọ titiipa ti alabara miiran mu lati yọkuro. Fun apẹẹrẹ, alabara le gba titiipa kan, lẹhinna di titiipa ni diẹ ninu iṣẹ ṣiṣe ti o gun ju titiipa akọkọ lọ (ki bọtini naa ni akoko lati pari), ati nigbamii yọ titiipa ti alabara miiran ti gbe.
Lilo DEL ti o rọrun jẹ ailewu nitori alabara le yọ titiipa kan ti o waye nipasẹ alabara miiran. Ni idakeji, nigba lilo iwe afọwọkọ ti o wa loke, titiipa kọọkan jẹ “fọwọsi” pẹlu okun laileto, nitorinaa nikan alabara ti o ti gbe tẹlẹ le yọ kuro.
Kini o yẹ ki okun laileto yii jẹ? Mo ro pe o yẹ ki o jẹ awọn baiti 20 lati / dev/urandom, ṣugbọn o le wa awọn ọna ti ko gbowolori lati jẹ ki okun naa jẹ alailẹgbẹ to fun awọn idi rẹ. Fun apẹẹrẹ, yoo dara lati fun irugbin RC4 pẹlu / dev/urandom ati lẹhinna ṣe agbejade ṣiṣan atansọ-ID lati ọdọ rẹ. Ojutu ti o rọrun kan pẹlu apapọ akoko unix ni ipinnu microsecond pẹlu ID alabara; kii ṣe aabo to, ṣugbọn o ṣee ṣe si iṣẹ-ṣiṣe ni ọpọlọpọ awọn aaye.
Akoko ti a lo bi wiwọn ti igbesi aye bọtini ni a pe ni “igbesi aye titiipa”. Iye yii jẹ mejeeji iye akoko ṣaaju titiipa tii tu silẹ laifọwọyi ati iye akoko ti alabara ni lati pari iṣẹ kan ṣaaju ki alabara miiran le ni tiipa tii orisun yẹn, laisi ni ilodi si awọn iṣeduro iyasoto iyasọtọ. Iṣeduro yii jẹ opin si window akoko kan nikan, eyiti o bẹrẹ lati akoko ti titiipa ti ra.
Nitorinaa a ti jiroro ọna ti o dara lati gba ati tusilẹ titiipa kan. Eto naa (ti a ba n sọrọ nipa eto ti kii pin kaakiri ti o ni ẹyọkan ati apẹẹrẹ ti o wa nigbagbogbo) jẹ aabo. Jẹ ki a faagun ero yii si eto pinpin, nibiti a ko ni iru awọn iṣeduro bẹ.
Algoridimu Redlock
Ẹya ti a pin ti algorithm dawọle pe a ni awọn oluwa N Redis. Awọn apa wọnyi jẹ ominira patapata ti ara wọn, nitorinaa a ko lo ẹda tabi eto isọdọkan alaiṣe eyikeyi miiran. A ti bo bi o ṣe le gba ni aabo ati tusilẹ titiipa lori apẹẹrẹ ẹyọkan. A gba o fun funni pe algorithm, nigbati o ba n ṣiṣẹ pẹlu apẹẹrẹ kan, yoo lo ọna yii gangan. Ninu awọn apẹẹrẹ wa a ṣeto N si 5, eyiti o jẹ iye ti o tọ. Nitorinaa, a yoo nilo lati lo awọn oluwa Redis 5 lori awọn kọnputa oriṣiriṣi tabi awọn ẹrọ foju lati rii daju pe wọn ṣiṣẹ ni ominira ti ara wọn.
Lati gba titiipa, alabara ṣe awọn iṣẹ wọnyi:
- Ngba akoko lọwọlọwọ ni awọn iṣẹju-aaya.
- Awọn igbiyanju lẹsẹsẹ lati gba titiipa lori gbogbo awọn iṣẹlẹ N, ni lilo orukọ bọtini kanna ati awọn iye laileto ni gbogbo awọn ọran. Ni Ipele 2, nigbati alabara ba ṣeto titiipa kan lori ipilẹ-akoko kan, alabara lo idaduro lati gba rẹ ti o kuru to ni akawe si akoko lẹhin eyiti titiipa naa ti tu silẹ laifọwọyi. Fun apẹẹrẹ, ti iye akoko idinamọ jẹ iṣẹju-aaya 10, lẹhinna idaduro le wa ni iwọn ~5-50 milliseconds. Eyi yọkuro ipo ninu eyiti alabara le wa ni idinamọ fun igba pipẹ igbiyanju lati de ibi ipade Redis ti kuna: ti apẹẹrẹ ko ba si, lẹhinna a gbiyanju lati sopọ si apẹẹrẹ miiran ni kete bi o ti ṣee.
- Lati mu titiipa, alabara ṣe iṣiro iye akoko ti o ti kọja; Lati ṣe eyi, o yọkuro lati iye akoko akoko gangan akoko akoko ti o gba ni igbesẹ 1. Ti o ba jẹ pe nikan ti alabara ba ni anfani lati gba titiipa lori ọpọlọpọ awọn iṣẹlẹ (o kere ju 3), ati akoko lapapọ ti o gba. gba titiipa, kere ju iye akoko titiipa, titiipa ti gba pe o ti gba.
- Ti titiipa kan ba ti gba, iye akoko titiipa ni a mu lati jẹ iye akoko titiipa atilẹba iyokuro akoko ti o kọja ti iṣiro ni igbesẹ 3.
- Ti alabara ba kuna lati gba titiipa fun idi kan (boya ko lagbara lati tii awọn iṣẹlẹ N/2+1, tabi akoko titiipa jẹ odi), lẹhinna yoo gbiyanju lati ṣii gbogbo awọn iṣẹlẹ (paapaa awọn ti o ro pe ko le dina). ).
Ṣe algorithm asynchronous bi?
Algoridimu yii da lori arosinu pe, botilẹjẹpe ko si aago amuṣiṣẹpọ lori eyiti gbogbo awọn ilana yoo ṣiṣẹ, akoko agbegbe ni ilana kọọkan tun n ṣan ni isunmọ iyara kanna, ati pe aṣiṣe jẹ kekere ni akawe si akoko lapapọ lẹhin eyiti titiipa naa jẹ laifọwọyi tu. Iroro yii jẹ iru pupọ si ipo aṣoju fun awọn kọnputa lasan: kọnputa kọọkan ni aago agbegbe, ati pe a le nigbagbogbo ka lori otitọ pe iyatọ akoko laarin awọn kọnputa oriṣiriṣi jẹ kekere.
Ni aaye yii, a gbọdọ ni ifarabalẹ ni ifarabalẹ ṣe agbekalẹ ofin isọkuro ti ara ẹni: iyasoto iyasọtọ jẹ iṣeduro nikan ti alabara ti o mu titiipa ba jade lakoko akoko titiipa naa wulo (iye yii ti a gba ni igbesẹ 3), iyokuro diẹ diẹ sii (lapapọ diẹ diẹ milliseconds lati sanpada fun iyatọ akoko laarin awọn ilana).
Nkan ti o nifẹ ti atẹle n sọ diẹ sii nipa iru awọn eto ti o nilo isọdọkan ti awọn aaye arin akoko: .
Tun gbiyanju lori ikuna
Nigbati alabara ba kuna lati gba titiipa, o gbọdọ gbiyanju lẹẹkansi lẹhin idaduro lairotẹlẹ; Eyi ni a ṣe lati muṣiṣẹpọpọ awọn alabara lọpọlọpọ ti o n gbiyanju lati gba titiipa lori orisun kanna ni akoko kanna (eyiti o le ja si ipo “pipin-ọpọlọ” ninu eyiti ko si awọn olubori). Ni afikun, yiyara alabara kan gbiyanju lati gba titiipa lori pupọ julọ ti awọn iṣẹlẹ Redis, window ti o dín ni eyiti ipo ọpọlọ-pipin le waye (ati iwulo fun awọn atunwo). Nitorinaa, apere, alabara yẹ ki o gbiyanju lati firanṣẹ awọn aṣẹ SET si awọn iṣẹlẹ N nigbakanna ni lilo multiplexing.
O tọ lati tẹnumọ nibi bii o ṣe ṣe pataki fun awọn alabara ti o kuna lati gba ọpọlọpọ awọn titiipa lati tusilẹ awọn titiipa ti o gba (apakan), ki wọn ko ni lati duro de bọtini lati pari ṣaaju titiipa lori orisun le tun gba lẹẹkansi (botilẹjẹpe ti pipin nẹtiwọọki ba waye, ati alabara padanu olubasọrọ pẹlu awọn iṣẹlẹ Redis, lẹhinna o ni lati san ijiya wiwa lakoko ti o nduro bọtini lati pari).
Tu silẹ titiipa
Sisilẹ titiipa jẹ iṣẹ ti o rọrun kan ti o nilo ki gbogbo awọn iṣẹlẹ wa ni ṣiṣi silẹ, laibikita boya alabara yoo han pe o ti tii apẹẹrẹ kan pato ni aṣeyọri.
Aabo riro
Ṣe algorithm ailewu? Jẹ ká gbiyanju lati fojuinu ohun ti o ṣẹlẹ ni orisirisi awọn oju iṣẹlẹ.
Lati bẹrẹ pẹlu, jẹ ki a ro pe alabara ni anfani lati gba titiipa lori ọpọlọpọ awọn iṣẹlẹ. Apeere kọọkan yoo ni bọtini kan pẹlu igbesi aye kanna fun gbogbo eniyan. Sibẹsibẹ, ọkọọkan awọn bọtini wọnyi ni a fi sii ni akoko ti o yatọ, nitorinaa wọn yoo pari ni awọn akoko oriṣiriṣi. Ṣugbọn, ti o ba ti fi bọtini akọkọ sori ẹrọ ni akoko ti ko buru ju T1 (akoko ti a yan ṣaaju ki o to kan si olupin akọkọ), ati pe bọtini ti o kẹhin ti fi sii ni akoko ti ko buru ju T2 (akoko ti o ti gba esi naa). lati olupin ti o kẹhin), lẹhinna a ni igboya pe bọtini akọkọ ninu ṣeto ti o pari yoo ye o kere ju MIN_VALIDITY=TTL-(T2-T1)-CLOCK_DRIFT. Gbogbo awọn bọtini miiran yoo pari nigbamii, nitorinaa a le ni idaniloju pe gbogbo awọn bọtini yoo wulo nigbakanna fun o kere ju akoko yii.
Lakoko ti ọpọlọpọ awọn bọtini wa wulo, alabara miiran kii yoo ni anfani lati gba titiipa, nitori awọn iṣẹ N/2+1 SET NX ko le ṣaṣeyọri ti awọn bọtini N/2+1 ti wa tẹlẹ. Nitorinaa, ni kete ti o ti gba titiipa kan, ko ṣee ṣe lati gba lẹẹkansi ni akoko kanna (eyi yoo rú ohun-ini iyọkuro laarin).
Sibẹsibẹ, a fẹ lati rii daju pe ọpọlọpọ awọn alabara ti n gbiyanju lati gba titiipa ni akoko kanna ko le ṣaṣeyọri ni akoko kanna.
Ti o ba jẹ pe alabara ti tiipa pupọ julọ awọn iṣẹlẹ fun bii tabi diẹ ẹ sii ju iye akoko titiipa ti o pọ julọ, yoo ka titiipa naa jẹ asan ati ṣii awọn iṣẹlẹ naa. Nitorinaa, a ni lati ṣe akiyesi ọran nikan ninu eyiti alabara ṣakoso lati dènà ọpọlọpọ awọn iṣẹlẹ ni akoko ti o kere ju ọjọ ipari lọ. Ni idi eyi, nipa ariyanjiyan ti o wa loke, lakoko akoko MIN_VALIDITY ko si onibara yẹ ki o ni anfani lati tun gba titiipa. Nitorinaa, ọpọlọpọ awọn alabara yoo ni anfani lati tii awọn iṣẹlẹ N/2+1 ni akoko kanna (eyiti o pari ni opin ipele 2) nikan nigbati akoko lati tii ọpọlọpọ pọ ju akoko TTL lọ, eyiti o jẹ ki titiipa di asan.
Njẹ o le pese ẹri aabo ti deede, tọka awọn algoridimu iru ti o wa tẹlẹ, tabi wa kokoro kan ni oke bi?
Wiwọle riro
Wiwa eto da lori awọn abuda akọkọ mẹta:
- Tu awọn titiipa silẹ ni aladaaṣe (bi awọn bọtini ti pari): Awọn bọtini yoo wa nikẹhin lẹẹkansi lati ṣee lo fun awọn titiipa.
- Ni otitọ pe awọn alabara nigbagbogbo ṣe iranlọwọ fun ara wọn nipa yiyọ awọn titiipa nigbati titiipa ti o fẹ ko ti gba, tabi ti gba ati pe iṣẹ naa ti pari; nitorinaa o ṣee ṣe pe a ko ni lati duro fun awọn bọtini lati pari lati tun gba titiipa naa.
- Otitọ pe nigba ti alabara nilo lati tun gbiyanju lati gba titiipa kan, o duro fun akoko to gun ni afiwera ju akoko ti o nilo lati gba ọpọlọpọ awọn titiipa. Eyi dinku iṣeeṣe ti ipo pipin-ọpọlọ ti o dide nigbati o n dije fun awọn orisun.
Bibẹẹkọ, ijiya wiwa kan wa ti o dọgba si TTL ti awọn apakan nẹtiwọọki, nitorinaa ti awọn apakan ti o ni ibatan ba wa, ijiya le jẹ ailopin. Eyi n ṣẹlẹ nigbakugba ti alabara ba gba titiipa kan ati lẹhinna ya si apakan miiran ṣaaju ki o le tu silẹ.
Ni ipilẹ, ti a fun ni awọn apakan nẹtiwọọki alailẹgbẹ ailopin, eto kan le wa ko si fun akoko ailopin.
Performance, failover ati fsync
Ọpọlọpọ eniyan lo Redis nitori pe wọn nilo iṣẹ ṣiṣe titiipa iṣẹ ṣiṣe giga ni awọn ofin ti lairi ti o nilo lati gba ati tusilẹ awọn titiipa, ati nọmba awọn iṣẹ imudara / itusilẹ ti o le pari ni iṣẹju-aaya. Lati pade ibeere yii, ilana kan wa lati ṣe ibasọrọ pẹlu awọn olupin N Redis lati dinku lairi. Eyi jẹ ilana isọpọ pupọ (tabi “ọpọlọpọ eniyan talaka”), nibiti a ti fi iho naa sinu ipo ti kii ṣe idiwọ, firanṣẹ gbogbo awọn aṣẹ, ati ka awọn aṣẹ nigbamii, ni ro pe akoko irin-ajo yika laarin alabara ati apẹẹrẹ kọọkan jẹ iru) .
Sibẹsibẹ, a tun ni lati ṣe akiyesi ero ti o ni nkan ṣe pẹlu ibi ipamọ data igba pipẹ ti a ba n gbiyanju lati ṣẹda awoṣe pẹlu imularada igbẹkẹle lati awọn ikuna.
Ni ipilẹ, lati ṣalaye ọran naa, jẹ ki a ro pe a tunto Redis laisi ibi ipamọ data igba pipẹ rara. Onibara ṣakoso lati dènà 3 ninu awọn iṣẹlẹ 5. Ọkan ninu awọn iṣẹlẹ ti alabara ṣakoso lati dènà ti tun bẹrẹ, ati ni akoko yii awọn ọran 3 tun wa fun orisun kanna, eyiti a le ṣe idiwọ, ati pe alabara miiran le, ni ọna, dènà apẹẹrẹ ti o tun bẹrẹ, rú ohun-ini aabo ti dawọle exclusivity ti awọn titiipa.
Ti o ba mu data ṣiṣẹ niwaju (AOF), ipo naa yoo ni ilọsiwaju diẹ. Fun apẹẹrẹ, o le ṣe igbega olupin kan nipa fifiranṣẹ pipaṣẹ SHUTDOWN ati tun bẹrẹ. Niwọn igba ti awọn iṣẹ ipari ni Redis ti wa ni imuse ni itumọ ni ọna ti akoko yoo tẹsiwaju lati ṣan paapaa nigbati olupin ba wa ni pipa, gbogbo awọn ibeere wa dara. Eyi jẹ deede niwọn igba ti idaduro deede ti wa ni idaniloju. Kini lati ṣe ni ọran ti awọn agbara agbara? Ti o ba tunto Redis nipasẹ aiyipada, pẹlu mimuuṣiṣẹpọ fsync lori disk ni gbogbo iṣẹju-aaya, lẹhinna o ṣee ṣe pe lẹhin atunbere a kii yoo ni bọtini wa. Ni imọ-jinlẹ, ti a ba fẹ ṣe iṣeduro aabo titiipa lakoko apẹẹrẹ eyikeyi tun bẹrẹ, o yẹ ki a mu ṣiṣẹ fsync=always ninu awọn eto fun igba pipẹ data ipamọ. Eyi yoo pa iṣẹ ṣiṣe patapata, si ipele ti awọn eto CP ti o lo ni aṣa lati ṣe imuse awọn titiipa pinpin ni aabo.
Ṣugbọn ipo naa dara ju bi o ti dabi ni wiwo akọkọ. Ni opo, aabo ti algoridimu ti wa ni ipamọ nitori nigbati apẹẹrẹ ba tun bẹrẹ lẹhin ikuna, ko ṣe alabapin ninu titiipa eyikeyi ti o nṣiṣẹ lọwọlọwọ.
Lati rii daju eyi, a kan nilo lati rii daju pe lẹhin ikuna apẹẹrẹ ko wa fun akoko kan diẹ ju TTL ti o pọju ti a lo. Ni ọna yii a yoo duro titi di ọjọ ipari ati idasilẹ laifọwọyi ti gbogbo awọn bọtini ti o ṣiṣẹ ni akoko ikuna.
Lilo awọn atunbere idaduro, o ṣee ṣe ni ipilẹ lati ṣaṣeyọri aabo paapaa ni isansa ti eyikeyi itẹramọṣẹ igba pipẹ ni Redis. Ṣe akiyesi, sibẹsibẹ, pe eyi le ja si itanran fun ilodi si iraye si. Fun apẹẹrẹ, ti ọpọlọpọ awọn iṣẹlẹ ba kuna, eto naa yoo di ai si agbaye fun TTL (ati pe ko si orisun ti o le dina ni akoko yii).
A mu wiwa ti algorithm: a fa idinamọ naa
Ti iṣẹ ti o ṣe nipasẹ awọn alabara ni awọn igbesẹ kekere, o ṣee ṣe lati dinku iye akoko titiipa aiyipada ki o ṣe ilana kan fun awọn titiipa titiipa. Ni opo, ti alabara ba n ṣiṣẹ iširo ati pe iye ipari titiipa ti lọ silẹ lewu, o le fi iwe afọwọkọ Lua ranṣẹ si gbogbo awọn iṣẹlẹ ti o fa TTL ti bọtini naa ti bọtini naa ba wa ati pe iye rẹ tun jẹ iye laileto ti o gba nigbati titiipa ti a gba.
Onibara yẹ ki o gbero titiipa kan lati tun gba ti o ba ti ṣakoso lati tii ọpọlọpọ awọn iṣẹlẹ laarin akoko iwulo.
Lootọ, ni imọ-ẹrọ algorithm ko yipada, nitorinaa nọmba ti o pọ julọ ti awọn igbiyanju atunwi lati gba awọn titiipa gbọdọ jẹ opin, bibẹẹkọ awọn ohun-ini iraye si yoo ṣẹ.
orisun: www.habr.com
