Hoʻokaʻawale ʻia ka laka me ka hoʻohana ʻana iā Redis

E Habr!

I kēia lā ke lawe nei mākou i kou manaʻo i kahi unuhi o kahi ʻatikala paʻakikī e pili ana i ka hoʻokō ʻana i ka hoʻopaʻa ʻia ʻana me ka hoʻohana ʻana iā Redis a kono iā ʻoe e kamaʻilio e pili ana i nā manaʻo o Redis ma ke kumuhana. Ka nānā ʻana o ka algorithm Redlock i nīnau ʻia mai Martin Kleppmann, ka mea kākau o ka puke "Nā noi haawe kiʻekiʻe", haawiia maanei.

ʻO ka hoʻopaʻa ʻia ʻana he kumu mua loa i hoʻohana ʻia i nā kaiapuni he nui kahi e hana ai nā kaʻina hana like ʻole ma nā kumuwaiwai kaʻana like ʻole.

Aia kekahi mau hale waihona puke a me nā pou ma waho e wehewehe ana pehea e hoʻokō ai i ka DLM (Distributed Lock Manager) me ka hoʻohana ʻana iā Redis, akā lawe kēlā me kēia waihona i kahi ala ʻokoʻa a ʻo nā hōʻoia a lākou e hāʻawi ai he nāwaliwali loa i ka mea i hiki ke loaʻa me ka hoʻolālā ʻoi aku ka maʻalahi.

Ma kēia ʻatikala e hoʻāʻo mākou e wehewehe i kahi algorithm canonical conditional e hōʻike ana i ke ʻano o ka hoʻokō ʻana i ka laka paʻa me ka hoʻohana ʻana iā Redis. E kamaʻilio mākou e pili ana i kahi algorithm i kapa ʻia Laka ʻulaʻula, hoʻokō ʻo ia i kahi mana laka i puʻunaue ʻia a, i ko mākou manaʻo, ʻoi aku ka palekana o kēia algorithm ma mua o ke ala hoʻokahi. Manaʻo mākou e kālailai ke kaiāulu iā ia, hāʻawi i nā manaʻo manaʻo, a hoʻohana iā ia i wahi hoʻomaka no nā papahana paʻakikī a ʻokoʻa paha.

Ka hoʻokō ʻana

Ma mua o ka neʻe ʻana i ka wehewehe ʻana i ka algorithm, hāʻawi mākou i kekahi mau loulou i nā hoʻokō mākaukau. Hiki ke hoʻohana ʻia lākou no ka ʻike.

Palekana a loaʻa nā hōʻoia

E hoʻohālike ana mākou i kā mākou hoʻolālā me ʻekolu mau waiwai a mākou e manaʻo nei e hāʻawi i nā hōʻoia liʻiliʻi e pono ai no ka hoʻohana pono ʻana i ka laka puʻupuʻu.

  1. Waiwai palekana: Hoʻokuʻu ʻia kekahi. I kēlā me kēia manawa, hiki i hoʻokahi mea kūʻai ke paʻa i ka laka.
  2. Loaʻa Waiwai A: ʻAʻohe paʻa. Hiki ke loa'a ka laka i nā manawa a pau, 'oiai inā 'a'ole i ho'opa'a 'ia ka punawai a pae paha ma kekahi māhele diski.
  3. Loaʻa ka Waiwai B: Hoʻomanawanui hewa. Ke holo nei ka hapa nui o nā node Redis, hiki i nā mea kūʻai ke loaʻa a hoʻokuʻu i nā laka.

No ke aha ʻaʻole lawa ka hoʻokō e pili ana i ka hoʻihoʻi ʻole ʻana i kēia hihia
No ka hoʻomaopopo ʻana i ka mea a mākou e hoʻomaikaʻi ai, e nānā kākou i ke kūlana o kēia manawa me ka hapa nui o nā hale waihona puke paʻa i hoʻolaha ʻia e pili ana iā Redis.

ʻO ke ala maʻalahi e laka i kahi kumuwaiwai me ka hoʻohana ʻana iā Redis ʻo ka hana ʻana i kahi kī i ka laʻana. ʻO ka maʻamau, hana ʻia kahi kī me ka palena o ke ola, hoʻokō ʻia kēia me ka hoʻohana ʻana i ka hiʻohiʻona expires i hāʻawi ʻia ma Redis, no laila e hoʻokuʻu ʻia kēia kī (waiwai 2 i kā mākou papa inoa). I ka wā e pono ai ka mea kūʻai aku e hoʻokuʻu i ka punawai, holoi ia i ke kī.

I ka nānā mua ʻana, hana maikaʻi kēia hoʻonā, akā aia kahi pilikia: hana kā mākou hoʻolālā i hoʻokahi wahi o ka hāʻule. He aha ka hopena inā hāʻule ka host Redis instance? E hoʻohui kākou i kauā! A e hoʻohana mākou inā ʻaʻole i loaʻa ka mea hōʻike. ʻO ka mea pōʻino, ʻaʻole kūpono kēia koho. Ma ka hana ʻana i kēia, ʻaʻole hiki iā mākou ke hoʻokō pono i ka waiwai hoʻokaʻawale ʻē aʻe e pono ai mākou e hōʻoia i ka palekana, no ka mea, ʻaʻohe asynchronous ka replication ma Redis.

ʻIke loa, i loko o ia ʻano hoʻohālike ke kū nei kahi kūlana lāhui:

  1. Loaʻa ka Client A i ka laka ma ka haku.
  2. Hāʻule ka haku ma mua o ka hoʻoili ʻia ʻana o ke komo kī i ke kauā.
  3. Hoʻokiʻekiʻe ʻia ka mea hahai i alakaʻi.
  4. Loaʻa i ka mea kūʻai B i kahi laka ma ka punawai like a A i laka mua ai. HAAWINA PALAPALA!

I kekahi manawa he mea maʻamau loa i nā kūlana kūikawā, e like me ka hāʻule ʻole, hiki i nā mea kūʻai aku ke paʻa i ka laka i ka manawa like. Ma ia mau hihia, hiki ke hoʻohana ʻia kahi hoʻonā ma muli o ka replication. A i ʻole, paipai mākou i ka hoʻonā i wehewehe ʻia ma kēia ʻatikala.

Hoʻokō pololei me ka laʻana hoʻokahi

Ma mua o ka hoʻāʻo ʻana e lanakila i nā hemahema o ka hoʻonohonoho hoʻonohonoho hoʻokahi i hōʻike ʻia ma luna nei, e hoʻomaopopo kākou pehea e hoʻoponopono pono ai i kēia hihia maʻalahi, no ka mea, ʻoiaʻiʻo kēia hopena i nā noi i ʻae ʻia kahi kūlana lāhui i kēlā me kēia manawa, a no ka hoʻopaʻa ʻana i kahi ʻO ka mea hoʻokahi ke kumu i hoʻohana ʻia i ka algorithm puʻupuʻu i wehewehe ʻia ma aneʻi.

No ka loaʻa ʻana o kahi laka, e hana i kēia:

SET resource_name my_random_value NX PX 30000

Hoʻokomo kēia kauoha i kahi kī inā ʻaʻole i loaʻa (NX koho), me ka manawa kūpono o 30000 milliseconds (koho PX). Hoʻonohonoho ʻia ke kī i "myrandomvalue" Pono kēia waiwai ma waena o nā mea kūʻai aku a me nā noi laka.
ʻO ke kumu, hoʻohana ʻia kahi waiwai maʻamau no ka hoʻokuʻu pono ʻana i ka laka, me kahi palapala e haʻi ana iā Redis: e wehe wale i ke kī inā loaʻa a ʻo ka waiwai i mālama ʻia i loko o ia mea ka mea i manaʻo ʻia. Hoʻokō ʻia kēia me ka hoʻohana ʻana i ka palapala Lua penei:

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

He mea nui kēia no ka pale ʻana i kahi laka i paʻa ʻia e kekahi mea kūʻai aku mai ka wehe ʻana. No ka laʻana, hiki i ka mea kūʻai ke loaʻa i kahi laka, a laila hoʻopaʻa ʻia i kekahi hana ʻoi aku ka lōʻihi ma mua o ka laka mua (no ka manawa e pau ai ke kī), a ma hope e wehe i ka laka a kekahi mea kūʻai aku i kau ai.
ʻAʻole palekana ka hoʻohana ʻana i kahi DEL maʻalahi no ka mea hiki i ka mea kūʻai ke wehe i kahi laka i paʻa e kekahi mea kūʻai aku. I ka hoʻokaʻawale ʻana, i ka wā e hoʻohana ai i ka palapala i luna, ua "kaulima ʻia" kēlā me kēia laka me kahi kaula maʻamau, no laila hiki i ka mea kūʻai aku i kau mua iā ia ke wehe.

He aha kēia string random? Manaʻo wau he 20 bytes mai /dev/urandom, akā hiki iā ʻoe ke loaʻa i nā ala liʻiliʻi e hana i ke kaula kūʻokoʻa no kāu mau kumu. No ka laʻana, maikaʻi e hoʻohua iā RC4 me /dev/urandom a laila e hoʻopuka i kahi kahawai pseudo-random mai ia mea. ʻO kahi hoʻonā maʻalahi ka hui pū ʻana o ka manawa unix i ka hoʻonā microsecond me ka ID mea kūʻai aku; ʻAʻole ia e like me ka palekana, akā aia paha ia i ka hana ma ka hapa nui o nā pōʻaiapili.

ʻO ka manawa a mākou e hoʻohana ai ma ke ʻano he ana o ke ola o ke kī i kapa ʻia ʻo "ke ola laka". ʻO kēia waiwai ka nui o ka manawa ma mua o ka hoʻokuʻu ʻia ʻana o ka laka a me ka nui o ka manawa e hoʻopau ai ka mea kūʻai aku i kahi hana ma mua o ka hiki ʻana i kekahi mea kūʻai aku ke hoʻopaʻa i kēlā kumuwaiwai, me ka ʻole o ka hōʻino ʻana i nā hōʻoiaʻiʻo ʻokoʻa. Hoʻopili wale ʻia kēia hōʻoia i kekahi puka aniani o ka manawa, e hoʻomaka ana mai ka manawa i kūʻai ʻia ai ka laka.

No laila ua kūkākūkā mākou i kahi ala maikaʻi e loaʻa ai a hoʻokuʻu i kahi laka. ʻO ka ʻōnaehana (inā mākou e kamaʻilio e pili ana i kahi ʻōnaehana i hoʻokaʻawale ʻole ʻia me kahi laʻana hoʻokahi a loaʻa mau) paʻa. E hoʻolōʻihi i kēia manaʻo i kahi ʻōnaehana puʻunaue, kahi i loaʻa ʻole iā mākou nā hōʻoia like.

ʻO ka algorithm Redlock

Manaʻo ka mana o ka algorithm e loaʻa iā mākou nā haku N Redis. He kūʻokoʻa loa kēia mau nodes i kekahi i kekahi, no laila ʻaʻole mākou e hoʻohana i ka replication a i ʻole kekahi ʻōnaehana hoʻonohonoho pono ʻole. Ua uhi mua mākou i ka loaʻa ʻana a me ka hoʻokuʻu ʻana i kahi laka ma kahi manawa hoʻokahi. Lawe mākou no ka hāʻawi ʻana i ka algorithm, i ka wā e hana ai me hoʻokahi manawa, e hoʻohana pololei i kēia ʻano. Ma kā mākou mau hiʻohiʻona, hoʻonoho mākou i ka N i 5, kahi waiwai kūpono. No laila, pono mākou e hoʻohana i nā haku 5 Redis ma nā kamepiula ʻokoʻa a i ʻole nā ​​mīkini virtual e hōʻoia i ka hana kūʻokoʻa o kekahi i kekahi.

No ka loaʻa ʻana o kahi laka, hana ka mea kūʻai aku i kēia mau hana:

  1. Loaʻa i ka manawa o kēia manawa i milliseconds.
  2. Ke hoʻāʻo nei e loaʻa i kahi laka ma nā hihia N a pau, me ka hoʻohana ʻana i ka inoa kī like a me nā waiwai maʻamau i nā hihia āpau. Ma ka pae 2, ke hoʻonohonoho ka mea kūʻai aku i kahi laka i kēlā me kēia manawa, hoʻohana ka mea kūʻai aku i kahi lohi no ka loaʻa ʻana o ia mea pōkole e hoʻohālikelike ʻia i ka manawa ma hope o ka hoʻokuʻu ʻana i ka laka. No ka laʻana, inā he 10 kekona ka lōʻihi o ka hoʻopaʻa ʻana, a laila hiki ke lohi i ka laulā o ~5-50 milliseconds. Hoʻopau kēia i ke kūlana i hiki ai i ka mea kūʻai ke hoʻopaʻa ʻia no ka manawa lōʻihi e hoʻāʻo ana e hōʻea i kahi node Redis i hāʻule ʻole: inā ʻaʻole i loaʻa ka hihia, a laila hoʻāʻo mākou e hoʻopili i kahi manawa ʻē aʻe i ka hiki.
  3. No ka lawe ʻana i kahi laka, helu ka mea kūʻai aku i ka nui o ka manawa i hala; No ka hana ʻana i kēia, e unuhi ʻo ia mai ka waiwai manawa maoli i ka timestamp i loaʻa ma ka ʻanuʻu 1. loaʻa ka laka, emi mai ka lōʻihi o ka laka, ua manaʻo ʻia ua loaʻa ka laka.
  4. Inā loaʻa kahi laka, lawe ʻia ka lōʻihi o ka laka i ka lōʻihi o ka laka mua me ka hoʻemi ʻana i ka manawa i hala i helu ʻia ma ka ʻanuʻu 3.
  5. Inā hiki ʻole i ka mea kūʻai ke kiʻi i ka laka no kekahi kumu (a i ʻole hiki iā ia ke laka i nā manawa N/2+1, a i ʻole ka lōʻihi o ka laka ʻana), a laila e hoʻāʻo ʻo ia e wehe i nā manawa āpau (ʻo nā mea i manaʻo ʻia ʻaʻole hiki ke poloka. ).

Asynchronous paha ka algorithm?

Hoʻokumu ʻia kēia algorithm ma luna o ka manaʻo, ʻoiai ʻaʻohe uaki i hoʻonohonoho ʻia kahi e hana ai nā kaʻina hana a pau, e kahe mau ana ka manawa kūloko i kēlā me kēia kaʻina hana ma kahi o ka wikiwiki like, a ua liʻiliʻi ka hewa ke hoʻohālikelike ʻia i ka manawa holoʻokoʻa ma hope o ka laka ʻana. hoʻokuʻu aunoa. Ua like loa kēia manaʻo me ke kūlana maʻamau no nā kamepiula maʻamau: he uaki kūloko ko kēlā me kēia kamepiula, a hiki iā mākou ke hilinaʻi ma ka ʻoiaʻiʻo he liʻiliʻi ka ʻokoʻa manawa ma waena o nā kamepiula like ʻole.

I kēia manawa, pono mākou e hoʻonohonoho pono i kā mākou lula hoʻokaʻawale ʻana: e hōʻoiaʻiʻo ʻia ka hoʻokaʻawale ʻana i kekahi inā ʻo ka mea kūʻai aku e paʻa ana i ka laka e puka i waho i ka wā e paʻa ai ka laka (ua loaʻa kēia waiwai ma ka ʻanuʻu 3), hoʻemi ʻia kekahi manawa hou (ka huina o kekahi. milliseconds e uku i ka ʻokoʻa manawa ma waena o nā kaʻina hana).

Hōʻike hou ka ʻatikala hoihoi e pili ana i nā ʻōnaehana e koi ai i ka hoʻonohonoho ʻana o nā manawa manawa: Nā hoʻolimalima: he hana hoʻomanawanui kūpono no ka hoʻokaʻawale ʻana i ka waihona waihona.

E ho'āʻo hou i ka hāʻule

Ke loaʻa ʻole ka laka i ka mea kūʻai aku, pono ia e hoʻāʻo hou ma hope o ka hoʻopaneʻe ʻana; hana ʻia kēia no ka hoʻokaʻawale ʻana i nā mea kūʻai aku he nui e hoʻāʻo nei e kiʻi i kahi laka ma ka punawai hoʻokahi i ka manawa like (hiki ke alakaʻi i kahi kūlana "split-brain" kahi ʻaʻohe lanakila). Eia kekahi, ʻoi aku ka wikiwiki o ka mea kūʻai aku e hoʻāʻo e loaʻa i kahi laka ma ka hapa nui o nā manawa Redis, ʻoi aku ka liʻiliʻi o ka puka makani kahi e hiki ai ke kūlana ʻokoʻa-lolo (a ʻoi aku ka liʻiliʻi o ka pono no ka hoʻāʻo hou). No laila, pono, e ho'āʻo ka mea kūʻai aku e hoʻouna i nā kauoha SET i nā manawa N i ka manawa like me ka hoʻohana ʻana i ka multiplexing.

He mea pono ke hoʻokūpaʻa ʻia ma ʻaneʻi i ka mea nui o ka poʻe kūʻai ʻole i ka loaʻa ʻole o ka hapa nui o nā laka e hoʻokuʻu i nā laka i loaʻa (ʻāpana), i ʻole lākou e kali a pau ke kī ma mua o ka loaʻa hou ʻana o ka laka i ka waiwai. (ʻoiai inā loaʻa ka ʻāpana pūnaewele, a nalowale ka mea kūʻai aku me nā manawa Redis, a laila pono ʻoe e uku i ka hoʻopaʻi loaʻa ʻoiai e kali ana i ka pau ʻana o ke kī).

E hoʻokuʻu i ka laka

ʻO ka hoʻokuʻu ʻana i kahi laka he hana maʻalahi ia e koi wale ana i ka wehe ʻana i nā manawa āpau, me ka nānā ʻole inā ʻike ʻia ka mea kūʻai aku ua laka maikaʻi ʻia kekahi mea.

Nā Manaʻo Palekana

Ua palekana ka algorithm? E hoʻāʻo kākou e noʻonoʻo i ka mea e hana nei ma nā ʻano hiʻohiʻona like ʻole.

No ka hoʻomaka ʻana, e manaʻo mākou ua hiki i ka mea kūʻai ke loaʻa i kahi laka ma ka hapa nui o nā manawa. Loaʻa i kēlā me kēia laʻana kahi kī me ke ola like no nā mea a pau. Eia naʻe, ua hoʻokomo ʻia kēlā me kēia kī i ka manawa ʻokoʻa, no laila e pau lākou i nā manawa like ʻole. Akā, inā hoʻokomo ʻia ke kī mua i ka manawa ʻaʻole i ʻoi aku ka hewa ma mua o T1 (ka manawa a mākou e koho ai ma mua o ka hoʻopili ʻana i ke kikowaena mua), a ua hoʻokomo ʻia ke kī hope i ka manawa ʻaʻole i ʻoi aku ka hewa ma mua o T2 (ka manawa i loaʻa ai ka pane. mai ke kikowaena hope loa), a laila ua hilinaʻi mākou ʻo ke kī mua i ka hoʻonohonoho i pau e ola ma ka liʻiliʻi MIN_VALIDITY=TTL-(T2-T1)-CLOCK_DRIFT. E pau ana nā kī ʻē aʻe ma hope aku, no laila hiki iā mākou ke hōʻoia e paʻa nā kī āpau i ka manawa like no kēia manawa.

I ka manawa e paʻa ai ka hapa nui o nā kī, ʻaʻole hiki i kekahi mea kūʻai aku ke kiʻi i ka laka, no ka mea ʻaʻole hiki ke kūleʻa nā hana N/2+1 SET NX inā loaʻa nā kī N/2+1. No laila, ke loa'a ka laka, 'a'ole hiki ke loa'a hou i ka manawa ho'okahi (e hō'eha kēia i ka waiwai ho'oka'awale).
Eia nō naʻe, makemake mākou e hōʻoia ʻaʻole hiki i nā mea kūʻai aku he nui e hoʻāʻo e loaʻa i ka laka i ka manawa like ʻaʻole hiki ke kūleʻa i ka manawa like.

Inā hoʻopaʻa ka mea kūʻai aku i ka hapa nui o nā manawa no kahi a ʻoi aku paha ma mua o ka lōʻihi o ka laka, e noʻonoʻo ʻo ia ʻaʻole pono ka laka a wehe i nā manawa. No laila, pono mākou e noʻonoʻo i ka hihia i hiki ai i ka mea kūʻai ke hoʻopaʻa i ka hapa nui o nā manawa i ka manawa ma lalo o ka lā pau. Ma keia hihia, e pili ana i ka manao maluna, i ka manawa MIN_VALIDITY ʻaʻole hiki i ka mea kūʻai ke kiʻi hou i ka laka. No laila, hiki i nā mea kūʻai he nui ke laka i nā manawa N/2+1 i ka manawa like (e pau ana i ka hopena o ka pae 2) wale nō inā ʻoi aku ka nui o ka manawa e laka ai ka hapa nui ma mua o ka manawa TTL, e hoʻolilo ai i ka laka.

Hiki iā ʻoe ke hāʻawi i kahi hōʻoia no ka palekana, e hōʻike i nā algorithm like ʻole, a i ʻole e ʻimi i kahi bug i luna?

Nā Manaʻo Hiki

ʻO ka loaʻa ʻana o ka ʻōnaehana ma muli o ʻekolu mau hiʻohiʻona nui:

  1. Hoʻokuʻu ʻakomi i nā laka (ke pau nā kī): E loaʻa hou nā kī e hoʻohana ʻia no nā laka.
  2. ʻO ka ʻoiaʻiʻo e kōkua mau nā mea kūʻai aku kekahi i kekahi ma ka wehe ʻana i nā laka i ka wā i loaʻa ʻole ai ka laka i makemake ʻia, a i ʻole i loaʻa a ua pau ka hana; no laila ʻaʻole paha mākou e kali a pau nā kī e kiʻi hou i ka laka.
  3. ʻO ka ʻoiaʻiʻo inā pono ka mea kūʻai aku e hoʻāʻo hou e kiʻi i kahi laka, kali ʻo ia no ka manawa like ʻoi aku ka lōʻihi ma mua o ka manawa i koi ʻia e kiʻi i ka hapa nui o nā laka. ʻO kēia ka mea e hōʻemi ai i ka hiki ke loaʻa kahi kūlana o ka lolo i ka wā e hoʻokūkū ai i nā kumuwaiwai.

Eia nō naʻe, aia ka hoʻopaʻi loaʻa e like me ka TTL o nā ʻāpana pūnaewele, no laila inā loaʻa nā ʻāpana pili, hiki i ka hoʻopaʻi ke pau ʻole. Hana ʻia kēia i nā manawa a pau e loaʻa ai i ka mea kūʻai aku kahi laka a laila haehae i kahi ʻāpana ʻē aʻe ma mua o ka hiki ke hoʻokuʻu.

Ma ke kumu, hāʻawi ʻia nā ʻāpana pūnaewele pili ʻole, hiki i kahi ʻōnaehana ke noho ʻole no kahi manawa pau ʻole.

Hana, failover a me fsync

Nui nā poʻe e hoʻohana iā Redis no ka mea makemake lākou i ka hana kikowaena laka kiʻekiʻe e pili ana i ka latency i koi ʻia e kiʻi a hoʻokuʻu i nā laka, a me ka helu o nā loaʻa / hoʻokuʻu i hiki ke hoʻopau ʻia i kēlā me kēia kekona. No ka hoʻokō ʻana i kēia koi, aia kahi hoʻolālā e kamaʻilio me nā kikowaena N Redis e hōʻemi i ka latency. He hoʻolālā multiplexing kēia (a i ʻole "poor man's multiplexing", kahi i hoʻokomo ʻia ai ke kumu i ke ʻano non-blocking mode, hoʻouna i nā kauoha a pau, a heluhelu i nā kauoha ma hope, me ka manaʻo e like ka manawa huakaʻi ma waena o ka mea kūʻai aku a me kēlā me kēia manawa) .

Eia nō naʻe, pono mākou e noʻonoʻo i ka noʻonoʻo e pili ana i ka mālama ʻana i ka ʻikepili no ka wā lōʻihi inā e hoʻoikaika mākou e hana i kahi kumu hoʻohālike me ka hoʻihoʻi pono ʻana mai nā hemahema.

ʻO ke kumu, e wehewehe i ka pilikia, e manaʻo mākou e hoʻonohonoho mākou iā Redis me ka ʻole o ka mālama ʻana i ka ʻikepili lōʻihi. Hiki i ka mea kūʻai ke pale i 3 mai 5 mau manawa. Hoʻomaka hou kekahi o nā manawa a ka mea kūʻai aku i hoʻopaʻa ai, a i kēia manawa he 3 mau manawa hou no ka punawai hoʻokahi, hiki iā mākou ke poloka, a hiki i kekahi mea kūʻai aku, ma ke ʻano, ke ālai i ka manawa i hoʻomaka hou ʻia, e uhai ana i ka waiwai palekana. manaʻo ʻokoʻa nā laka.

Inā ʻae ʻoe i ka ʻikepili ma mua (AOF), e hoʻomaikaʻi iki ke kūlana. No ka laʻana, hiki iā ʻoe ke hoʻolaha i kahi kikowaena ma ka hoʻouna ʻana i ke kauoha SHUTDOWN a hoʻomaka hou. Ma muli o ka hoʻokō ʻia ʻana o nā hana hoʻopau ma Redis i ke ʻano o ka holo ʻana o ka manawa ʻoiai ke pio ʻia ke kikowaena, maikaʻi kā mākou mau koi āpau. He mea maʻamau kēia i ka wā e paʻa ai ka pani maʻamau. He aha ka hana inā pau ka mana? Inā hoʻonohonoho ʻia ʻo Redis e ka paʻamau, me ka hoʻonohonoho ʻana o fsync ma ka disk i kēlā me kēia kekona, a laila hiki paha ma hope o ka hoʻomaka hou ʻana ʻaʻole mākou i kā mākou kī. ʻO ka manaʻo, inā makemake mākou e hōʻoia i ka palekana laka i ka wā e hoʻomaka hou ai, pono mākou e hiki fsync=always i nā hoʻonohonoho no ka mālama ʻikepili no ka wā lōʻihi. E hoʻopau loa kēia i ka hana, a hiki i ke kiʻekiʻe o nā ʻōnaehana CP i hoʻohana mau ʻia no ka hoʻokō paʻa ʻana i nā laka i puʻunaue ʻia.

Akā ʻoi aku ka maikaʻi o ke kūlana ma mua o ka mea i ʻike mua ʻia. Ma ke kumu, mālama ʻia ka palekana o ka algorithm no ka mea i ka wā e hoʻomaka hou ai ka hihia ma hope o ka hāʻule ʻole, ʻaʻole ia e komo hou i kekahi laka e hana nei i kēia manawa.

No ka hōʻoia ʻana i kēia, pono mākou e hōʻoia ma hope o ka hāʻule ʻole ʻana o ka manawa i loaʻa ʻole i kahi manawa ma mua o ka TTL kiʻekiʻe a mākou e hoʻohana ai. Ma kēia ala mākou e kali ai a hiki i ka lā pau a me ka hoʻokuʻu ʻana i nā kī āpau i hana i ka manawa o ka hāʻule.

Ke hoʻohana nei i ka hoʻomaka hou ʻana, hiki ke hoʻokō i ka palekana inā ʻaʻole i loaʻa kahi hoʻomau lōʻihi ma Redis. E hoʻomanaʻo naʻe, hiki i kēia ke hoʻopaʻi no ka hōʻino ʻana i ka hiki. No ka laʻana, inā hāʻule ka hapa nui o nā hihia, e lilo ka ʻōnaehana i ka honua holoʻokoʻa ʻole no ka TTL (a ʻaʻohe kumu e hiki ke ālai ʻia i kēia manawa).

Hoʻonui mākou i ka loaʻa o ka algorithm: hoʻonui mākou i ka pale

Inā he mau ʻanuʻu liʻiliʻi ka hana i hana ʻia e nā mea kūʻai aku, hiki ke hōʻemi i ka lōʻihi o ka laka paʻamau a hoʻokō i kahi hana no ka hoʻonui ʻana i nā laka. Ma ke kumu, inā paʻa ka mea kūʻai aku i ka helu ʻana a he haʻahaʻa loa ka waiwai hoʻopau laka, hiki iā ʻoe ke hoʻouna i kahi palapala Lua i nā manawa āpau e hoʻolōʻihi i ka TTL o ke kī inā e mau ana ke kī a ʻo kona waiwai he kumu waiwai i loaʻa i ka wā loaʻa ka laka.

Pono ka mea kūʻai aku e noʻonoʻo i kahi laka e kiʻi hou ʻia inā ua hiki iā ia ke laka i ka hapa nui o nā manawa i loko o ka manawa kūpono.

ʻOiaʻiʻo, ʻaʻole loli ka algorithm, no laila pono e kaupalena ʻia ka helu kiʻekiʻe o ka hoʻāʻo pinepine ʻana e kiʻi i nā laka, inā ʻaʻole e hōʻino ʻia nā waiwai hiki.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka