NÄkamÄ HighLoad++ konference notiks 6. gada 7. un 2020. aprÄ«lÄ« SanktpÄterburgÄ.
SÄ«kÄka informÄcija un biļetes
GadÄs, ka praktiskÄs prasÄ«bas konfliktÄ ar teoriju, kur netiek Åemti vÄrÄ komerciÄlam produktam svarÄ«gi aspekti. Å ajÄ runÄ ir aprakstÄ«ts process dažÄdu pieeju atlasei un apvienoÅ”anai, lai radÄ«tu cÄloÅsakarÄ«bas komponentus, pamatojoties uz akadÄmiskiem pÄtÄ«jumiem, kuru pamatÄ ir komerciÄla produkta prasÄ«bas. KlausÄ«tÄji uzzinÄs par esoÅ”ajÄm teorÄtiskajÄm pieejÄm loÄ£iskajiem pulksteÅiem, atkarÄ«bas izsekoÅ”anu, sistÄmas droŔību, pulksteÅu sinhronizÄciju un to, kÄpÄc MongoDB izvÄlÄjÄs noteiktus risinÄjumus.
Mihails TjuļeÅevs (turpmÄk tekstÄ MT): ā Es runÄÅ”u par cÄloÅsakarÄ«bu konsekvenci ā tÄ ir funkcija, pie kuras mÄs strÄdÄjÄm MongoDB. Es strÄdÄju sadalÄ«to sistÄmu grupÄ, mÄs to darÄ«jÄm apmÄram pirms diviem gadiem.
Å ajÄ procesÄ man bija jÄiepazÄ«stas ar daudziem akadÄmiskiem pÄtÄ«jumiem, jo āāŔī iezÄ«me ir diezgan labi izpÄtÄ«ta. IzrÄdÄ«jÄs, ka ne viens vien raksts neietilpst ražoÅ”anas datubÄzÄ prasÄ«tajÄ Ä¼oti specifisku prasÄ«bu dÄļ, kas, iespÄjams, ir jebkurÄ ražoÅ”anas lietojumprogrammÄ.
Es runÄÅ”u par to, kÄ mÄs, akadÄmisko pÄtÄ«jumu patÄrÄtÄji, no tÄ pagatavojam kaut ko, ko pÄc tam varam pasniegt saviem lietotÄjiem kÄ gatavu Ädienu, kuru ir Ärti un droÅ”i lietot.
CÄloÅsakarÄ«ba. DefinÄsim jÄdzienus
SÄkumÄ es vÄlos vispÄrÄ«gi pateikt, kas ir cÄloÅsakarÄ«ba. Ir divi varoÅi - Leonards un Penija (seriÄls "LielÄ sprÄdziena teorija"):
PieÅemsim, ka Penija ir EiropÄ un Leonards vÄlas viÅai sarÄ«kot pÄrsteiguma ballÄ«ti. Un viÅÅ” nevar iedomÄties neko labÄku kÄ izmest viÅu no sava draugu saraksta un nosÅ«tÄ«t visiem draugiem jaunumus par plÅ«smu: āPadarÄ«sim Peniju laimÄ«gu!ā (viÅa ir EiropÄ, kamÄr guļ, viÅa to visu neredz un nevar redzÄt, jo viÅas tur nav). Galu galÄ viÅa izdzÄÅ” Å”o ziÅu, izdzÄÅ” to no plÅ«smas un atjauno piekļuvi, lai viÅa neko nepamanÄ«tu un nerastos skandÄls.
Tas viss ir labi, taÄu pieÅemsim, ka sistÄma ir izplatÄ«ta un viss nogÄja greizi. PiemÄram, var gadÄ«ties, ka Pennijas piekļuves ierobežojums notika pÄc Ŕīs ziÅas parÄdÄ«Å”anÄs, ja notikumi nav saistÄ«ti ar cÄloÅiem un sekÄm. Faktiski Å”is ir piemÄrs, kad, lai veiktu uzÅÄmÄjdarbÄ«bas funkciju (Å”ajÄ gadÄ«jumÄ), ir nepiecieÅ”ama cÄloÅsakarÄ«ba.
Faktiski Ŕīs ir diezgan nenozÄ«mÄ«gas datu bÄzes Ä«paŔības - ļoti maz cilvÄku tos atbalsta. PÄriesim pie modeļiem.
Konsekvences modeļi
Kas Ä«sti ir konsekvences modelis datu bÄzÄs? Å Ä«s ir dažas no garantijÄm, ko izkliedÄtÄ sistÄma sniedz par to, kÄdus datus klients var saÅemt un kÄdÄ secÄ«bÄ.
PrincipÄ visi konsekvences modeļi ir saistÄ«ti ar to, cik lÄ«dzÄ«ga izplatÄ«tÄ sistÄma ir sistÄmai, kas darbojas, piemÄram, vienÄ klÄpjdatora mezglÄ. Un Å”Ädi sistÄma, kas darbojas uz tÅ«kstoÅ”iem Ä£eogrÄfiski sadalÄ«tu āmezgluā, ir lÄ«dzÄ«ga klÄpjdatoram, kurÄ visas Ŕīs Ä«paŔības principÄ tiek veiktas automÄtiski.
TÄpÄc konsekvences modeļi tiek piemÄroti tikai sadalÄ«tajÄm sistÄmÄm. VisÄm sistÄmÄm, kas iepriekÅ” pastÄvÄja un darbojÄs ar tÄdu paÅ”u vertikÄlo mÄrogoÅ”anu, Å”Ädas problÄmas nebija. Bija viena bufera keÅ”atmiÅa, un no tÄs vienmÄr tika nolasÄ«ts viss.
Modelis SpÄcÄ«gs
Faktiski pats pirmais modelis ir Strong (vai pieauguma spÄju lÄ«nija, kÄ to bieži sauc). Å is ir konsekvences modelis, kas nodroÅ”ina, ka visas izmaiÅas, tiklÄ«dz tÄs ir apstiprinÄtas, ir redzamas visiem sistÄmas lietotÄjiem.
TÄdÄjÄdi tiek izveidota visu datubÄzes notikumu globÄla secÄ«ba. Tas ir ļoti spÄcÄ«gas konsekvences Ä«paÅ”ums, un tas parasti ir ļoti dÄrgs. TomÄr tas ir ļoti labi atbalstÄ«ts. Tas vienkÄrÅ”i ir ļoti dÄrgs un lÄns ā to vienkÄrÅ”i izmanto reti. To sauc par pieauguma spÄju.
Ir vÄl viens, spÄcÄ«gÄks Ä«paÅ”ums, kas tiek atbalstÄ«ts Spanner ā ar nosaukumu ÄrÄjÄ konsekvence. MÄs par to runÄsim nedaudz vÄlÄk.
CÄloÅsakarÄ«ba
NÄkamais ir Causal, par ko es runÄju tieÅ”i. Starp SpÄcÄ«go un CÄloÅsakarÄ«bu ir vÄl vairÄki apakÅ”lÄ«meÅi, par kuriem es nerunÄÅ”u, bet tie visi ir saistÄ«ti ar cÄloÅsakarÄ«bu. Å is ir svarÄ«gs modelis, jo tas ir spÄcÄ«gÄkais no visiem modeļiem, spÄcÄ«gÄkÄ konsekvence tÄ«kla vai nodalÄ«jumu klÄtbÅ«tnÄ.
CÄloÅi patiesÄ«bÄ ir situÄcija, kurÄ notikumus saista cÄloÅu un seku attiecÄ«bas. Ä»oti bieži tÄs tiek uztvertas kÄ LasÄ«t savas tiesÄ«bas no klienta viedokļa. Ja klients ir ievÄrojis kÄdas vÄrtÄ«bas, viÅÅ” nevar redzÄt vÄrtÄ«bas, kas bijuÅ”as pagÄtnÄ. ViÅÅ” jau sÄk redzÄt prefiksu rÄdÄ«jumus. Tas viss ir saistÄ«ts ar vienu un to paÅ”u.
CÄloÅi kÄ konsekvences modelis ir daļÄja notikumu sakÄrtoÅ”ana serverÄ«, kurÄ notikumi no visiem klientiem tiek novÄroti vienÄ secÄ«bÄ. Å ajÄ gadÄ«jumÄ Leonards un Penija.
IespÄjams
TreÅ”ais modelis ir galÄ«gÄ konsekvence. Tas ir tas, ko atbalsta absolÅ«ti visas izplatÄ«tÄs sistÄmas, minimÄlais modelis, kam vispÄr ir jÄga. Tas nozÄ«mÄ sekojoÅ”o: kad mums ir dažas izmaiÅas datos, kÄdÄ brÄ«dÄ« tÄs kļūst konsekventas.
TÄdÄ brÄ«dÄ« viÅa neko nesaka, citÄdi viÅa pÄrvÄrstos par ÄrÄju konsekvenci ā tas bÅ«tu pavisam cits stÄsts. TomÄr Å”is ir ļoti populÄrs modelis, visizplatÄ«tÄkais. PÄc noklusÄjuma visi izplatÄ«to sistÄmu lietotÄji izmanto iespÄjamo konsekvenci.
Es vÄlos sniegt dažus salÄ«dzinoÅ”us piemÄrus:
Ko nozÄ«mÄ Å”Ä«s bultiÅas?
- Latentums. Palielinoties konsekvences stiprumam, tas acÄ«mredzamu iemeslu dÄļ kļūst lielÄks: jums ir jÄveic vairÄk ierakstu, jÄsaÅem apstiprinÄjums no visiem resursdatoriem un mezgliem, kas piedalÄs klasterÄ«, ka dati jau ir tur. AttiecÄ«gi Eventual Consistency ir ÄtrÄkÄ atbilde, jo tur, kÄ likums, to var pat ierakstÄ«t atmiÅÄ un ar to principÄ pietiks.
- PieejamÄ«ba. Ja mÄs to saprotam kÄ sistÄmas spÄju reaÄ£Ät tÄ«kla pÄrtraukumu, nodalÄ«jumu vai kÄda veida kļūmju klÄtbÅ«tnÄ, kļūdu tolerance palielinÄs, samazinoties konsekvences modelim, jo āāmums pietiek ar to, ka dzÄ«vo viens resursdators un tajÄ paÅ”Ä laikÄ. laiks rada dažus datus. GalÄ«gÄ konsekvence negarantÄ neko par datiem - tas var bÅ«t jebkas.
- AnomÄlijas. TajÄ paÅ”Ä laikÄ, protams, palielinÄs anomÄliju skaits. SpÄcÄ«gÄ konsekvencÄ tiem gandrÄ«z nemaz nevajadzÄtu pastÄvÄt, bet galÄ«gajÄ konsekvenci tie var bÅ«t jebkas. Rodas jautÄjums: kÄpÄc cilvÄki izvÄlas GalÄ«go konsekvenci, ja tajÄ ir anomÄlijas? Atbilde ir tÄda, ka ir piemÄrojami GalÄ«gÄs konsekvences modeļi un anomÄlijas pastÄv, piemÄram, Ä«sÄ laika periodÄ; ir iespÄjams izmantot vedni, lai nolasÄ«tu un vairÄk vai mazÄk nolasÄ«tu konsekventus datus; Bieži vien ir iespÄjams izmantot spÄcÄ«gas konsekvences modeļus. PraksÄ tas darbojas, un bieži vien anomÄliju skaits ir ierobežots laikÄ.
CAP teorÄma
Kad redzat vÄrdus konsekvence, pieejamÄ«ba ā kas jums ienÄk prÄtÄ? TieÅ”i tÄ - CAP teorÄma! Tagad es vÄlos kliedÄt mÄ«tu... Tas neesmu es ā tas esmu Martins Kleppmans, kurÅ” uzrakstÄ«ja brÄ«niŔķīgu rakstu, brÄ«niŔķīgu grÄmatu.
KLP teorÄma ir 2000. gados formulÄts princips, ka konsekvence, pieejamÄ«ba, starpsienas: Åemiet jebkurus divus, un jÅ«s nevarat izvÄlÄties trÄ«s. Tas bija zinÄms princips. Dažus gadus vÄlÄk to kÄ teorÄmu pierÄdÄ«ja Gilberts un LinÄs. Tad to sÄka izmantot kÄ mantru - sistÄmas sÄka dalÄ«t CA, CP, AP un tÄ tÄlÄk.
Å Ä« teorÄma faktiski tika pierÄdÄ«ta Å”Ädiem gadÄ«jumiem... PirmkÄrt, PieejamÄ«ba netika uzskatÄ«ta par nepÄrtrauktu vÄrtÄ«bu no nulles lÄ«dz simtiem (0 - sistÄma ir "mirusi", 100 - reaÄ£Ä Ätri; mÄs esam pieraduÅ”i to uzskatÄ«t tÄ) , bet gan kÄ algoritma Ä«paŔība , kas garantÄ, ka visÄm tÄ izpildÄm tas atgriež datus.
Par reakcijas laiku vispÄr nav ne vÄrda! Ir algoritms, kas atgriež datus pÄc 100 gadiem ā absolÅ«ti brÄ«niŔķīgs pieejamais algoritms, kas ir daļa no KLP teorÄmas.
OtrkÄrt: teorÄma tika pierÄdÄ«ta vienas un tÄs paÅ”as atslÄgas vÄrtÄ«bu izmaiÅÄm, neskatoties uz to, ka Ŕīs izmaiÅas ir mainÄmas. Tas nozÄ«mÄ, ka reÄli tos praktiski neizmanto, jo modeļi ir dažÄdi GalÄ«gÄ konsistence, Strong Consistency (varbÅ«t).
PriekÅ” kam tas viss? TurklÄt KLP teorÄma tieÅ”i tÄdÄ formÄ, kÄdÄ tÄ tika pierÄdÄ«ta, praktiski nav piemÄrojama un tiek izmantota reti. TeorÄtiskÄ formÄ tas kaut kÄ visu ierobežo. IzrÄdÄs zinÄms princips, kas intuitÄ«vi ir pareizs, bet kopumÄ nav pierÄdÄ«ts.
CÄloÅsakarÄ«ba ir spÄcÄ«gÄkais modelis
Tagad notiek tas, ka jÅ«s varat iegÅ«t visas trÄ«s lietas: konsekvenci, pieejamÄ«bu, izmantojot nodalÄ«jumus. KonkrÄti, cÄloÅsakarÄ«bas konsekvence ir spÄcÄ«gÄkais konsekvences modelis, kas joprojÄm darbojas starpsienu (tÄ«kla pÄrtraukumu) klÄtbÅ«tnÄ. TÄpÄc tas rada tik lielu interesi, un tÄpÄc mÄs to pieÅÄmÄm.
PirmkÄrt, tas vienkÄrÅ”o lietojumprogrammu izstrÄdÄtÄju darbu. Jo Ä«paÅ”i liela atbalsta klÄtbÅ«tne no servera: kad visi ieraksti, kas notiek vienÄ klientÄ, tiek garantÄti tÄdÄ paÅ”Ä secÄ«bÄ nonÄkuÅ”i citÄ klientÄ. OtrkÄrt, tas iztur starpsienas.
MongoDB iekÅ”ÄjÄ virtuve
Atceroties, ka ir pusdienas, virzÄmies uz virtuvi. Es pastÄstÄ«Å”u par sistÄmas modeli, proti, kas ir MongoDB tiem, kas par Å”Ädu datu bÄzi dzird pirmo reizi.
MongoDB (turpmÄk tekstÄ āMongoDBā) ir izplatÄ«ta sistÄma, kas atbalsta horizontÄlo mÄrogoÅ”anu, tas ir, sadalÄ«Å”anu; un katrÄ shardÄ tas atbalsta arÄ« datu dublÄÅ”anu, tas ir, replikÄciju.
DalÄ«Å”ana MongoDB (nevis relÄciju datu bÄzÄ) veic automÄtisku lÄ«dzsvaroÅ”anu, tas ir, katra dokumentu kolekcija (vai ātabulaā relÄciju datu izteiksmÄ) tiek sadalÄ«ta gabalos, un serveris tos automÄtiski pÄrvieto starp fragmentiem.
VaicÄjumu marÅ”rutÄtÄjs, kas izplata pieprasÄ«jumus klientam, ir daži klienti, caur kuriem tas darbojas. Tas jau zina, kur un kÄdi dati atrodas, un novirza visus pieprasÄ«jumus uz pareizo shardu.
VÄl viens svarÄ«gs punkts: MongoDB ir viens meistars. Ir viens primÄrais ā tas var uzÅemt ierakstus, kas atbalsta tajÄ esoÅ”Äs atslÄgas. JÅ«s nevarat rakstÄ«t vairÄku galveno funkciju.
MÄs izveidojÄm 4.2 versiju - tur parÄdÄ«jÄs jaunas interesantas lietas. Jo Ä«paÅ”i viÅi ievietoja Lucene - meklÄÅ”anu - proti, izpildÄmo java tieÅ”i Mongo, un tur kļuva iespÄjams veikt meklÄÅ”anu, izmantojot Lucene, tÄpat kÄ Elastica.
Un viÅi izveidoja jaunu produktu - Charts, tas ir pieejams arÄ« Atlas (Mongo paÅ”u mÄkonis). ViÅiem ir bezmaksas lÄ«menis ā jÅ«s varat ar to spÄlÄties. Man ļoti patika Charts ā datu vizualizÄcija, ļoti intuitÄ«va.
SastÄvdaļas CÄloÅsakarÄ«bas konsekvence
Es saskaitÄ«ju apmÄram 230 rakstus, kas ir publicÄti par Å”o tÄmu - no Leslijas Lampertes. Tagad no savas atmiÅas es jums nodoÅ”u dažas Å”o materiÄlu daļas.
Viss sÄkÄs ar Leslijas Lampertas rakstu, kas tapis 1970. gados. KÄ redzat, daži pÄtÄ«jumi par Å”o tÄmu joprojÄm turpinÄs. Tagad Causal konsekvence piedzÄ«vo interesi saistÄ«bÄ ar sadalÄ«to sistÄmu attÄ«stÄ«bu.
Ierobežojumi
KÄdi ierobežojumi pastÄv? Tas patiesÄ«bÄ ir viens no galvenajiem punktiem, jo āāierobežojumi, ko uzliek ražoÅ”anas sistÄma, ļoti atŔķiras no ierobežojumiem, kas pastÄv akadÄmiskajos rakstos. Tie bieži ir diezgan mÄkslÄ«gi.
- PirmkÄrt, āMongoDBā ir viens meistars, kÄ jau teicu (tas ievÄrojami vienkÄrÅ”o).
- MÄs uzskatÄm, ka sistÄmai bÅ«tu jÄatbalsta aptuveni 10 tÅ«kstoÅ”i lauskas. MÄs nevaram pieÅemt nekÄdus arhitektÅ«ras lÄmumus, kas nepÄrprotami ierobežotu Å”o vÄrtÄ«bu.
- Mums ir mÄkonis, bet mÄs pieÅemam, ka cilvÄkam joprojÄm ir jÄbÅ«t iespÄjai, kad viÅÅ” lejupielÄdÄ binÄro failu, palaiž to savÄ klÄpjdatorÄ, un viss darbojas lieliski.
- MÄs pieÅemam kaut ko tÄdu, ko Research reti pieÅem: ÄrÄjie klienti var darÄ«t visu, ko vÄlas. MongoDB ir atvÄrtÄ koda. AttiecÄ«gi klienti var bÅ«t tik gudri un dusmÄ«gi ā var vÄlÄties visu lauzt. MÄs domÄjam, ka bizantieÅ”u feilori varÄtu bÅ«t cÄluÅ”ies.
- ÄrÄjiem klientiem, kas atrodas Ärpus perimetra, ir svarÄ«gs ierobežojums: ja Ŕī funkcija ir atspÄjota, veiktspÄjas pasliktinÄÅ”anÄs nav novÄrojama.
- VÄl viens jautÄjums kopumÄ ir pret akadÄmiskumu: iepriekÅ”Äjo un nÄkamo versiju saderÄ«ba. Vecajiem draiveriem ir jÄatbalsta jauni atjauninÄjumi, un datu bÄzei jÄatbalsta vecie draiveri.
KopumÄ tas viss uzliek ierobežojumus.
CÄloÅsakarÄ«bas komponenti
Tagad es runÄÅ”u par dažÄm sastÄvdaļÄm. Ja Åemam vÄrÄ cÄloÅsakarÄ«bu kopumÄ, mÄs varam atlasÄ«t blokus. MÄs izvÄlÄjÄmies no darbiem, kas pieder noteiktam blokam: AtkarÄ«bas izsekoÅ”ana, pulksteÅu izvÄle, kÄ Å”os pulksteÅus var sinhronizÄt savÄ starpÄ un kÄ mÄs nodroÅ”inÄm droŔību - tas ir aptuvens izklÄsts par to, par ko es runÄÅ”u:
Pilnīga atkarības izsekoŔana
KÄpÄc tas ir vajadzÄ«gs? Lai, kad dati tiek replicÄti, katrs ieraksts, katra datu maiÅa satur informÄciju par to, no kurÄm izmaiÅÄm tas ir atkarÄ«gs. Pati pirmÄ un naivÄ izmaiÅa ir tad, kad katrs ziÅojums, kurÄ ir ieraksts, satur informÄciju par iepriekÅ”Äjiem ziÅojumiem:
Å ajÄ piemÄrÄ skaitlis cirtainajÄs iekavÄs ir ierakstu skaitļi. Dažreiz Å”ie ieraksti ar vÄrtÄ«bÄm tiek pÄrsÅ«tÄ«ti pat pilnÄ«bÄ, dažreiz tiek pÄrsÅ«tÄ«tas dažas versijas. BÅ«tÄ«ba ir tÄda, ka katra izmaiÅa satur informÄciju par iepriekÅ”Äjo (to visu acÄ«mredzami nes sevÄ«).
KÄpÄc mÄs nolÄmÄm neizmantot Å”o pieeju (pilnÄ«ga izsekoÅ”ana)? AcÄ«mredzot tÄpÄc, ka Ŕī pieeja ir nepraktiska: jebkuras izmaiÅas sociÄlajÄ tÄ«klÄ ir atkarÄ«gas no visÄm iepriekÅ”ÄjÄm izmaiÅÄm Å”ajÄ sociÄlajÄ tÄ«klÄ, pÄrsÅ«tot, piemÄram, Facebook vai VKontakte katrÄ atjauninÄjumÄ. TomÄr ir daudz pÄtÄ«jumu par pilnas atkarÄ«bas izsekoÅ”anu ā tie ir pirmssociÄlie tÄ«kli; dažÄs situÄcijÄs tas patieÅ”Äm darbojas.
Skaidra atkarības izsekoŔana
NÄkamais ir ierobežotÄks. Å eit tiek aplÅ«kota arÄ« informÄcijas nodoÅ”ana, bet tikai tÄ, kas ir nepÄrprotami atkarÄ«ga. Kas ir atkarÄ«gs no tÄ, ko parasti nosaka Pieteikums. Kad dati tiek replicÄti, vaicÄjums atgriež atbildes tikai tad, ja iepriekÅ”ÄjÄs atkarÄ«bas ir izpildÄ«tas, tas ir, parÄdÄ«tas. Å Ä« ir cÄloÅsakarÄ«bas konsekvences darbÄ«bas bÅ«tÄ«ba.
ViÅa redz, ka 5. ieraksts ir atkarÄ«gs no 1., 2., 3., 4. ieraksta - attiecÄ«gi viÅa gaida, pirms klients var piekļūt Pennijas piekļuves lÄmuma veiktajÄm izmaiÅÄm, kad visas iepriekÅ”ÄjÄs izmaiÅas jau ir izgÄjuÅ”as cauri datu bÄzei.
Tas arÄ« mums neder, jo joprojÄm ir pÄrÄk daudz informÄcijas, un tas palÄninÄs darbu. Ir arÄ« cita pieeja...
Lamporta pulkstenis
ViÅi ir ļoti veci. Lamporta pulkstenis nozÄ«mÄ, ka Ŕīs atkarÄ«bas ir salocÄ«tas skalÄrÄ funkcijÄ, ko sauc par Lamport pulksteni.
SkalÄrÄ funkcija ir kÄds abstrakts skaitlis. To bieži sauc par loÄ£isko laiku. Ar katru notikumu Å”is skaitÄ«tÄjs palielinÄs. SkaitÄ«tÄjs, kas paÅ”laik ir zinÄms procesam, nosÅ«ta katru ziÅojumu. Skaidrs, ka procesi var bÅ«t nesinhronizÄti, tiem var bÅ«t pavisam citi laiki. TomÄr sistÄma kaut kÄdÄ veidÄ lÄ«dzsvaro pulksteni ar Å”Ädu ziÅojumapmaiÅu. Kas notiek Å”ajÄ gadÄ«jumÄ?
Es sadalÄ«ju Å”o lielo Ŕķembu divÄs daļÄs, lai bÅ«tu skaidrs: draugi var dzÄ«vot vienÄ mezglÄ, kurÄ ir daļa no kolekcijas, un Feed var dzÄ«vot citÄ mezglÄ, kurÄ ir daļa no Ŕīs kolekcijas. Vai ir skaidrs, kÄ viÅi var izkļūt no ierindas? PirmajÄ plÅ«smÄ tiks teikts: āReplicatedā un pÄc tam ā Draugi. Ja sistÄma nesniegs kaut kÄdu garantiju, ka plÅ«sma netiks rÄdÄ«ta, kamÄr netiks piegÄdÄtas arÄ« Friends atkarÄ«bas no Friends kolekcijas, tad mums bÅ«s tieÅ”i tÄda situÄcija, kÄ es minÄju.
JÅ«s redzat, kÄ plÅ«smas skaitÄ«tÄja laiks loÄ£iski palielinÄs:
TÄtad Ŕī Lamporta pulksteÅa un cÄloÅsakarÄ«bas konsekvences galvenÄ Ä«paŔība (to izskaidro ar Lamporta pulksteni) ir Å”Äda: ja mums ir notikumi A un B un notikums B ir atkarÄ«gs no notikuma A*, tad notikuma A loÄ£iskais laiks ir mazÄks par LogicalTime no notikuma B.
* Dažreiz viÅi arÄ« saka, ka A notika pirms B, tas ir, A notika pirms B - Ŕī ir noteikta sakarÄ«ba, kas daļÄji sakÄrto visu notikumu kopumu, kas kopumÄ notika.
PretÄji ir nepareizi. Tas patiesÄ«bÄ ir viens no galvenajiem Lamport pulksteÅa trÅ«kumiem ā daļÄja kÄrtÄ«ba. PastÄv jÄdziens par vienlaicÄ«giem notikumiem, tas ir, notikumiem, kuros ne (A notika pirms B), ne (A notika pirms B). KÄ piemÄru varÄtu minÄt Leonarda paralÄlo pievienoÅ”anu kÄdam citam draugam (pat ne Leonardam, bet, piemÄram, Å eldonam).
Å Ä« ir Ä«paŔība, ko bieži izmanto, strÄdÄjot ar Lamport pulksteÅiem: tie Ä«paÅ”i aplÅ«ko funkciju un no tÄ secina, ka, iespÄjams, Å”ie notikumi ir atkarÄ«gi. Jo viens veids ir patiess: ja LogicalTime A ir mazÄks par LogicalTime B, tad B nevar notikt pirms A; un ja vairÄk, tad varbÅ«t.
Vektoru pulkstenis
Lamport pulksteÅa loÄ£iskÄ attÄ«stÄ«ba ir Vector Clock. Tie atŔķiras ar to, ka katrs Å”eit esoÅ”ais mezgls satur savu atseviŔķu pulksteni, un tie tiek pÄrraidÄ«ti kÄ vektors.
Å ajÄ gadÄ«jumÄ jÅ«s redzat, ka vektora nulles indekss ir atbildÄ«gs par plÅ«smu, bet vektora pirmais indekss ir paredzÄts draugiem (katrs no Å”iem mezgliem). Un tagad tie palielinÄsies: rakstot palielinÄs āPlÅ«smasā nulles indekss - 1, 2, 3:
KÄpÄc Vector Clock ir labÄks? Jo tie ļauj noskaidrot, kuri notikumi ir vienlaicÄ«gi un kad tie notiek dažÄdos mezglos. Tas ir ļoti svarÄ«gi sadalÄ«Å”anas sistÄmai, piemÄram, MongoDB. TomÄr mÄs neizvÄlÄjÄmies Å”o, lai gan tÄ ir brÄ«niŔķīga lieta, un tas darbojas lieliski, un tas, iespÄjams, mums derÄtu...
Ja mums ir 10 tÅ«kstoÅ”i Ŕķembu, mÄs nevaram pÄrsÅ«tÄ«t 10 tÅ«kstoÅ”us komponentu, pat ja mÄs to saspiežam vai izdomÄjam kaut ko citu - lietderÄ«gÄ slodze joprojÄm bÅ«s vairÄkas reizes mazÄka nekÄ visa Ŕī vektora tilpums. TÄpÄc, sakodot sirdi un zobus, mÄs atteicÄmies no Ŕīs pieejas un pÄrgÄjÄm uz citu.
UzgriežÅu atslÄga TrueTime. Atompulkstenis
Es teicu, ka bÅ«s stÄsts par Spanneru. Å Ä« ir forÅ”a lieta, tieÅ”i no XNUMX. gadsimta: atompulksteÅi, GPS sinhronizÄcija.
KÄda ir ideja? āSpannerā ir Google sistÄma, kas nesen pat kļuva pieejama cilvÄkiem (tie pievienoja tai SQL). Katram darÄ«jumam ir noteikts laika zÄ«mogs. TÄ kÄ laiks tiek sinhronizÄts*, katram notikumam var pieŔķirt noteiktu laiku ā atompulksteÅiem ir gaidÄ«Å”anas laiks, pÄc kura tiek garantÄts, ka ānotiksā cits laiks.
TÄdÄjÄdi, vienkÄrÅ”i ierakstot datu bÄzÄ un gaidot kÄdu laiku, notikuma serializÄjamÄ«ba tiek automÄtiski garantÄta. ViÅiem ir visspÄcÄ«gÄkais Konsekvences modelis, kÄdu principÄ var iedomÄties ā tÄ ir ÄrÄjÄ konsekvence.
* Å Ä« ir galvenÄ problÄma ar Lampart pulksteÅiem - tie nekad nav sinhroni sadalÄ«tajÄs sistÄmÄs. Tie var atŔķirties; pat ar NTP tie joprojÄm nedarbojas ļoti labi. "Spanner" ir atompulkstenis un sinhronizÄcija, Ŕķiet, ir mikrosekundes.
KÄpÄc mÄs neizvÄlÄjÄmies? MÄs neuzskatÄm, ka mÅ«su lietotÄjiem ir iebÅ«vÄts atompulkstenis. Kad tie parÄdÄ«sies, katrÄ portatÄ«vajÄ datorÄ iebÅ«vÄti, bÅ«s kaut kÄda superforÅ”a GPS sinhronizÄcija - tad jÄ... Bet pagaidÄm labÄkais, kas iespÄjams ir Amazon, Base Stations - fanÄtiÄ·iem... TÄ nu izmantojÄm citus pulksteÅus .
Hibrīda pulkstenis
Tas faktiski ir tas, kas atzÄ«mÄ MongoDB, nodroÅ”inot cÄloÅsakarÄ«bas konsekvenci. KÄ tie ir hibrÄ«di? HibrÄ«ds ir skalÄra vÄrtÄ«ba, bet tai ir divas sastÄvdaļas:
- Pirmais ir Unix laikmets (cik sekundes ir pagÄjuÅ”as kopÅ” ādatoru pasaules sÄkumaā).
- Otrais ir neliels pieaugums, arī 32 bitu neparakstīts int.
Tas arÄ« viss, patiesÄ«bÄ. Ir Å”Äda pieeja: daļa, kas ir atbildÄ«ga par laiku, visu laiku tiek sinhronizÄta ar pulksteni; katru reizi, kad notiek atjauninÄjums, Ŕī daļa tiek sinhronizÄta ar pulksteni, un izrÄdÄs, ka laiks vienmÄr ir vairÄk vai mazÄk pareizs, un pieaugums ļauj atŔķirt notikumus, kas notikuÅ”i vienÄ un tajÄ paÅ”Ä laika posmÄ.
KÄpÄc tas ir svarÄ«gi MongoDB? Jo tas ļauj noteiktÄ laika brÄ«dÄ« izveidot kaut kÄdus rezerves restorÄnus, tas ir, pasÄkums tiek indeksÄts pÄc laika. Tas ir svarÄ«gi, ja nepiecieÅ”ami noteikti pasÄkumi; Datu bÄzei notikumi ir izmaiÅas datu bÄzÄ, kas notikuÅ”as noteiktos laika intervÄlos.
VissvarÄ«gÄko iemeslu es pastÄstÄ«Å”u tikai jums (lÅ«dzu, nevienam nesakiet)! MÄs to darÄ«jÄm, jo āāÅ”Ädi MongoDB OpLog izskatÄs sakÄrtoti, indeksÄti dati. OpLog ir datu struktÅ«ra, kas satur pilnÄ«gi visas izmaiÅas datu bÄzÄ: tÄs vispirms nonÄk OpLog, un tad tÄs tiek lietotas paÅ”Ä krÄtuvÄ, ja tas ir replicÄts datums vai fragments.
Tas bija galvenais iemesls. TomÄr datu bÄzes izveidei ir arÄ« praktiskas prasÄ«bas, kas nozÄ«mÄ, ka tai jÄbÅ«t vienkÄrÅ”ai - maz koda, pÄc iespÄjas mazÄk bojÄtu lietu, kas jÄpÄrraksta un jÄpÄrbauda. Tas, ka mÅ«su oplogus indeksÄja hibrÄ«dpulksteÅi, ļoti palÄ«dzÄja un ļÄva izdarÄ«t pareizo izvÄli. Tas patieÅ”Äm atmaksÄjÄs un kaut kÄ maÄ£iski strÄdÄja pie paÅ”a pirmÄ prototipa. Tas bija ļoti forÅ”i!
PulksteÅa sinhronizÄcija
ZinÄtniskajÄ literatÅ«rÄ ir aprakstÄ«tas vairÄkas sinhronizÄcijas metodes. Es runÄju par sinhronizÄciju, kad mums ir divas dažÄdas shards. Ja ir viena kopiju kopa, sinhronizÄcija nav nepiecieÅ”ama: tas ir āviens galvenaisā; mums ir OpLog, kurÄ ietilpst visas izmaiÅas - Å”ajÄ gadÄ«jumÄ viss jau ir secÄ«gi sakÄrtots paÅ”Ä āOplogā. Bet, ja mums ir divas dažÄdas shards, Å”eit ir svarÄ«ga laika sinhronizÄcija. Å eit vairÄk palÄ«dzÄja vektora pulkstenis! Bet mums tÄdu nav.
Otrais ir piemÄrots - tas ir āSirdspukstiā. Ir iespÄjams apmainÄ«ties ar dažiem signÄliem, kas rodas katrÄ laika vienÄ«bÄ. Bet sirdsdarbÄ«ba ir pÄrÄk lÄna, mÄs nevaram nodroÅ”inÄt klientam latentumu.
Patiesais laiks, protams, ir brÄ«niŔķīga lieta. Bet, atkal, tÄ laikam ir nÄkotne... Lai gan to jau var izdarÄ«t AtlasÄ, jau ir Ätrie āAmazonā laika sinhronizatori. Bet tas nebÅ«s pieejams visiem.
Tenkas ir tad, kad visos ziÅojumos ir iekļauts laiks. Tas ir aptuveni tas, ko mÄs lietojam. Katrs ziÅojums starp mezgliem, draiveri, datu mezgla marÅ”rutÄtÄju, absolÅ«ti viss MongoDB ir kaut kÄds elements, datu bÄzes komponents, kas satur pulksteni, kas darbojas. ViÅiem visur ir hibrÄ«dlaika nozÄ«me, tas tiek pÄrraidÄ«ts. 64 biti? Tas ļauj, tas ir iespÄjams.
KÄ tas viss darbojas kopÄ?
Å eit es aplÅ«koju vienu kopiju komplektu, lai to nedaudz atvieglotu. Ir primÄrais un sekundÄrais. SekundÄrÄ veic replikÄciju un ne vienmÄr ir pilnÄ«bÄ sinhronizÄta ar primÄro.
IevietoÅ”ana notiek āPrimeryā ar noteiktu laika vÄrtÄ«bu. Å is ieliktnis palielina iekÅ”Äjo skaitu par 11, ja tas ir maksimÄlais. Vai arÄ« tas pÄrbaudÄ«s pulksteÅa vÄrtÄ«bas un sinhronizÄs ar pulksteni, ja pulksteÅa vÄrtÄ«bas ir lielÄkas. Tas ļauj sakÄrtot pÄc laika.
PÄc tam, kad viÅÅ” veic ierakstu, notiek svarÄ«gs brÄ«dis. Pulkstenis atrodas "MongoDB" un tiek palielinÄts tikai tad, ja tiek rakstÄ«ts uz "Oplog". Å is ir notikums, kas maina sistÄmas stÄvokli. PilnÄ«gi visos klasiskajos rakstos par notikumu tiek uzskatÄ«ts, kad ziÅojums nokļūst mezglÄ: ziÅojums ir pienÄcis, kas nozÄ«mÄ, ka sistÄma ir mainÄ«jusi savu stÄvokli.
Tas ir saistÄ«ts ar faktu, ka izpÄtes laikÄ nav pilnÄ«bÄ skaidrs, kÄ Å”is ziÅojums tiks interpretÄts. MÄs noteikti zinÄm, ka, ja tas nav atspoguļots āOplogā, tad tas nekÄdÄ veidÄ netiks interpretÄts, un sistÄmas stÄvokļa izmaiÅas ir tikai ieraksts āOplogā. Tas mums visu vienkÄrÅ”o: modelis to vienkÄrÅ”o un ļauj sakÄrtot vienÄ kopiju komplektÄ, kÄ arÄ« daudzas citas noderÄ«gas lietas.
Tiek atgriezta vÄrtÄ«ba, kas jau ir ierakstÄ«ta āOplogā ā mÄs zinÄm, ka āOplogā jau satur Å”o vÄrtÄ«bu, un tÄs laiks ir 12. Tagad, teiksim, nolasÄ«Å”ana sÄkas no cita mezgla (sekundÄrÄ) un pÄrraida pÄcClusterTime in ziÅa. ViÅÅ” saka: āMan vajag visu, kas notika vismaz pÄc pulksten 12 vai divpadsmitosā (skat. attÄlu augstÄk).
To sauc par konsekventu cÄloÅsakarÄ«bu (CAT). TeorÄtiski pastÄv tÄds jÄdziens, ka tas ir kaut kÄds laika posms, kas pats par sevi ir konsekvents. Å ajÄ gadÄ«jumÄ mÄs varam teikt, ka tas ir sistÄmas stÄvoklis, kas tika novÄrots 12. laikÄ.
Tagad Å”eit vÄl nav nekÄ, jo tas simulÄ situÄciju, kad jums ir nepiecieÅ”ams sekundÄrais, lai replicÄtu datus no primÄrÄ. ViÅÅ” gaida... Un tagad ir saÅemti dati - viÅÅ” atgriež Ŕīs vÄrtÄ«bas.
GandrÄ«z tÄ tas viss darbojas. GandrÄ«z.
Ko nozÄ«mÄ āgandrÄ«zā? PieÅemsim, ka ir kÄds, kurÅ” ir izlasÄ«jis un sapratis, kÄ tas viss darbojas. Es sapratu, ka katru reizi, kad notiek ClusterTime, tas atjaunina iekÅ”Äjo loÄ£isko pulksteni, un tad nÄkamais ieraksts palielinÄs par vienu. Å Ä« funkcija aizÅem 20 rindiÅas. PieÅemsim, ka Ŕī persona pÄrraida lielÄko 64 bitu numuru, no kura atskaitÄ«ts viens.
KÄpÄc "mÄ«nus viens"? TÄ kÄ iekÅ”Äjais pulkstenis tiks aizstÄts ar Å”o vÄrtÄ«bu (acÄ«mredzot, tas ir lielÄkais iespÄjamais un lielÄks par paÅ”reizÄjo laiku), tad āOplogā tiks ievadÄ«ts ieraksts, un pulkstenis tiks palielinÄts par citu vienÄ«bu - un tas jau bÅ«s ir maksimÄlÄ vÄrtÄ«ba (vienkÄrÅ”i ir visas mÄrvienÄ«bas, nav kur citur iet) , unsaint ints).
Ir skaidrs, ka pÄc tam sistÄma kļūst absolÅ«ti nepieejama nekam. To var tikai izkraut un iztÄ«rÄ«t - daudz roku darba. Pilna pieejamÄ«ba:
TurklÄt, ja tas tiek atkÄrtots kaut kur citur, viss klasteris vienkÄrÅ”i nokrÄ«t. AbsolÅ«ti nepieÅemama situÄcija, kuru ikviens var organizÄt ļoti Ätri un vienkÄrÅ”i! TÄpÄc mÄs Å”o brÄ«di uzskatÄ«jÄm par vienu no vissvarÄ«gÄkajiem. KÄ to novÄrst?
Mūsu veids ir parakstīt clusterTime
TÄdÄ veidÄ tas tiek pÄrraidÄ«ts ziÅojumÄ (pirms zilÄ teksta). Bet mÄs arÄ« sÄkÄm Ä£enerÄt parakstu (zils teksts):
Parakstu Ä£enerÄ atslÄga, kas tiek glabÄta datubÄzÄ, droÅ”Ä perimetrÄ; pati tiek Ä£enerÄta un atjauninÄta (lietotÄji par to neko neredz). Tiek Ä£enerÄts jaucÄjkods, un katrs ziÅojums tiek parakstÄ«ts, kad tas ir izveidots, un apstiprinÄts, kad tas tiek saÅemts.
DroÅ”i vien cilvÄku prÄtos rodas jautÄjums: "Cik tas palÄnina lietas?" Es jums teicu, ka tam vajadzÄtu darboties Ätri, it Ä«paÅ”i, ja Ŕīs funkcijas nav.
Ko Å”ajÄ gadÄ«jumÄ nozÄ«mÄ lietot cÄloÅsakarÄ«bas konsekvenci? Tas ir paredzÄts, lai parÄdÄ«tu parametru afterClusterTime. Bez tÄ tas tik un tÄ vienkÄrÅ”i nodos vÄrtÄ«bas. Tenkas, sÄkot ar versiju 3.6, vienmÄr darbojas.
Ja mÄs atstÄsim pastÄvÄ«gu parakstu Ä£enerÄÅ”anu, tas palÄninÄs sistÄmu pat tad, ja nebÅ«s funkcijas, kas neatbilst mÅ«su pieejÄm un prasÄ«bÄm. TÄtad, ko mÄs darÄ«jÄm?
Dariet to Ätri!
Diezgan vienkÄrÅ”a lieta, bet triks ir interesants ā padalÄ«Å”os, varbÅ«t kÄdam tas interesÄs.
Mums ir hash, kas saglabÄ parakstÄ«tos datus. Visi dati iet caur keÅ”atmiÅu. KeÅ”atmiÅÄ neparakstÄ«ts konkrÄts laiks, bet diapazons. Kad tiek saÅemta kÄda vÄrtÄ«ba, mÄs Ä£enerÄjam diapazonu, maskÄjam pÄdÄjos 16 bitus un parakstÄm Å”o vÄrtÄ«bu:
SaÅemot Å”Ädu parakstu, mÄs paÄtrinÄm sistÄmu (nosacÄ«ti) 65 tÅ«kstoÅ”us reižu. Tas darbojas lieliski: kad mÄs veicÄm eksperimentus, laiks faktiski samazinÄjÄs par 10 tÅ«kstoÅ”iem reižu, kad mums bija secÄ«ga atjauninÄÅ”ana. Ir skaidrs, ka, ja tie ir pretrunÄ, tas nedarbojas. Bet vairumÄ praktisko gadÄ«jumu tas darbojas. Diapazona paraksta un paraksta kombinÄcija atrisinÄja droŔības problÄmu.
Ko mÄs esam iemÄcÄ«juÅ”ies?
MÄcÄ«bas, ko mÄs no tÄ guvÄm:
- JÄlasa materiÄli, stÄsti, raksti, jo mums ir daudz interesanta. Kad mÄs strÄdÄjam pie kÄdas funkcijas (it Ä«paÅ”i tagad, kad veicÄm darÄ«jumus utt.), mums ir jÄlasa un jÄsaprot. Tas prasa laiku, bet patiesÄ«bÄ ir ļoti noderÄ«gi, jo ļauj saprast, kur mÄs atrodamies. Å Ä·iet, ka mÄs neko jaunu neizdomÄjÄm - mÄs vienkÄrÅ”i paÅÄmÄm sastÄvdaļas.
VispÄr jau ir zinÄma atŔķirÄ«ba domÄÅ”anÄ, kad notiek akadÄmiskÄ konference (Sigmon, piemÄram) ā visi koncentrÄjas uz jaunÄm idejÄm. Kas jauns mÅ«su algoritmÄ? Å eit nav nekÄ Ä«paÅ”i jauna. Jaunums drÄ«zÄk slÄpjas tajÄ, kÄ mÄs apvienojÄm esoÅ”Äs pieejas. TÄpÄc pirmÄ lieta ir izlasÄ«t klasiku, sÄkot ar Lampart.
- RažoÅ”anÄ prasÄ«bas ir pavisam citas. Esmu pÄrliecinÄts, ka daudzi no jums nesaskaras ar āsfÄriskÄmā datu bÄzÄm abstraktÄ vakuumÄ, bet gan ar normÄlÄm, reÄlÄm lietÄm, kurÄm ir problÄmas ar pieejamÄ«bu, latentumu un kļūdu toleranci.
- PÄdÄjÄ lieta ir tÄda, ka mums bija jÄaplÅ«ko dažÄdas idejas un jÄapvieno vairÄki pilnÄ«gi atŔķirÄ«gi raksti vienÄ pieejÄ, kopÄ. Ideja par parakstÄ«Å”anu, piemÄram, vispÄr radÄs no raksta, kurÄ tika aplÅ«kots Paxos protokols, kas nebizantieÅ”u neveiksminiekiem ir autorizÄcijas protokolÄ, bizantieÅ”iem - Ärpus autorizÄcijas protokola... KopumÄ mÄs tieÅ”i tÄ arÄ« esam. beidzÄs darÄ«t.
Å eit nav absolÅ«ti nekÄ jauna! Bet tiklÄ«dz mÄs to visu sajaucÄm kopÄ... Tas ir tas pats, kas teikt, ka Olivier salÄtu recepte ir muļķības, jo olas, majonÄze un gurÄ·i jau ir izdomÄti... Runa ir par to paÅ”u stÄstu.
Es pabeigŔu ar Ŕo. Paldies!
jautÄjumi
KlausÄ«tÄju jautÄjums (turpmÄk tekstÄ B): ā Paldies, Mihail, par ziÅojumu! TÄma par laiku ir interesanta. JÅ«s izmantojat Tenkas. ViÅi teica, ka katram ir savs laiks, katrs zina savu vietÄjo laiku. Cik es saprotu, mums ir draiveris - var bÅ«t daudz klientu ar draiveriem, vaicÄjumu plÄnotÄjiem arÄ«, ŔķembÄm arÄ«... Un ko sistÄma noved, ja pÄkÅ”Åi rodas neatbilstÄ«ba: kÄds nolemj, ka tas ir paredzÄts minÅ«ti priekÅ”Ä, kÄds minÅ«ti atpaliek? Kur mÄs nonÄksim?
MT: ā TieÅ”Äm lielisks jautÄjums! Es tikai gribÄju runÄt par lauskas. Ja es pareizi saprotu jautÄjumu, mums ir Å”Äda situÄcija: ir 1 un 2, nolasÄ«Å”ana notiek no Ŕīm divÄm ŔķembÄm - tÄm ir nesakritÄ«ba, tÄs savstarpÄji nesadarbojas, jo laiks, ko viÅi zina, ir atŔķirÄ«gs, it Ä«paÅ”i laiks, kad tie pastÄv oplogos.
PieÅemsim, ka shard 1 izveidoja miljonu ierakstu, shard 2 vispÄr neko nedarÄ«ja, un pieprasÄ«jums tika saÅemts lÄ«dz diviem shardiem. Un pirmajam ir afterClusterTime vairÄk nekÄ miljons. Å ÄdÄ situÄcijÄ, kÄ jau paskaidroju, shard 2 nekad neatbildÄs.
In: ā GribÄju zinÄt, kÄ viÅi sinhronizÄjas un izvÄlas vienu loÄ£isko laiku?
MT: - Ä»oti viegli sinhronizÄt. Shard, kad pÄcClusterTime nÄk pie viÅa un viÅÅ” neatrod laiku āOplogā, iniciÄ nav apstiprinÄts. Tas ir, viÅÅ” paceļ savu laiku ar rokÄm lÄ«dz Å”ai vÄrtÄ«bai. Tas nozÄ«mÄ, ka tajÄ nav neviena notikuma, kas atbilstu Å”im pieprasÄ«jumam. ViÅÅ” rada Å”o notikumu mÄkslÄ«gi un tÄdÄjÄdi kļūst par cÄloÅsakarÄ«bu konsekventu.
In: ā Ko darÄ«t, ja pÄc tam viÅam atnÄks kÄdi citi notikumi, kas pazuda kaut kur tÄ«klÄ?
MT: ā Shard ir veidots tÄ, lai tie vairs nenÄktu, jo tas ir viens meistars. Ja viÅÅ” jau ir pierakstÄ«jies, tad viÅi nenÄks, bet nÄks vÄlÄk. Nevar gadÄ«ties, ka kaut kas kaut kur iestrÄgst, tad viÅÅ” neraksta, un tad pienÄk Å”ie notikumi - un cÄloÅsakarÄ«ba tiek salauzta. Kad viÅÅ” neraksta, viÅiem visiem jÄnÄk nÄkamajiem (viÅÅ” tos gaidÄ«s).
In: ā Man ir vairÄki jautÄjumi par rindÄm. CÄloÅsakarÄ«ba paredz, ka ir noteikta darbÄ«bu rinda, kas jÄveic. Kas notiks, ja kÄda no mÅ«su pakÄm pazÅ«d? Å eit nÄk 10., 11.... 12. ir pazudis, un visi pÄrÄjie gaida, kad tas piepildÄ«sies. Un pÄkÅ”Åi mÅ«su automaŔīna nomira, mÄs neko nevaram darÄ«t. Vai ir maksimÄlais rindas garums, kas uzkrÄjas pirms izpildes? KÄda nÄvÄjoÅ”a neveiksme notiek, ja tiek zaudÄts kÄds no stÄvokļiem? TurklÄt, ja pierakstÄm, ka ir kÄds iepriekÅ”Äjais stÄvoklis, tad no tÄ kaut kÄ jÄsÄk? Bet viÅi viÅu neatgrÅ«da!
MT: ā ArÄ« lielisks jautÄjums! Ko mÄs darÄm? MongoDB ir kvoruma rakstÄ«Å”anas un kvoruma lasÄ«Å”anas jÄdziens. KÄdos gadÄ«jumos ziÅa var pazust? Ja rakstÄ«Å”ana nav kvorums vai lasÄ«Å”ana nav kvorums (var pieÄ·erties arÄ« kÄda veida atkritumi).
AttiecÄ«bÄ uz cÄloÅsakarÄ«bu konsekvenci tika veikts liels eksperimentÄls tests, kura rezultÄts bija tÄds, ka gadÄ«jumÄ, ja rakstÄ«Å”ana un lasÄ«Å”ana nav kvoruma, rodas cÄloÅsakarÄ«bas konsekvences pÄrkÄpumi. TieÅ”i tÄ, ko tu saki!
MÅ«su padoms: izmantojot cÄloÅsakarÄ«bu, izmantojiet vismaz kvoruma nolasÄ«jumu. Å ajÄ gadÄ«jumÄ nekas netiks zaudÄts, pat ja tiek zaudÄts kvoruma ieraksts... Å Ä« ir ortogonÄla situÄcija: ja lietotÄjs nevÄlas, lai dati tiktu zaudÄti, viÅam ir jÄizmanto kvoruma ieraksts. CÄloÅsakarÄ«ba negarantÄ izturÄ«bu. IzturÄ«bu garantÄ replikÄcija un ar replikÄciju saistÄ«tÄs iekÄrtas.
In: ā Kad mÄs izveidojam instanci, kas veic sadalÄ«Å”anu mÅ«su vietÄ (nevis galvenais, bet attiecÄ«gi vergs), tÄ paļaujas uz savas maŔīnas Unix laiku vai uz āmasterā laiku; Vai tas tiek sinhronizÄts pirmo reizi vai periodiski?
MT: ā Es tagad precizÄÅ”u. Shard (t.i., horizontÄlais nodalÄ«jums) ā tur vienmÄr ir primÄrais. Un skaidai var bÅ«t āsaimnieksā, un var bÅ«t kopijas. Bet shard vienmÄr atbalsta ierakstÄ«Å”anu, jo tam ir jÄatbalsta kÄds domÄns (shardam ir primÄrais).
In: ā TÄtad viss ir atkarÄ«gs tikai no āsaimniekaā? Vai vienmÄr tiek izmantots meistara laiks?
MT: - JÄ. TÄlaini var teikt: pulkstenis tikŔķ, kad notiek ieieÅ”ana āsaimniekÄā, āOplogā.
In: ā Mums ir klients, kurÅ” pieslÄdzas un kuram par laiku nekas nav jÄzina?
MT: ā Tev vispÄr nekas nav jÄzina! Ja mÄs runÄjam par to, kÄ tas darbojas uz klientu: kad klients vÄlas izmantot cÄloÅsakarÄ«bu, viÅam ir jÄatver sesija. Tagad viss ir: transakcijas sesijÄ un tiesÄ«bu izgÅ«Å”ana... Sesija ir loÄ£isku notikumu sakÄrtoÅ”ana, kas notiek ar klientu.
Ja viÅÅ” atver Å”o sesiju un saka, ka vÄlas cÄloÅsakarÄ«bu (ja sesija pÄc noklusÄjuma atbalsta cÄloÅsakarÄ«bu), viss darbojas automÄtiski. VadÄ«tÄjs atceras Å”o laiku un palielina to, saÅemot jaunu ziÅojumu. Tas atceras, kÄdu atbildi iepriekÅ”ÄjÄ atgrieza no servera, kas atgrieza datus. NÄkamajÄ pieprasÄ«jumÄ bÅ«s ietverts afterCluster ("laiks, kas lielÄks par Å”o").
Klientam absolÅ«ti nekas nav jÄzina! Tas viÅam ir pilnÄ«gi necaurspÄ«dÄ«gs. Ja cilvÄki izmanto Ŕīs funkcijas, ko viÅi var darÄ«t? PirmkÄrt, varat droÅ”i lasÄ«t sekundÄros: varat rakstÄ«t primÄrajÄ un lasÄ«t no Ä£eogrÄfiski replicÄtÄm sekundÄrajÄm programmÄm, un bÅ«t pÄrliecinÄts, ka tas darbojas. TajÄ paÅ”Ä laikÄ sesijas, kas tika ierakstÄ«tas primÄrajÄ, var pat pÄrsÅ«tÄ«t uz sekundÄro, t.i., jÅ«s varat izmantot nevis vienu sesiju, bet vairÄkas.
In: ā Jauns skaitļoÅ”anas zinÄtnes slÄnis ā CRDT (bezkonflikta replicÄti datu tipi) datu tipi ā ir cieÅ”i saistÄ«ts ar tematu par iespÄjamo konsekvenci. Vai esat apsvÄris iespÄju integrÄt Å”Äda veida datus datu bÄzÄ, un ko jÅ«s par to varat teikt?
MT: - Labs jautÄjums! CRDT ir jÄga rakstÄ«Å”anas konfliktiem: MongoDB ir viens galvenais.
In: ā Man ir jautÄjums no devops. ReÄlajÄ pasaulÄ ir tÄdas jezuÄ«tiskas situÄcijas, kad notiek bizantieÅ”u neveiksme, un ļaunie cilvÄki aizsargÄjamÄ perimetrÄ sÄk bÄzties protokolÄ, Ä«paÅ”Ä veidÄ sÅ«tÄ«t amatniecÄ«bas pakas?
MT: ā Ä»aunie cilvÄki perimetrÄ ir kÄ Trojas zirgs! Ä»aunie cilvÄki perimetrÄ var izdarÄ«t daudz sliktu lietu.
In: ā Skaidrs, ka atstÄjot, rupji sakot, robu serverÄ«, pa kuru var ielikt ziloÅu zoodÄrzu un sabrukt visu klasteru uz visiem laikiem... ManuÄla atkopÅ”ana prasÄ«s laiku... Tas, maigi izsakoties, ir nepareizi. No otras puses, tas ir interesanti: reÄlajÄ dzÄ«vÄ, praksÄ, ir situÄcijas, kad dabiski notiek lÄ«dzÄ«gi iekÅ”Äjie uzbrukumi?
MT: ā TÄ kÄ reÄlajÄ dzÄ«vÄ ar droŔības pÄrkÄpumiem saskaros reti, nevaru pateikt, vai tie notiek. Bet, ja mÄs runÄjam par attÄ«stÄ«bas filozofiju, mÄs domÄjam Å”Ädi: mums ir perimetrs, kas nodroÅ”ina puiÅ”us, kas veic apsardzi - tÄ ir pils, mÅ«ris; un iekÅ”Ä perimetrÄ var darÄ«t ko gribi. Ir skaidrs, ka ir lietotÄji, kuriem ir iespÄja tikai skatÄ«t, un ir lietotÄji, kuriem ir iespÄja izdzÄst direktoriju.
AtkarÄ«bÄ no tiesÄ«bÄm lietotÄji var nodarÄ«t kaitÄjumu, ko var nodarÄ«t pele vai zilonis. Skaidrs, ka lietotÄjs ar pilnÄm tiesÄ«bÄm vispÄr var darÄ«t jebko. LietotÄjs ar ierobežotÄm tiesÄ«bÄm var nodarÄ«t ievÄrojami mazÄku kaitÄjumu. Jo Ä«paÅ”i tas nevar izjaukt sistÄmu.
In: ā AizsargÄtajÄ perimetrÄ kÄds mÄÄ£inÄja izveidot neparedzÄtus protokolus serverim, lai pilnÄ«bÄ iznÄ«cinÄtu serveri un, ja paveicas, visu klasteru... Vai tas kÄdreiz sanÄk tik ālabiā?
MT: "Es nekad neesmu dzirdÄjis par tÄdÄm lietÄm." Tas, ka Å”ÄdÄ veidÄ var avarÄt serveri, nav noslÄpums. Neveiksme iekÅ”Ä, esot no protokola, bÅ«t autorizÄtam lietotÄjam, kurÅ” var kaut ko tÄdu ierakstÄ«t ziÅojumÄ... PatiesÄ«bÄ tas nav iespÄjams, jo tas vÄl tiks pÄrbaudÄ«ts. Å o autentifikÄciju ir iespÄjams atslÄgt lietotÄjiem, kuri to nevÄlas ā tad tÄ ir viÅu problÄma; viÅi, rupji sakot, paÅ”i izpostÄ«ja sienas un tur var iegrÅ«st ziloni, kurÅ” mÄ«dÄ«s... Bet vispÄr var pÄrÄ£Ärbties par remontÄtÄju, nÄc un izrauj!
In: ā Paldies par ziÅojumu. Sergejs (Yandex). Mong ir konstante, kas ierobežo balsstiesÄ«go dalÄ«bnieku skaitu repliku komplektÄ, un Ŕī konstante ir 7 (septiÅi). KÄpÄc tÄ ir konstante? KÄpÄc tas nav kaut kÄds parametrs?
MT: - Mums ir reprodukcijas komplekti ar 40 mezgliem. VienmÄr ir vairÄkums. Nezinu kura versija...
In: ā Reprodukcijas komplektÄ varat vadÄ«t dalÄ«bniekus, kuriem nav balsstiesÄ«bu, taÄu ir ne vairÄk kÄ 7 balsstiesÄ«gi dalÄ«bnieki. KÄ mÄs varam pÄrdzÄ«vot slÄgÅ”anu Å”ajÄ gadÄ«jumÄ, ja mÅ«su kopiju komplekts ir sadalÄ«ts 3 datu centros? Viens datu centrs var viegli izslÄgties, un cita iekÄrta var izkrist.
MT: ā Tas jau ir nedaudz Ärpus ziÅojuma jomas. Tas ir vispÄrÄ«gs jautÄjums. VarbÅ«t es par to pastÄstÄ«Å”u vÄlÄk.
Dažas reklÄmas š
Paldies, ka palikÄt kopÄ ar mums. Vai jums patÄ«k mÅ«su raksti? Vai vÄlaties redzÄt interesantÄku saturu? Atbalsti mÅ«s, pasÅ«tot vai iesakot draugiem,
Dell R730xd 2x lÄtÄk Equinix Tier IV datu centrÄ AmsterdamÄ? Tikai Å”eit
Avots: www.habr.com