Ho notlela ho ajoa ho sebelisoa Redis

Hey Habr!

Kajeno re u hlokomelisa phetolelo ea sengoloa se rarahaneng mabapi le ts'ebetsong ea ho notlela ho ajoa ho sebelisoa Redis mme re u mema hore u bue ka litebello tsa Redis joalo ka sehlooho. Tlhahlobo ea algorithm ea Redlock eo ho buuoang ka eona ho tsoa ho Martin Kleppmann, sengoli sa buka "Likopo tse phahameng tsa mojaro", fuoa mona.

Ho notlela ho ajoa ke mokhoa oa khale oa bohlokoa o sebelisoang libakeng tse ngata moo lits'ebetso tse fapaneng li tlamehang ho sebetsa lisebelisoa tse arolelanoang ka mokhoa o ikhethileng.

Ho na le lilaebrari le li-post tse ngata tse hlalosang mokhoa oa ho kenya ts'ebetsong DLM (Distributed Lock Manager) ho sebelisa Redis, empa laebrari e 'ngoe le e' ngoe e nka mokhoa o fapaneng 'me litiisetso tseo li fanang ka tsona li fokola haholo ha li bapisoa le tse ka finyelloang ka moralo o rarahaneng haholoanyane.

Sehloohong sena re tla leka ho hlalosa algorithm e nang le maemo e bonts'ang mokhoa oa ho kenya ts'ebetsong ho notlela ho ajoa ho sebelisoa Redis. Re tla bua ka algorithm e bitsoang Redlock, e sebelisa mookameli oa senotlolo se abuoang 'me, ho ea ka maikutlo a rona, algorithm ena e bolokehile ho feta mokhoa o tloaelehileng oa mokhoa o le mong. Re tšepa hore sechaba se tla e sekaseka, se fane ka maikutlo, 'me se e sebelise e le qalo ea merero e rarahaneng kapa e meng.

Phethahatso

Pele re fetela tlhalosong ea algorithm, re fana ka lihokelo tse 'maloa tsa ts'ebetsong e entsoeng e lokiselitsoe. Li ka sebelisoa bakeng sa litšupiso.

Ditiisetso tsa Tshireletso le ho ba Teng

Re tla etsa mohlala oa moralo oa rona ka thepa e meraro feela eo re nahanang hore e fana ka litiisetso tse hlokahalang ho sebelisa senotlolo se abuoang hantle.

  1. Thepa ea tshireletso: Ho qheleloa ka thoko. Ka nako efe kapa efe, ke moreki a le mong feela ea ka tšoarang senotlolo.
  2. Boteng ba Thepa A: Ha ho li-deadlocks. Kamehla hoa khoneha ho fumana senotlolo, le haeba moreki ea notletseng sesebelisoa a hloleha kapa a lula karolong e fapaneng ea disk.
  3. Boteng ba Thepa B: Mamello ea Phoso. Ha feela boholo ba li-node tsa Redis li ntse li sebetsa, bareki ba khona ho fumana le ho lokolla linotlolo.

Ke hobane'ng ha ts'ebetsong e thehiloeng ho hloleha ho hlaphoheloa ha hoa lekana tabeng ena
Ho utloisisa seo re tlil'o se ntlafatsa, a re hlahlobeng maemo a hona joale a litaba ka lilaeborari tse ngata tse notletsoeng tse thehiloeng ho Redis.

Mokhoa o bonolo oa ho notlela sesebelisoa u sebelisa Redis ke ho etsa senotlolo mohlala. Ka tloaelo, senotlolo se bōptjoa ka nako e lekanyelitsoeng ea bophelo, sena se finyelloa ho sebelisoa karolo ea ho qetela e fanoeng Redis, kahoo kapele kapa hamorao senotlolo sena se lokolloa (thepa ea 2 lethathamong la rona). Ha moreki a hloka ho lokolla sesebelisoa, e hlakola senotlolo.

Ha u sheba ka lekhetlo la pele, tharollo ena e sebetsa hantle, empa ho na le bothata: meralo ea rona e baka ntlha e le 'ngoe ea ho hloleha. Ho etsahala'ng haeba mohlala oa Redis oa moamoheli o hloleha? Ha re eketse lekhoba he! 'Me re tla e sebelisa haeba sebui se le sieo. Ka bomalimabe, khetho ena ha e sebetse. Ka ho etsa sena, re ke ke ra khona ho kenya ts'ebetsong thepa ea ho ikarola ka nepo eo re e hlokang ho netefatsa ts'ireletso, hobane ho pheta-pheta ho Redis ha ho bonolo.

Ho hlakile hore moetsong o joalo boemo ba morabe bo etsahala:

  1. Client A e fumana senotlolo ho mong'a eona.
  2. Monghali o hlōleha pele ho kenngoa ha senotlolo ho fetisetsoa ho lekhoba.
  3. Molateli o phahamisetsoa ho ba moetapele.
  4. Client B e fumana senotlolo mohloling oo A seng a o notletse. TIRELETSO EA TŠIRELETSO!

Ka linako tse ling ho tloaelehile ka ho feletseng hore maemong a khethehileng, a kang ho hlōleha, bareki ba bangata ba ka tšoara senotlolo ka nako e le 'ngoe. Maemong a joalo, tharollo e thehiloeng ho ikatisa e ka sebelisoa. Ho seng joalo, re khothaletsa tharollo e hlalositsoeng sehloohong sena.

Ts'ebetso e nepahetseng ka mohlala o le mong

Pele re leka ho hlōla mefokolo ea tlhophiso ea ketsahalo e le 'ngoe e hlalositsoeng ka holimo, a re utloisise hore na re ka sebetsana joang le nyeoe ena e bonolo, kaha tharollo ena e hlile e sebetsa lits'ebetsong moo boemo ba morabe bo amohelehang nako le nako, hape hobane ho thibela ketsahalo e le 'ngoe e sebetsa e le motheo o sebelisoang ho algorithm e abuoang e hlalositsoeng mona.

Ho fumana senotlolo, etsa sena:

SET resource_name my_random_value NX PX 30000

Taelo ena e kenya senotlolo ha feela e se e le sieo (khetho ea NX), ka nako e nepahetseng ea 30000 milliseconds (PX kgetho). Senotlolo se behiloe ho "myrandomvalue" Boleng bona bo tlameha ho ba bo ikhethang ho bareki bohle le likopo tsohle tsa senotlolo.
Ha e le hantle, boleng bo sa reroang bo sebelisoa ho lokolla senotlolo ka mokhoa o sireletsehileng, ka mongolo o bolellang Redis: tlosa feela senotlolo haeba se le teng mme boleng bo bolokiloeng ho eona ke sona hantle se neng se lebelletsoe. Sena se finyelloa ho sebelisoa mongolo o latelang oa Lua:

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

Sena se bohlokoa ho thibela senotlolo se tšoaroang ke moreki e mong hore se se tlosoe. Mohlala, moreki a ka fumana senotlolo, a notleloa tšebetsong e itseng e nkang nako e telele ho feta senotlolo sa pele (e le hore senotlolo se be le nako ea ho felloa ke nako), ebe hamorao a tlosa senotlolo seo moreki e mong a se kentseng.
Ho sebelisa DEL e bonolo ha hoa sireletseha hobane moreki a ka tlosa senotlolo se tšoeroeng ke moreki e mong. Ka lehlakoreng le leng, ha u sebelisa mongolo o ka holimo, senotlolo ka seng se "tekena" ka khoele e sa reroang, kahoo ke mofani feela ea kileng a e beha ea ka e ntšang.

Khoele ee e sa reroang e lokela ho ba eng? Ke nahana hore e lokela ho ba li-byte tse 20 ho tloha / dev / urandom, empa u ka fumana mekhoa e sa theko e tlaase ea ho etsa hore khoele e be e ikhethang ka ho lekaneng bakeng sa merero ea hau. Mohlala, ho ka ba hantle ho jala RC4 ka /dev/urandom ebe o hlahisa molatsoana oa pseudo-random ho tsoa ho eona. Tharollo e bonolo e kenyelletsa motsoako oa nako ea unix ho qeto ea microsecond hammoho le ID ea moreki; ha e sireletsehe hakaalo, empa mohlomong e ipapisitse le mosebetsi maemong a mangata.

Nako eo re e sebelisang e le tekanyo ea nako ea bophelo ba senotlolo e bitsoa "lock lifetime". Boleng bona ke nako ea nako pele senotlolo se lokolloa ka bohona le nako eo moreki a tlamehang ho qeta ts'ebetso pele moreki e mong a ka notlela mohloli oo, ntle le ho tlola tiisetso ea ho qheleloa ka thoko. Tiisetso ena e lekanyelitsoe feela fensetereng e itseng ea nako, e qalang ho tloha ha senotlolo se rekoa.

Kahoo re buisane ka mokhoa o motle oa ho fumana le ho lokolla senotlolo. Sistimi (haeba re bua ka sistimi e sa abuoang e nang le mohlala o le mong mme o lula o le teng) e bolokehile. Ha re atoloseng mohopolo ona tsamaisong e ajoang, moo re senang litiiso tse joalo.

Redlock algorithm

Phetolelo e ajoang ea algorithm e nka hore re na le masters a N Redis. Li-node tsena li ikemetse ka ho feletseng ho tse ling, kahoo ha re sebelise ho pheta-pheta kapa mokhoa ofe kapa ofe oa ho hokahanya. Re se re buile ka mokhoa oa ho fumana le ho lokolla senotlolo ka mokhoa o sireletsehileng ketsahalong e le 'ngoe. Re nka e le taba ea hore algorithm, ha e sebetsa ka mohlala o le mong, e tla sebelisa mokhoa ona hantle. Mehlaleng ea rona re behile N ho 5, e leng boleng bo utloahalang. Kahoo, re tla hloka ho sebelisa li-masters tse 5 tsa Redis ho likhomphutha tse fapaneng kapa metjhini e fumanehang ho netefatsa hore li sebetsa haholo ntle le tse ling.

Ho fumana senotlolo, moreki o etsa lits'ebetso tse latelang:

  1. E fumana nako ea hajoale ka milliseconds.
  2. Ka tatellano ho leka ho fumana senotlolo maemong ohle a N, ho sebelisa lebitso le le leng la bohlokoa le boleng bo sa reroang maemong ohle. Mothating oa 2, ha moreki a theha senotlolo hang-hang, moreki o sebelisa tieho ho e fumana e khutšoane ka ho lekana ha e bapisoa le nako eo senotlolo se lokolloang ka sona. Mohlala, haeba nako ea ho thibela e le metsotsoana e 10, tieho e ka ba ho ~ 5-50 milliseconds. Sena se felisa boemo boo moreki a neng a ka lula a koetsoe nako e telele a leka ho fihlela node ea Redis e hlōlehileng: haeba mohlala o sa fumanehe, joale re leka ho hokela ketsahalong e 'ngoe kapele kamoo ho ka khonehang.
  3. Ho nka senotlolo, moreki o lekanya hore na ho fetile nako e kae; Ho etsa sena, e tlosa boleng ba nako ea nnete setempe sa nako se fumanoeng mohatong oa 1. Haeba feela moreki a khonne ho fumana senotlolo maemong a mangata (bonyane 3), le kakaretso ea nako eo e e nkileng ho fumana senotlolo, ka tlase ho nako ea senotlolo, senotlolo se nkoa e le se fumanoeng.
  4. Haeba senotlolo se nkiloe, nako ea ho notlela e nkuoa e le nako ea ho notlela ea mantlha ho tlosoe nako e fetileng e baliloeng mohatong oa 3.
  5. Haeba moreki a hloleha ho fumana senotlolo ka lebaka le itseng (mohlomong e sitiloe ho notlela maemo a N/2+1, kapa nako ea senotlolo e ne e le mpe), e tla leka ho notlolla linako tsohle (esita le tseo e neng e nahana hore e ke ke ea li thibela. ).

Na algorithm e asynchronous?

Algorithm ena e ipapisitse le maikutlo a hore, leha ho se na oache e lumellanang eo lits'ebetso tsohle li neng li tla sebetsa ho eona, nako ea lehae ts'ebetsong ka 'ngoe e ntse e phalla hoo e batlang e le lebelo le ts'oanang, mme phoso e nyane ha e bapisoa le nako eohle eo senotlolo se tlang ka mor'a moo. e lokollotsoe ka bohona. Khopolo ena e tšoana haholo le boemo bo tloaelehileng ba lik'homphieutha tse tloaelehileng: k'homphieutha e 'ngoe le e' ngoe e na le oache ea sebaka seo, 'me hangata re ka itšetleha ka taba ea hore phapang ea nako pakeng tsa lik'homphieutha tse fapaneng e nyenyane.

Mothating ona, re tlameha ho theha ka hloko molao oa rona oa ho qhelela ka thoko: ho behelloa ka thoko ho tiisetsoa ha feela moreki ea tšoereng loko a tsoa ka nako eo senotlolo se sebetsang (boleng bona bo fumanoeng mohatong oa 3), ho tloswa nako e eketsehileng (kakaretso e seng mekae). milliseconds ho lefella phapang ea nako lipakeng tsa lits'ebetso).

Sengoliloeng se latelang se khahlisang se bua haholoanyane ka litsamaiso tse joalo tse hlokang ho hokahanya nako ea linako: Ho hira: mokhoa o sebetsang hantle oa ho mamella liphoso bakeng sa ho tsamaisana ha cache ea faele.

Leka hape ha u hlolehile

Ha moreki a hloleha ho fumana senotlolo, o tlameha ho leka hape kamora tieho e sa lebelloang; sena se etsoa ho tlosa li-clients tse ngata tse lekang ho fumana senotlolo mohloling o le mong ka nako e le 'ngoe (e leng se ka lebisang boemong ba "ho arohana" moo ho se nang bahlōli). Ho feta moo, ha moreki a leka ka potlako ho fumana senotlolo maemong a mangata a Redis, ho fokotsa fensetere moo boemo ba boko bo arohaneng bo ka bang teng (mme tlhoko ea ho leka hape e nyane). Ka hona, ka nepo, moreki o lokela ho leka ho romella litaelo tsa SET maemong a N ka nako e le 'ngoe a sebelisa multiplexing.

Ho bohlokoa ho totobatsa mona hore na ho bohlokoa hakae ho bareki ba hlolehang ho fumana liloko tse ngata ho lokolla liloko tse fumanoeng (ka mokhoa o sa fellang), e le hore ba se ke ba emela hore senotlolo se fele pele senotlolo se ka fumanoa hape. (le hoja ho arohana ha marang-rang ho etsahala, 'me mofani o lahleheloa ke ho kopana le maemo a Redis, joale u tlameha ho lefa kotlo ea ho fumaneha ha u ntse u emetse hore senotlolo se fele).

Lokolla senotlolo

Ho lokolla senotlolo ke ts'ebetso e bonolo e hlokang feela ho notlolla maemo ohle, ho sa tsotelehe hore na moreki o bonahala a notletse ketsahalo e itseng ka katleho.

Mehopolo ea Tšireletso

Na algorithm e bolokehile? A re lekeng ho nahana ka se etsahalang maemong a fapaneng.

Taba ea pele, ha re nke hore moreki o khonne ho fumana senotlolo maemong a mangata. Mohlala o mong le o mong o tla ba le senotlolo se nang le bophelo bo tšoanang bakeng sa bohle. Leha ho le joalo, e 'ngoe le e 'ngoe ea linotlolo tsena e kentsoe ka nako e fapaneng, kahoo e tla felloa ke nako ka linako tse fapaneng. Empa, haeba senotlolo sa pele se kentsoe ka nako e seng mpe ho feta T1 (nako eo re e khethang pele re ikopanya le seva sa pele), mme senotlolo sa ho qetela se kentsoe ka nako e seng mpe ho feta T2 (nako eo karabo e ileng ea amoheloa ka eona). ho tloha ho seva sa ho qetela), joale re kholisehile hore senotlolo sa pele sa sete se felloang ke nako se tla pholoha bonyane MIN_VALIDITY=TTL-(T2-T1)-CLOCK_DRIFT. Linotlolo tse ling kaofela li tla felloa ke nako hamorao, kahoo re ka etsa bonnete ba hore linotlolo tsohle li tla sebetsa ka nako e le 'ngoe bonyane nako ena.

Nakong eo linotlolo tse ngata li lulang li sebetsa, moreki e mong a ke ke a khona ho fumana senotlolo, kaha ts'ebetso ea N/2+1 SET NX e ke ke ea atleha haeba linotlolo tsa N/2+1 li se li le teng. Ka hona, hang ha senotlolo se se se fumanoe, ho ke ke ha khoneha ho se fumana hape ka nako e le 'ngoe (sena se tla tlōla thepa e kopanetsoeng ea ho arohana).
Leha ho le joalo, re batla ho etsa bonnete ba hore bareki ba bangata ba lekang ho fumana senotlolo ka nako e le 'ngoe ba ke ke ba atleha ka nako e le' ngoe.

Haeba moreki a notletse boholo ba maemo a nako e ka bang kapa ho feta nako e telele ea ho notlela, e tla nka hore senotlolo ha sea nepahala 'me se bula maemo. Ka hona, re tlameha feela ho ela hloko taba eo ho eona moreki a ileng a khona ho thibela boholo ba liketsahalo ka nako e ka tlase ho letsatsi la ho felloa ke nako. Tabeng ena, mabapi le khang e ka holimo, ka nako eo MIN_VALIDITY ha ho moreki ea lokelang ho khona ho fumana senotlolo hape. Ka hona, bareki ba bangata ba tla khona ho notlela liketsahalo tsa N / 2 + 1 ka nako e le 'ngoe (e qetellang qetellong ea sethala sa 2) feela ha nako ea ho notlela bongata e le kholo ho feta nako ea TTL, e etsang hore senotlolo se se ke sa sebetsa.

A na u ka fana ka bopaki ba molao ba ts'ireletso, ua bontša mekhoa e ts'oanang e teng, kapa ua fumana phoso ho tse ka holimo?

Mehopolo ea ho fihlella

Ho fumaneha ha sistimi ho ipapisitse le litšobotsi tse tharo tse kholo:

  1. Lokolla liloko (ha linotlolo li felloa ke nako): Linotlolo li tla qetella li fumaneha hape hore li sebelisoe bakeng sa linotlolo.
  2. Taba ea hore hangata bareki ba thusana ka ho tlosa linotlolo ha senotlolo se lakatsehang se e-so fumanehe, kapa se se se fumanoe mme mosebetsi o phethiloe; kahoo ho ka etsahala hore re se ke ra emela hore linotlolo li fele hore re boele re fumane senotlolo.
  3. Taba ea hore ha moreki a hloka ho leka hape ho fumana senotlolo, e emela nako e telele ho feta nako e hlokahalang ho fumana linotlolo tse ngata. Sena se fokotsa monyetla oa hore ho be le boemo bo arohaneng ba boko bo hlahang ha ho qothisana lehlokoa le mehloli.

Leha ho le joalo, ho na le kotlo ea ho fumaneha e lekanang le TTL ea likarolo tsa marang-rang, kahoo haeba ho na le likarolo tse kopanetsoeng, kotlo e ka ba e sa feleng. Sena se etsahala neng kapa neng ha moreki a fumana senotlolo ebe a tsubella karolong e 'ngoe pele a ka e lokolla.

Ha e le hantle, ho fanoe ka likarolo tse sa feleng tsa marang-rang, tsamaiso e ka lula e sa fumanehe ka nako e sa lekanyetsoang.

Tshebetso, failover le fsync

Batho ba bangata ba sebelisa Redis hobane ba hloka ts'ebetso e phahameng ea seva ea senotlolo ho latela latency e hlokahalang ho fumana le ho lokolla liloko, le palo ea ho fumana / ho lokolloa ho ka phethoang motsotsoana. Ho fihlela tlhokahalo ena, ho na le leano la ho buisana le li-server tsa N Redis ho fokotsa latency. Ena ke leano la multiplexing (kapa "multiplexing ea motho ea futsanehileng", moo sokete e behoang ka mokhoa o sa thibeleng, e romela litaelo tsohle, ebe e bala litaelo hamorao, ho nka hore nako ea ho ea le ho khutla pakeng tsa mofani le ketsahalo ka 'ngoe e tšoana) .

Leha ho le joalo, re boetse re tlameha ho ela hloko ho nahanela ho amanang le polokelo ea data ea nako e telele haeba re ikitlaelletsa ho etsa mohlala o nang le ho hlaphoheloa ho ka tšeptjoang ho tloha ho hlōleha.

Ha e le hantle, ho hlakisa taba, ha re nke hore re lokisa Redis ntle le polokelo ea data ea nako e telele ho hang. Moreki o khona ho thibela liketsahalo tse 3 ho tse 5. E 'ngoe ea maemo ao moreki a khonneng ho a thibela e qala hape,' me hajoale ho na le maemo a 3 hape bakeng sa sesebelisoa se tšoanang, seo re ka se thibelang, mme moreki e mong a ka thibela ketsahalo e qalileng hape, a tlola thepa ea ts'ireletso eo. e nka boikhethelo ba liloko.

Haeba o nolofalletsa data pele (AOF), boemo bo tla ntlafala hanyenyane. Mohlala, o ka khothaletsa seva ka ho romella taelo ea SHUTDOWN le ho e qala bocha. Kaha ts'ebetso ea ho felloa ke nako ho Redis e kengoa ts'ebetsong ka mokhoa oo nako e ntseng e tsoela pele ho phalla le ha seva se tingoa, litlhoko tsohle tsa rona li hantle. Sena se tloaelehile ha feela ho koala ho tloaelehileng ho tiisitsoe. Seo u lokelang ho se etsa ha motlakase o khaoha? Haeba Redis e hlophisitsoe ka ho sa feleng, ka fsync synchronizing ka disk motsotsoana o mong le o mong, joale ho ka etsahala hore ka mor'a ho qala bocha re ke ke ra ba le senotlolo sa rona. Ka khopolo, haeba re batla ho netefatsa ts'ireletso ea senotlolo nakong efe kapa efe ea ho qala bocha, re lokela ho lumella fsync=always litlhophisong tsa polokelo ea data ea nako e telele. Sena se tla bolaea ts'ebetso ka botlalo, ho fihlela boemong ba lits'ebetso tsa CP tseo ka tloaelo li sebelisetsoang ho kenya ts'ebetsong liloko tse ajoang ka mokhoa o sireletsehileng.

Empa boemo bo molemo ho feta kamoo bo bonahalang kateng ha u habanya mahlo qalong. Ha e le hantle, ts'ireletso ea algorithm e bolokiloe hobane ha mohlala o tsosolosoa ka mor'a ho hlōleha, ha e sa kenya letsoho ho senotlolo leha e le sefe se sebetsang hona joale.

Ho netefatsa sena, re hloka feela ho etsa bonnete ba hore ka mor'a ho hloleha, mohlala o lula o sa fumanehe ka nako e fetang tekano ea TTL eo re e sebelisang. Ka tsela ena re tla ema ho fihlela letsatsi la ho felloa ke nako le tokollo e iketsang ea linotlolo tsohle tse neng li sebetsa nakong ea ho hloleha.

U sebelisa li-restarts tse liehileng, hoa khoneha ho fihlela ts'ireletso leha ho se na phehello ea nako e telele ho Redis. Leha ho le joalo, hlokomela hore sena se ka fella ka kotlo bakeng sa ho tlola phihlello. Mohlala, ha maemo a mangata a hloleha, sistimi e tla ba sieo lefatšeng ka bophara bakeng sa TTL ('me ha ho sesebelisoa se ka thijoang nakong ena).

Re eketsa ho fumaneha ha algorithm: re atolosa ho thibela

Haeba mosebetsi o etsoang ke bareki o na le mehato e menyenyane, ho ka khoneha ho fokotsa nako ea ho koala le ho sebelisa mokhoa oa ho atolosa linotlolo. Ha e le hantle, haeba moreki a phathahane ka komporo mme boleng ba ho felloa ke nako bo tlase ka kotsi, o ka romella mongolo oa Lua maemong ohle a fetisang TTL ea senotlolo haeba senotlolo se ntse se le teng mme boleng ba sona e ntse e le boleng bo sa reroang bo fumanoeng senotlolo se ile sa fumanoa.

Moreki o lokela ho nahana feela ka senotlolo se lokelang ho rekoa hape haeba se khonne ho notlela boholo ba maemo nakong ea ho sebetsa.

Ke 'nete, ka botekgeniki algorithm ha e fetohe, kahoo palo e kholo ea liteko tse pheta-phetoang tsa ho fumana liloko e tlameha ho fokotsoa, ​​ho seng joalo thepa ea phihlello e tla tlotsoa.

Source: www.habr.com

Eketsa ka tlhaloso