HighLoad ++, Mikhail Tyulenev (MongoDB): Ihe na-akpata agbanwe agbanwe: site na tiori na-eme ihe

A ga-enwe ogbako HighLoad ++ na Eprel 6 na 7, 2020 na St. Petersburg.
Nkọwa na tiketi njikọ. HighLoad ++ Siberia 2019. Ụlọ Nzukọ "Krasnoyarsk". June 25, 12:00. Ihe ndị a na ngosi.

HighLoad ++, Mikhail Tyulenev (MongoDB): Ihe na-akpata agbanwe agbanwe: site na tiori na-eme ihe

Ọ na-eme na ihe ndị bara uru chọrọ na-emegide echiche, ebe a naghị echebara akụkụ dị mkpa maka ngwaahịa azụmahịa. Okwu a na-enye usoro maka ịhọrọ na ijikọta ụzọ dị iche iche iji mepụta ihe nkwụsi ike nke Causal dabere na nyocha agụmakwụkwọ dabere na ihe achọrọ nke ngwaahịa azụmahịa. Ndị na-ege ntị ga-amụta maka ụzọ usoro iwu dị ugbu a maka elekere ezi uche dị na ya, nleba anya ndabere, nchekwa sistemu, mmekọrịta elekere, yana ihe kpatara MongoDB ji kpebie na ụfọdụ azịza.

Mikhail Tyulenev (nke a na-akpọ MT): - M ga-ekwu maka nkwụsi ike nke Causal - nke a bụ njirimara anyị rụrụ na MongoDB. M na-arụ ọrụ na otu usoro kesara, anyị mere ya ihe dị ka afọ abụọ gara aga.

HighLoad ++, Mikhail Tyulenev (MongoDB): Ihe na-akpata agbanwe agbanwe: site na tiori na-eme ihe

N'ime usoro a, aghaghị m ịmara onwe m na ọtụtụ nchọpụta agụmakwụkwọ, n'ihi na a mụọla akụkụ a nke ọma. Ọ tụgharịrị na ọ dịghị otu isiokwu dabara n'ime ihe achọrọ na nchekwa data mmepụta n'ihi ihe a kapịrị ọnụ nke nwere ike ịdị na ngwa mmepụta ọ bụla.

M ga-ekwu maka otu anyị, dị ka ndị na-azụ ahịa nke nyocha agụmakwụkwọ, na-akwadebe ihe site na ya nke anyị nwere ike igosi ndị ọrụ anyị dị ka efere a kwadebere nke dị mma ma dị mma iji.

Nkwekọrịta ihe kpatara ya. Ka anyị kọwaa echiche ndị ahụ

Iji malite, achọrọ m ikwu n'ozuzu ihe nkwekọ nke Causal bụ. Enwere odide abụọ - Leonard na Penny (usoro ihe nkiri TV "The Big Bang Theory"):

HighLoad ++, Mikhail Tyulenev (MongoDB): Ihe na-akpata agbanwe agbanwe: site na tiori na-eme ihe

Ka anyị kwuo na Penny nọ na Europe na Leonard chọrọ ịtụpụrụ ya oriri na-eju anya. Ọ pụghịkwa iche maka ihe ọ bụla dị mma karịa ịtụfu ya na ndepụta enyi ya, na-ezigara ndị enyi ya niile mmelite na ndepụta: "Ka anyị mee Penny obi ụtọ!" (Ọ nọ na Europe, mgbe ọ na-ehi ụra, ọ naghị ahụ ihe a niile ma ghara ịhụ ya, n'ihi na ọ nọghị ebe ahụ). N'ikpeazụ, ọ na-ehichapụ post a, na-ehichapụ ya na nri ma weghachite ohere ka ọ ghara ịhụ ihe ọ bụla ma ọ dịghị ihe ọ bụla.
Ihe niile dị mma ma dị mma, ma ka anyị chee na a na-ekesa usoro ahụ na ihe na-aga nke ọma. Ọ nwere ike, dịka ọmụmaatụ, mee na mmachi ohere Penny mere ka post a pụtachara, ma ọ bụrụ na emetụtaghị ihe omume ndị a site na ihe kpatara ya. N'ezie, nke a bụ ihe atụ nke mgbe Causal agbanwe agbanwe a chọrọ iji rụọ ọrụ azụmahịa (na nke a).

N'ezie, ndị a bụ ihe na-abụghị obere ihe onwunwe nke nchekwa data - mmadụ ole na ole na-akwado ha. Ka anyị gaa n'ihu na ụdị.

Ụdị agbanwe agbanwe

Gịnị bụ kpọmkwem ihe nlereanya na-agbanwe agbanwe na ọdụ data? Ndị a bụ ụfọdụ nkwa nke sistemụ kesara na-enye gbasara data onye ahịa nwere ike ịnata yana n'usoro dị.

N'ụkpụrụ, ụdị niile na-agbanwe agbanwe na-agbada ka otu sistemụ kesara si dị na sistemụ na-agba ọsọ, dịka ọmụmaatụ, n'otu ọnụ na laptọọpụ. Ma nke a bụ otu usoro nke na-agba ọsọ na ọtụtụ puku geo-ekesa "Nodes" bụ na laptọọpụ, nke a na-arụ ọrụ ndị a niile na-akpaghị aka na ụkpụrụ.

Ya mere, a na-etinye ụdị nkwụsi ike naanị na sistemụ kesara. Sistemụ niile dịbu adị ma rụọ ọrụ n'otu nha kwụ ọtọ enwebeghị nsogbu ndị dị otú ahụ. Enwere otu cache nchekwa, a na-agụkwa ihe niile site na ya mgbe niile.

Model siri ike

N'ezie, ụdị nke mbụ bụ Strong (ma ọ bụ akara ikike ịrị elu, dịka a na-akpọkarị ya). Nke a bụ ihe ngbanwe nke na-eme ka mgbanwe ọ bụla, ozugbo ekwenyesiri ike na ọ mere, na-ahụ ndị ọrụ niile nke usoro ahụ anya.

Nke a na-emepụta usoro zuru ụwa ọnụ nke ihe omume niile na nchekwa data. Nke a bụ ihe na-agbanwe agbanwe nke ukwuu, ọ dịkwa oke ọnụ. Agbanyeghị, a na-akwado ya nke ọma. Ọ dị oke ọnụ ma dịkwa nwayọ - a naghị adịkarị eji ya. Nke a na-akpọ ịrị elu ike.

Enwere ihe ọzọ siri ike nke a na-akwado na Spanner - nke a na-akpọ Mpụga Mpụga. Anyị ga-ekwu maka ya ntakịrị oge.

Ihe Causal

Nke na-esote bụ Causal, nke bụ kpọmkwem ihe m na-ekwu. Enwere ọtụtụ ọkwa ndị ọzọ n'etiti Strong na Causal nke m na-agaghị ekwu maka ya, mana ha niile gbadara ruo Causal. Nke a bụ ihe nlereanya dị mkpa n'ihi na ọ bụ ihe kachasị ike nke ụdị niile, nke kachasị ike na ọnụnọ nke netwọk ma ọ bụ nkebi.

Ihe na-akpata bụ n'ezie ọnọdụ nke ihe na-ejikọta ihe omume site na mmekọrịta kpatara na mmetụta. Ọtụtụ mgbe, a na-aghọta ha dị ka Gụọ ikike gị site n'echiche onye ahịa. Ọ bụrụ na onye ahịa ahụla ụkpụrụ ụfọdụ, ọ nweghị ike ịhụ ụkpụrụ ndị dị n'oge gara aga. Ọ malitela ịhụ agụ prefix. Ihe niile na-abịa n'otu ihe.
Ihe kpatara ya dị ka ihe ngbanwe bụ usoro nhazi ihe omume na ihe nkesa, nke a na-ahụ ihe omume sitere na ndị ahịa niile n'otu usoro. N'okwu a, Leonard na Penny.

Emechaa

Ihe nlereanya nke atọ bụ Nkwekọrịta N'ikpeazụ. Nke a bụ ihe niile na-akwado sistemụ kesara, obere ihe nlereanya nke nwere ezi uche ma ọlị. Ọ pụtara ihe ndị a: mgbe anyị nwere mgbanwe ụfọdụ na data, n'oge ụfọdụ ha na-agbanwe agbanwe.

N'oge dị otú ahụ, ọ naghị ekwu ihe ọ bụla, ma ọ bụghị ya, ọ ga-atụgharị na Mpụga Consistency - ọ ga-abụ a kpamkpam dị iche iche akụkọ. Ka o sina dị, nke a bụ ihe nlereanya na-ewu ewu, nke a na-ahụkarị. Site na ndabara, ndị ọrụ niile nke sistemu ekesa na-eji Nkwekọrịta Emechaa.

Achọrọ m ịnye ụfọdụ atụ atụnyere:

HighLoad ++, Mikhail Tyulenev (MongoDB): Ihe na-akpata agbanwe agbanwe: site na tiori na-eme ihe

Gịnị ka akụ ndị a pụtara?

  • Latency Ka ike na-agbanwe agbanwe na-abawanye, ọ na-ebuwanye ibu maka ihe doro anya: ịkwesịrị ịmekwu ndekọ, nweta nkwenye sitere na ndị agha niile na ọnụ ndị na-ekere òkè na ụyọkọ na data ahụ adịlarị. N'ihi ya, Eventual Consistency nwere azịza ngwa ngwa, n'ihi na ebe ahụ, dị ka a na-achị, ị nwere ike ọbụna itinye ya na ebe nchekwa na nke a ga-ezuru ụkpụrụ.
  • Nnweta. Ọ bụrụ na anyị na-aghọta nke a dị ka ike nke usoro ịzaghachi na ọnụnọ nke netwọk nkwụsịtụ, partitions, ma ọ bụ ụfọdụ ụdị ọdịda, mmejọ ndidi na-abawanye ka anọgidesi nlereanya ebelata, ebe ọ bụ na-ezuru anyị na otu onye ọbịa na-ebi na n'otu oge ahụ. oge na-emepụta ụfọdụ data. Nkwekọrịta n'ikpeazụ anaghị ekwe nkwa ihe ọ bụla gbasara data ma ọlị - ọ nwere ike ịbụ ihe ọ bụla.
  • Anomalies. N'otu oge ahụ, n'ezie, ọnụ ọgụgụ nke anomalies na-abawanye. Na nkwekọ siri ike, ọ fọrọ nke nta ka ọ bụrụ na ha ekwesịghị ịdị adị ma ọlị, ma na njedebe ikpeazụ ha nwere ike ịbụ ihe ọ bụla. Ajụjụ na-ebilite: gịnị kpatara ndị mmadụ ji ahọrọ Consistency Eventual ma ọ bụrụ na ọ nwere anomalies? Azịza ya bụ na Ụdị Nkwekọrịta N'ikpeazụ na-adabara na anomalies dị, dịka ọmụmaatụ, n'ime obere oge; ọ ga-ekwe omume iji ọkachamara ịgụ na ọtụtụ ma ọ bụ obere na-agụ data na-agbanwe agbanwe; Ọ na-enwekarị ike iji ụdị nkwekọ siri ike. Na omume nke a na-arụ ọrụ, na mgbe ọnụ ọgụgụ nke anomalies na-ejedebeghị na oge.

Usoro CAP

Mgbe ị na-ahụ okwu na-agbanwe agbanwe, nnweta - kedu ihe na-abata gị n'uche? Nke ahụ ziri ezi - CAP theorem! Ugbu a achọrọ m ịchụpụ akụkọ ifo ... Ọ bụghị m - ọ bụ Martin Kleppmann, onye dere akụkọ magburu onwe ya, akwụkwọ magburu onwe ya.

HighLoad ++, Mikhail Tyulenev (MongoDB): Ihe na-akpata agbanwe agbanwe: site na tiori na-eme ihe

Theorem CAP bụ ụkpụrụ ewepụtara na 2000s nke na-agbanwe agbanwe, nnweta, nkebi: were abụọ ọ bụla, ị nweghị ike ịhọrọ atọ. Ọ bụ ụkpụrụ ụfọdụ. E gosipụtara ya dị ka usoro ọmụmụ afọ ole na ole ka Gilbert na Lynch gachara. Mgbe ahụ, a malitere iji nke a dị ka mantra - usoro malitere ikewa CA, CP, AP na na.

E gosipụtara usoro a n'ezie maka ikpe ndị a ... Nke mbụ, a na-ahụta nnweta ọ bụghị dị ka uru na-aga n'ihu site na efu ruo narị otu narị (0 - usoro ahụ bụ "nwụrụ anwụ", 100 - na-aza ngwa ngwa; a na-eji anyị tụlee ya otú ahụ) , ma dị ka ihe onwunwe nke algọridim, nke na-ekwe nkwa na maka igbu ya niile ọ na-eweghachi data.

Enweghị okwu gbasara oge nzaghachi ma ọlị! Enwere algọridim na-eweghachite data mgbe afọ 100 gachara - algọridim dị ịtụnanya nke ukwuu, nke bụ akụkụ nke usoro CAP.
Nke abụọ: e gosipụtara theorem maka mgbanwe na ụkpụrụ nke otu igodo ahụ, n'agbanyeghị na mgbanwe ndị a na-agbanwe agbanwe. Nke a pụtara na n'eziokwu, a naghị eji ha eme ihe, n'ihi na ụdị ndị ahụ dị iche iche na-emesị emechaa, ike na-agbanwe agbanwe (ma eleghị anya).

Gịnị bụ ihe a niile? Ọzọkwa, usoro ihe omume CAP n'ụdị nke egosipụtara na ya adịghị emetụta ya, ọ naghị adịkarịkwa eji ya. N'ụdị usoro iwu, ọ na-amachi ihe niile n'ụzọ ụfọdụ. Ọ na-atụgharị ụkpụrụ ụfọdụ nke ziri ezi n'ụzọ ziri ezi, mana n'ozuzu egosibeghị ya.

Nkwekọrịta ihe kpatara bụ ihe nlereanya kachasị ike

Ihe na-eme ugbu a bụ na ị nwere ike nweta ihe atọ niile: Nkwekọrịta, Nnweta site na iji Partitions. Karịsịa, Causal anọgidesi ike bụ ihe kasị ike agbanwe agbanwe nlereanya, nke ka na-arụ ọrụ na ọnụnọ nke Partitions (na-agbaji na netwọk). Ọ bụ ya mere o ji nwee mmasị dị ukwuu, ọ bụkwa ya mere anyị ji were ya.

HighLoad ++, Mikhail Tyulenev (MongoDB): Ihe na-akpata agbanwe agbanwe: site na tiori na-eme ihe

Nke mbụ, ọ na-eme ka ọrụ ndị mmepe ngwa dị mfe. Karịsịa, ọnụnọ nke nkwado dị ukwuu site na ihe nkesa: mgbe ihe ndekọ niile na-eme n'ime otu onye ahịa na-ekwe nkwa ịbịa n'otu usoro ahụ na onye ahịa ọzọ. Nke abuo, ọ na-eguzogide partitions.

MongoDB kichin ime ụlọ

N'icheta na ọ bụ nri ehihie, anyị kwagara na kichin. M ga-agwa gị gbasara ụdị usoro, ya bụ, ihe MongoDB bụ maka ndị na-anụ maka nchekwa data dị otú ahụ na nke mbụ.

HighLoad ++, Mikhail Tyulenev (MongoDB): Ihe na-akpata agbanwe agbanwe: site na tiori na-eme ihe

HighLoad ++, Mikhail Tyulenev (MongoDB): Ihe na-akpata agbanwe agbanwe: site na tiori na-eme ihe

MongoDB (nke a na-akpọ "MongoDB") bụ usoro kesara nke na-akwado nha nha nha, ya bụ, sharding; na n'ime shard nke ọ bụla ọ na-akwadokwa redundancy data, ya bụ, mmeghari.

Ịkekọrịta na MongoDB (ọ bụghị nchekwa data mmekọrịta) na-arụ ọrụ nhazi na-akpaghị aka, ya bụ, nchịkọta akwụkwọ ọ bụla (ma ọ bụ "tebụl" n'ihe gbasara data mmekọrịta) na-ekewa n'ime iberibe, na ihe nkesa na-ebugharị na-akpaghị aka n'etiti shards.

The Query Router, nke na-ekesa arịrịọ, maka onye ahịa bụ ụfọdụ ndị ahịa nke ọ na-arụ ọrụ. Ọ maralarị ebe na ihe data dị ma na-eduzi arịrịọ niile na shard ziri ezi.

Isi ihe ọzọ dị mkpa: MongoDB bụ otu nna ukwu. Enwere otu Primary - ọ nwere ike were ndekọ na-akwado igodo ndị o nwere. Ị nweghị ike ide Multi-Master.

Anyị wepụtara 4.2 - ihe ọhụrụ na-adọrọ mmasị pụtara n'ebe ahụ. Karịsịa, ha tinyere Lucene - ọchụchọ - ya bụ java ozugbo na Mongo, ebe ahụ enwere ike ịme ọchụchọ site na Lucene, dị ka ọ dị na Elastica.

Ma ha mere ngwaahịa ọhụrụ - Charts, ọ dịkwa na Atlas (Mongo nke onwe igwe). Ha nwere ọkwa efu - ị nwere ike iji ya gwuo egwu. Charts masịrị m nke ukwuu - nhụta data, nwere ọgụgụ isi.

Efrata na-akpata agbanwe agbanwe

Agụrụ m ihe dị ka akụkọ 230 ndị e bipụtara n'isiokwu a - sitere na Leslie Lampert. Ugbu a site na ncheta m, m ga-ebugara gị akụkụ ụfọdụ nke ihe ndị a.

HighLoad ++, Mikhail Tyulenev (MongoDB): Ihe na-akpata agbanwe agbanwe: site na tiori na-eme ihe

Ihe niile malitere site na edemede Leslie Lampert, nke e dere na 1970s. Dị ka ị pụrụ ịhụ, ụfọdụ nnyocha banyere isiokwu a ka na-aga n'ihu. Ugbu a, nkwụsi ike na-akpata na-enwe mmasị na mmepe nke usoro kesara.

Mgbochi

Kedu ihe mgbochi dị? Nke a bụ n'ezie otu n'ime isi ihe, n'ihi na mgbochi nke usoro mmepụta ihe na-eme ka ọ dị nnọọ iche na ihe mgbochi ndị dị na isiokwu agụmakwụkwọ. Ha na-abụkarị arụrụ arụ.

HighLoad ++, Mikhail Tyulenev (MongoDB): Ihe na-akpata agbanwe agbanwe: site na tiori na-eme ihe

  • Mbụ, "MongoDB" bụ otu nna ukwu, dịka m kwuru (nke a na-eme ka ọ dị mfe).
  • Anyị kwenyere na usoro ahụ kwesịrị ịkwado ihe dịka 10 puku shards. Anyị enweghị ike ịme mkpebi ụkpụrụ ụlọ nke ga-amachi uru a n'ụzọ doro anya.
  • Anyị nwere igwe ojii, mana anyị na-eche na mmadụ ka kwesịrị inwe ohere mgbe ọ na-ebudata ọnụọgụ abụọ, na-agba ya na laptọọpụ ya, ihe niile na-arụkwa ọrụ nke ọma.
  • Anyị na-eche ihe nyocha na-adịkarịghị ewere: ndị ahịa mpụga nwere ike ime ihe ọ bụla ha chọrọ. MongoDB bụ isi mmalite mepere emepe. N'ihi ya, ndị ahịa nwere ike ịbụ ndị nwere ọgụgụ isi na iwe - ha nwere ike ịchọrọ imebi ihe niile. Anyị na-eche na Byzantine Feilors nwere ike ịmalite.
  • Maka ndị ahịa dị n'èzí nke dị n'èzí gburugburu, enwere njedebe dị mkpa: ọ bụrụ na njirimara a nwere nkwarụ, mgbe ahụ, a ghaghị ịhụ mmebi arụmọrụ.
  • Isi ihe ọzọ bụ n'ozuzu mgbochi agụmakwụkwọ: ndakọrịta nke nsụgharị ndị gara aga na ndị ga-eme n'ọdịnihu. Ndị ọkwọ ụgbọ ala ochie ga-akwado mmelite ọhụrụ, yana nchekwa data ga-akwado ndị ọkwọ ụgbọ ala ochie.

N'ozuzu, ihe a niile na-enye ihe mgbochi.

Ihe na-akpata agbanwe agbanwe

M ga-ekwu ugbu a banyere ụfọdụ akụkụ. Ọ bụrụ na anyị na-atụle Causal agbanwe agbanwe n'ozuzu, anyị nwere ike họrọ blocks. Anyị họọrọ site na ọrụ ndị dị na ụfọdụ ngọngọ: Nleba anya ndabere, ịhọrọ elekere, otu esi emekọrịta elekere ndị a na ibe anyị, yana otu anyị si echekwa nchekwa - nke a bụ nkọwa siri ike nke ihe m ga-ekwu maka ya:

HighLoad ++, Mikhail Tyulenev (MongoDB): Ihe na-akpata agbanwe agbanwe: site na tiori na-eme ihe

Ndepụta ndabere zuru oke

Gịnị mere o ji dị mkpa? Ya mere na mgbe a na-emegharị data, ndekọ ọ bụla, mgbanwe data ọ bụla nwere ozi gbasara mgbanwe ọ dabere na ya. Mgbanwe nke mbụ na nke enweghị isi bụ mgbe ozi ọ bụla nwere ndekọ nwere ozi gbasara ozi ndị gara aga:

HighLoad ++, Mikhail Tyulenev (MongoDB): Ihe na-akpata agbanwe agbanwe: site na tiori na-eme ihe

N'ọmụmaatụ a, ọnụọgụ dị na bracket curly bụ ọnụọgụ ndekọ. Mgbe ụfọdụ, a na-ebufe ndekọ ndị a nwere ụkpụrụ n'ozuzu ya, mgbe ụfọdụ a na-ebufe nsụgharị ụfọdụ. Isi ala bụ na mgbanwe ọ bụla nwere ozi gbasara nke gara aga (n'ụzọ doro anya na-eburu ihe a niile n'ime onwe ya).

Gịnị kpatara anyị ji kpebie na anyị agaghị eji usoro a (nsochi zuru oke)? N'ụzọ doro anya, n'ihi na nke a ụzọ adịghị ekwe omume: mgbanwe ọ bụla na netwọk mmekọrịta dabere na mgbanwe niile gara aga na netwọk mmekọrịta ahụ, na-ebufe, sị, Facebook ma ọ bụ VKontakte na mmelite ọ bụla. Ka o sina dị, enwere ọtụtụ nyocha na nsochi ndabere zuru oke - ndị a bụ netwọk mmekọrịta tupu oge eruo; maka ọnọdụ ụfọdụ ọ na-arụ ọrụ n'ezie.

Ndepụta ndabere doro anya

Nke na-esote dị oke oke. A na-atụle ịnyefe ozi ebe a, ma ọ bụ naanị nke doro anya dabere. Kedu ihe dabere na ihe, dịka iwu, nke ngwa ahụ kpebiri. Mgbe emegharịrị data, ajụjụ a na-eweghachi naanị nzaghachi mgbe afọ ojuju dabere na mbụ, ya bụ, egosiri. Nke a bụ isi ihe ka nkwekọ Causal si arụ ọrụ.

HighLoad ++, Mikhail Tyulenev (MongoDB): Ihe na-akpata agbanwe agbanwe: site na tiori na-eme ihe

Ọ na-ahụ na ndekọ 5 na-adabere na ndekọ 1, 2, 3, 4 - ya mere, ọ na-echere tupu onye ahịa enweta ohere maka mgbanwe nke Penny nweta mkpebi, mgbe mgbanwe niile gara aga agafeworị na nchekwa data.

Nke a adabaghịkwa anyị, n'ihi na a ka nwere ozi buru ibu, ọ ga-ebelatakwa ihe. Enwere ụzọ ọzọ ...

Elekere Lamport

Ha emeela agadi. Elekere Lamport pụtara na a na-atụgharị ihe ndabere ndị a n'ime ọrụ scalar, nke a na-akpọ elekere Lamport.

Ọrụ scalar bụ ọnụọgụ nkịtị. A na-akpọkarị ya oge ezi uche dị na ya. Na ihe omume ọ bụla, counter a na-abawanye. Counter, nke usoro a maara ugbu a, na-eziga ozi ọ bụla. O doro anya na usoro nwere ike ghara imekọrịta ihe, ha nwere ike ịnwe oge dị iche iche. Ka o sina dị, usoro ahụ na-edozi elekere na ozi dị otú ahụ. Gịnị na-eme na nke a?

M kewara nnukwu shard ahụ ụzọ abụọ iji mee ka o doo anya: Ndị enyi nwere ike ibi n'otu ọnụ ọnụ, nke nwere akụkụ nke mkpokọta, na Feed nwere ike ibi na ọnụ ụzọ ọzọ, nke nwere mpempe akwụkwọ a. O doro anya ka ha ga-esi pụta n'ahịrị? Nri mbụ ga-ekwu: “Emegharịrị”, emesia Enyi. Ọ bụrụ na usoro ahụ enyeghị ụfọdụ ụdị nkwa na agaghị egosi nri ahụ ruo mgbe a na-ebutekwa ndabere ndị enyi na nchịkọta ndị enyi, mgbe ahụ anyị ga-enwe kpọmkwem ọnọdụ m kwuru.

Ị na-ahụ ka oge counter na Feed na-abawanye n'ụzọ ezi uche dị na ya:

HighLoad ++, Mikhail Tyulenev (MongoDB): Ihe na-akpata agbanwe agbanwe: site na tiori na-eme ihe

Ya mere, isi ihe onwunwe nke Lamport Clock na Causal na-adịgide adịgide (nke a kọwara site na Lamport Clock) bụ nke a: ọ bụrụ na anyị nwere ihe omume A na B, na Omume B na-adabere na Omume A *, mgbe ahụ ọ na-esote na LogicalTime of Event A bụ ihe na-erughị karịa. LogicalTime sitere na Omume B.

* Mgbe ụfọdụ, ha na-ekwukwa na A mere tupu B, ya bụ, A mere tupu B - nke a bụ njikọ ụfọdụ nke na-enye iwu ihe niile mere n'ozuzu.

Ihe na-emegide ya ezighi ezi. Nke a bụ n'ezie otu n'ime adịghị ike nke Lamport Clock - akụkụ ụfọdụ. Enwere echiche banyere ihe omume n'otu oge, ya bụ, ihe omume nke na-enweghị (A mere tupu B) ma ọ bụ (A mere tupu B). Otu ihe atụ ga-abụ mgbakwunye Leonard na onye ọzọ dịka enyi (ọbụlagodi Leonard, mana Sheldon, dịka ọmụmaatụ).
Nke a bụ ihe onwunwe a na-ejikarị eme ihe mgbe ọ na-arụ ọrụ na Lamport clocks: ha na-ele anya kpọmkwem na ọrụ ahụ ma site na nke a ha kwubiri na ikekwe ihe omume ndị a dabere. N'ihi na otu ụzọ bụ eziokwu: ọ bụrụ na LogicalTime A na-erughị LogicalTime B, mgbe ahụ B enweghị ike ime tupu A; ma ọ bụrụ karịa, mgbe ahụ enwere ike.

Elekere vector

Mmepe ezi uche dị na ya nke elekere Lamport bụ elekere Vector. Ha dị iche na ọnụ nke ọ bụla dị ebe a nwere elekere nke ya dị iche iche, a na-ebufe ya dị ka vector.
N'okwu a, ị na-ahụ na zeroth index nke vector bụ maka nri nri, na ntinye akwụkwọ mbụ nke vector bụ maka ndị enyi (nke ọ bụla n'ime ọnụ ndị a). Ma ugbu a, ha ga-abawanye: ndepụta efu nke "Nri" na-abawanye mgbe ị na-ede - 1, 2, 3:

HighLoad ++, Mikhail Tyulenev (MongoDB): Ihe na-akpata agbanwe agbanwe: site na tiori na-eme ihe

Kedu ihe kpatara elekere Vector ji dị mma? N'ihi na ha na-enye gị ohere ịchọpụta ihe omume na-eme n'otu oge na mgbe ha na-eme na ọnụ dị iche iche. Nke a dị ezigbo mkpa maka sistemụ sharding dị ka MongoDB. Otú ọ dị, anyị ahọrọghị nke a, n'agbanyeghị na ọ bụ ihe magburu onwe ya, na ọ na-arụ ọrụ nke ukwuu, ma eleghị anya ọ ga-adabara anyị ...

Ọ bụrụ na anyị nwere 10 puku shards, anyị enweghị ike ịnyefe 10 puku components, ọ bụrụgodị na anyị mpikota onu ma ọ bụ na-abịa na ihe ọzọ - ụgwọ ọrụ ka ga-abụ ọtụtụ ugboro obere karịa olu nke a dum vector. Ya mere, na-atacha obi anyị na ezé anyị, anyị hapụrụ ụzọ a wee gaa n'ọzọ.

Spanner TrueTime. Atomiki elekere

Ekwuru m na a ga-enwe akụkọ gbasara Spanner. Nke a bụ ihe dị mma, ozugbo site na narị afọ nke XNUMX: elekere atomic, mmekọrịta GPS.

Gịnị bụ echiche? "Spanner" bụ usoro Google nke na-adịbeghị anya ọbụna dịịrị ndị mmadụ (ha gbakwunyere SQL na ya). Azụmahịa ọ bụla n'ebe ahụ nwere stampụ oge. Ebe ọ bụ na oge na-emekọrịta ihe *, enwere ike ịnye ihe omume ọ bụla otu oge - clocks atomic nwere oge echere, mgbe nke ahụ gasịrị, a na-ekwe nkwa oge dị iche "ime".

HighLoad ++, Mikhail Tyulenev (MongoDB): Ihe na-akpata agbanwe agbanwe: site na tiori na-eme ihe

Yabụ, site na ịdegara nchekwa data naanị wee chere oge ụfọdụ, a na-ekwe nkwa Serializability nke ihe omume ahụ na-akpaghị aka. Ha nwere ihe nlereanya Consistency kachasị ike nke enwere ike iche n'echiche - ọ bụ Mpụga Nkwekọrịta.

* Nke a bụ isi nsogbu na Lampart clocks - ha anaghị emekọrịta ihe na sistemụ kesara. Ha nwere ike iche; ọbụlagodi na NTP, ha anaghị arụ ọrụ nke ọma. "Spanner" nwere elekere atomic na mmekọrịta, ọ dị ka ọ bụ microseconds.

Gịnị mere na anyị ahọrọghị? Anyị anaghị eche na ndị ọrụ anyị nwere elekere atọm arụnyere n'ime ya. Mgbe ha pụtara, a na-ewu ya n'ime laptọọpụ ọ bụla, a ga-enwe ụdị mmekọrịta dị mma nke GPS - mgbe ahụ, ee ... .

Ngwakọ elekere

Nke a bụ n'ezie ihe akọrọ na MongoDB mgbe ị na-ahụ na nkwụsi ike nke Causal. Kedu ka ha si bụrụ ngwakọ? Ngwakọ bụ uru scalar, mana o nwere akụkụ abụọ:

HighLoad ++, Mikhail Tyulenev (MongoDB): Ihe na-akpata agbanwe agbanwe: site na tiori na-eme ihe

  • Nke mbụ bụ oge Unix (sekọnd ole gafere kemgbe "mmalite nke ụwa kọmputa").
  • Nke abụọ bụ ụfọdụ mmụba, yana 32-bit na-edebanyeghị aha.

Nke ahụ bụ ihe niile, n'ezie. Enwere usoro a: akụkụ nke na-ahụ maka oge na-ejikọta ya na elekere mgbe niile; oge ọ bụla mmelite emelitere, a na-emekọrịta akụkụ a na elekere wee pụta na oge na-abụkarị ma ọ bụ na-adịchaghị mma, mmụba na-enye gị ohere ịmata ọdịiche dị n'etiti ihe ndị mere n'otu oge ahụ.

Kedu ihe kpatara nke a ji dị mkpa maka MongoDB? N'ihi na ọ na-enye gị ohere ịme ụfọdụ ụdị ụlọ oriri na ọṅụṅụ ndabere na oge ụfọdụ, ya bụ, ihe omume ahụ na-edepụta oge. Nke a dị mkpa mgbe a chọrọ ihe omume ụfọdụ; Maka nchekwa data, ihe omume bụ mgbanwe na nchekwa data mere n'oge ụfọdụ n'ime oge.

M ga-agwa gị ihe kacha mkpa kpatara naanị gị (biko, agwala onye ọ bụla)! Anyị mere nke a n'ihi na nke a bụ ihe ahaziri, data indexed dị ka MongoDB OpLog. OpLog bụ usoro data nke nwere mgbanwe niile na nchekwa data: ha na-ebu ụzọ gaa OpLog, wee tinye ha na Nchekwa n'onwe ya n'okwu ahụ mgbe ọ bụ ụbọchị emegharịgharị ma ọ bụ shard.

Nke a bụ isi ihe kpatara ya. N'agbanyeghị nke ahụ, e nwekwara ihe ndị bara uru a chọrọ maka ịmepụta nchekwa data, nke pụtara na ọ kwesịrị ịdị mfe - obere koodu, dị ka ihe ole na ole gbajiri agbaji dị ka o kwere mee nke dị mkpa ka e degharịa ma nwalee. Eziokwu ahụ bụ na e depụtara oplogs anyị site na ngwakọ clocks nyere aka nke ukwuu ma nye anyị ohere ịme nhọrọ ziri ezi. Ọ na-akwụ ụgwọ n'ezie ma n'ụzọ ụfọdụ na-arụ ọrụ magicly na nnọọ mbụ prototype. Ọ dị mma nke ukwuu!

Mmekọrịta elekere

Enwere ọtụtụ ụzọ mmekọrịta akọwara n'ime akwụkwọ sayensị. Ana m ekwu maka mmekọrịta mgbe anyị nwere shards abụọ dị iche iche. Ọ bụrụ na e nwere otu ihe oyiri, ọ dịghị mkpa maka mmekọrịta ọ bụla: nke a bụ "otu nna ukwu"; Anyị nwere OpLog, nke mgbanwe niile dabara - na nke a, a na-enyerịrị ihe niile n'usoro n'usoro na "Oplog" n'onwe ya. Mana ọ bụrụ na anyị nwere shards abụọ dị iche iche, mmekọrịta oge dị mkpa ebe a. Nke a bụ ebe elekere vector nyere aka karịa! Ma anyị enweghị ha.

HighLoad ++, Mikhail Tyulenev (MongoDB): Ihe na-akpata agbanwe agbanwe: site na tiori na-eme ihe

Nke abụọ dabara adaba - nke a bụ "Heartbeats". Ọ ga-ekwe omume ịgbanwe ụfọdụ mgbaama na-eme nkeji oge ọ bụla. Mana obi mgbawa na-adị ngwa ngwa, anyị enweghị ike ịnye onye ahịa anyị latency.

N'ezie, oge bụ ihe magburu onwe ya. Ma, ọzọ, nke a nwere ike ịbụ ọdịnihu ... Ọ bụ ezie na enwere ike ime ya na Atlas, enweelarị ngwa ngwa "Amazon" oge synchronizers. Mana ọ gaghị adị onye ọ bụla.

Asịrị bụ mgbe ozi niile gụnyere oge. Nke a bụ ihe anyị na-eji. Ozi ọ bụla n'etiti ọnụ ọnụ, onye ọkwọ ụgbọ ala, rawụta ọnụ data, ihe niile maka MongoDB bụ ụdị mmewere, akụrụngwa nchekwa data nke nwere elekere na-agba ọsọ. Ha nwere pụtara ngwakọ oge n'ebe nile, ọ na-ebute site ná. 64 bit? Nke a na-enye ohere, nke a ga-ekwe omume.

Kedu ka ihe niile si arụkọ ọrụ ọnụ?

N'ebe a, a na m ele otu setịpụ oyiri ka ọ dị ntakịrị mfe. Enwere Primary na Secondary. Secondary na-eme mgharịgharị ma ọ bụghị mgbe niile na-emekọrịta ihe na Primary.

Ntinye na-apụta na "Primery" nwere uru oge ụfọdụ. Ntinye a na-abawanye ọnụ ọgụgụ dị n'ime site na 11, ma ọ bụrụ na nke a bụ nke kachasị. Ma ọ bụ ọ ga-elele ụkpụrụ elekere wee mekọrịta na elekere ma ọ bụrụ na ụkpụrụ elekere dị ukwuu. Nke a na-enye gị ohere ịhazi site na oge.

Mgbe o mechara ndekọ ahụ, oge dị mkpa na-eme. Elekere ahụ dị na "MongoDB" a na-agbakwunye ya naanị ma ọ bụrụ na edere ya "Oplog". Nke a bụ ihe omume na-agbanwe ọnọdụ nke usoro. N'ime akụkọ niile kpochapụrụ, a na-ewere ihe omume dị ka mgbe ozi rutere ọnụ: ozi abatala, nke pụtara na sistemụ agbanweela ọnọdụ ya.

Nke a bụ n'ihi na n'oge nyocha ọ bụghị kpamkpam ka a ga-esi sụgharịa ozi a. Anyị maara nke ọma na ọ bụrụ na egosipụtaghị ya na "Oplog", mgbe ahụ, a gaghị akọwa ya n'ụzọ ọ bụla, na mgbanwe na ọnọdụ nke usoro ahụ bụ naanị ntinye na "Oplog". Nke a na-eme ka ihe niile dị mfe maka anyị: ihe nlereanya ahụ na-eme ka ọ dị mfe, na-enye anyị ohere ịhazi ya n'ime otu ihe oyiri, na ọtụtụ ihe ndị ọzọ bara uru.

A na-eweghachite uru nke edere na "Oplog" - anyị maara na "Oplog" nwere uru a, na oge ya bụ 12. Ugbu a, sịnụ, ịgụ na-amalite site na ọnụ ụzọ ọzọ (Secondary), na ọ na-ebufe afterClusterTime in. ozi. Ọ na-ekwu, sị: "Achọrọ m ihe niile mere ma ọ dịkarịa ala mgbe 12 ma ọ bụ n'oge iri na abụọ" (lee foto dị n'elu).

Nke a bụ ihe a na-akpọ Causal a consistent (CAT). Enwere echiche dị otú ahụ na tiori na nke a bụ oge ụfọdụ, nke na-agbanwe agbanwe n'onwe ya. N'okwu a, anyị nwere ike ikwu na nke a bụ ọnọdụ nke usoro ahụ nke a hụrụ na oge 12.

Ugbu a ọ nweghị ihe ọ bụla ebe a, n'ihi na ụdị nke a na-eme ka ọnọdụ ahụ bụrụ mgbe ịchọrọ Secondary iji megharịa data sitere na Primary. Ọ na-echere ... Ma ugbu a data abịala - ọ na-eweghachite ụkpụrụ ndị a azụ.

HighLoad ++, Mikhail Tyulenev (MongoDB): Ihe na-akpata agbanwe agbanwe: site na tiori na-eme ihe

Nke ahụ mara mma ka ọ niile na-arụ ọrụ. Fọrọ nke nta.

Gịnị ka "fọrọ nke nta" pụtara? Ka anyị were ya na o nwere onye gụrụla ma ghọta ka ihe a niile si arụ ọrụ. Achọpụtara m na oge ọ bụla ClusterTime na-eme, ọ na-emelite elekere ezi uche dị n'ime, na ntinye ọzọ na-abawanye site na otu. Ọrụ a na-ewe ahịrị 20. Ka anyị kwuo na onye a na-ebufe ọnụọgụ 64-bit kachasị, wezuga otu.

Gịnị mere "mwepu otu"? N'ihi na a ga-agbanwe elekere ime n'ime uru a (n'ụzọ doro anya, nke a bụ nke kachasị ukwuu ma dị ukwuu karịa oge ugbu a), mgbe ahụ, ntinye ga-eme na "Oplog", na nkeji ọzọ ga-abawanye elekere - na a ga-amarịrị. bụrụ oke uru (enwere naanị nkeji niile, ọ nweghị ebe ọzọ ị ga-aga) , ints unsaint).

O doro anya na mgbe nke a gasịrị usoro ahụ na-aghọ nke na-enweghị ike ịnweta ihe ọ bụla. Enwere ike ibudata ya naanị ma hichaa ya - ọtụtụ ọrụ aka. Nnweta zuru oke:

HighLoad ++, Mikhail Tyulenev (MongoDB): Ihe na-akpata agbanwe agbanwe: site na tiori na-eme ihe

Ọzọkwa, ọ bụrụ na emegharịa nke a n'ebe ọzọ, mgbe ahụ, ụyọkọ ahụ dum na-ada nnọọ ala. Ọnọdụ a na-anabataghị nke ọma nke onye ọ bụla nwere ike ịhazi ngwa ngwa na ngwa ngwa! Ya mere, anyị weere oge a dị ka otu n'ime ihe kacha mkpa. Kedu ka esi egbochi ya?

Ụzọ anyị bụ ịbanye clusterTime

Otu a ka esi ebute ya na ozi (tupu ederede anụnụ anụnụ). Mana anyị malitekwara iwepụta mbinye aka (ederede anụnụ anụnụ):

HighLoad ++, Mikhail Tyulenev (MongoDB): Ihe na-akpata agbanwe agbanwe: site na tiori na-eme ihe

A na-emepụta mbinye aka site na igodo echekwara n'ime nchekwa data, n'ime ebe nchekwa; A na-emepụta ya ma na-emelite ya (ndị ọrụ anaghị ahụ ihe ọ bụla gbasara ya). A na-emepụta hash, a na-abanyekwa ozi ọ bụla mgbe emebere ya ma kwado ya mgbe enwetara ya.
Ajụjụ a nwere ike ibilite n'uche ndị mmadụ: "Ego ole ka ihe a na-ebelata?" Agwara m gị na ọ kwesịrị ịrụ ọrụ ngwa ngwa, karịsịa na enweghị njirimara a.

Gịnị ka ọ pụtara iji Causal agbanwe agbanwe na nke a? Nke a bụ iji gosi paramita afterClusterTime. Enweghị nke a, ọ ga-agafe ụkpụrụ agbanyeghị. Asịrị, malite na ụdị 3.6, na-arụ ọrụ mgbe niile.

Ọ bụrụ na anyị ahapụ ọgbọ nke mbinye aka mgbe niile, ọ ga-eme ka usoro ahụ kwụsịlata ọbụna na-enweghị njirimara, nke na-emezughị ụzọ anyị na ihe ndị a chọrọ. Yabụ kedu ihe anyị mere?

Mee ya ngwa ngwa!

Ọ bụ ihe dị mfe dị mfe, ma aghụghọ ahụ na-adọrọ mmasị - m ga-ekekọrịta ya, ikekwe mmadụ ga-enwe mmasị.
Anyị nwere hash na-echekwa data mbinye aka. Data niile na-aga na cache. Ebe nchekwa ahụ anaghị abịanye aka n'oge a kapịrị ọnụ, mana nso nso. Mgbe ụfọdụ uru bịarutere, anyị na-ewepụta Range, kpuchie ibe 16 ikpeazụ, anyị bịanye aka na uru a:

HighLoad ++, Mikhail Tyulenev (MongoDB): Ihe na-akpata agbanwe agbanwe: site na tiori na-eme ihe

Site na ịnweta mbinye aka dị otú ahụ, anyị na-eme ka usoro ahụ dị ngwa (dịtụ) 65 puku ugboro. Ọ na-arụ ọrụ nke ukwuu: mgbe anyị mere nnwale, oge n'ezie ebelata 10 puku ugboro mgbe anyị nwere usoro mmelite. O doro anya na mgbe ha na-ese okwu, nke a anaghị arụ ọrụ. Ma n'ọtụtụ ihe omume ọ na-arụ ọrụ. Ngwakọta mbinye aka nke Range yana mbinye aka dozie nsogbu nchekwa ahụ.

Gịnị ka anyị mụtara?

Ihe mmụta anyị mụtara na nke a:

  • Anyị kwesịrị ịgụ ihe, akụkọ, akụkọ, n'ihi na anyị nwere ọtụtụ ihe na-adọrọ mmasị. Mgbe anyị na-arụ ọrụ na ụfọdụ atụmatụ (karịsịa ugbu a, mgbe anyị mere azụmahịa, wdg), anyị kwesịrị ịgụ na ịghọta. Ọ na-ewe oge, mana ọ bara uru nke ukwuu n'ihi na ọ na-eme ka o doo anya ebe anyị nọ. O yighị ka anyị na-ebute ihe ọhụrụ - anyị na-ewere ihe ndị ahụ.

    N'ozuzu, enwere ọdịiche dị na iche echiche mgbe enwere ogbako agụmakwụkwọ (Sigmon, dịka ọmụmaatụ) - onye ọ bụla na-elekwasị anya na echiche ọhụrụ. Kedu ihe dị ọhụrụ na algọridim anyị? Ọ dịghị ihe ọhụrụ karịsịa ebe a. Ihe ọhụrụ ahụ dabere n'ụzọ anyị si jikọta ụzọ ndị dị adị ọnụ. Ya mere, ihe mbụ bụ ịgụ ihe ochie, malite na Lampart.

  • Na mmepụta, ihe ndị a chọrọ dị iche iche. Eji m n'aka na ọtụtụ n'ime gị adịghị eche ọdụ data "spherical" ihu na oghere efu, mana na ihe nkịtị, ihe ndị dị adị nke nwere nsogbu na nnweta, nkwụsịtụ na ntachi obi.
  • Ihe ikpeazụ bụ na anyị kwesịrị ileba anya n'echiche dị iche iche ma jikọta ọtụtụ isiokwu dị iche iche n'otu ụzọ, ọnụ. Echiche banyere ịbịanye aka, dịka ọmụmaatụ, n'ozuzu sitere na isiokwu nke tụlere ụkpụrụ Paxos, nke maka ndị na-abụghị ndị Byzantine Failors dị n'ime usoro ikike, maka ndị Byzantine - n'èzí usoro ikike ... N'ozuzu, nke a bụ kpọmkwem ihe anyị mechara mee.

    Ọ nweghị ihe ọhụrụ ebe a! Ma ozugbo anyị jikọtara ya niile ... Ọ bụ otu ihe ahụ na-ekwu na ntụziaka salad Olivier bụ ihe efu, n'ihi na akwa, Mayonezi na cucumbers emepụtaworị ... Ọ bụ otu akụkọ ahụ.

HighLoad ++, Mikhail Tyulenev (MongoDB): Ihe na-akpata agbanwe agbanwe: site na tiori na-eme ihe

Aga m emechaa nke a. Daalụ!

Ajụjụ gị

Ajụjụ sitere n'aka ndị na-ege ntị (nke a na-akpọkwa ya dị ka B): - Daalụ, Mikhail, maka akụkọ ahụ! Isiokwu banyere oge na-adọrọ mmasị. Ị na-eji asịrị. Ha kwuru na onye ọ bụla nwere oge nke ya, onye ọ bụla maara oge obodo ya. Dị ka m ghọtara ya, anyị nwere onye ọkwọ ụgbọ ala - enwere ike ịnwe ọtụtụ ndị ahịa nwere ndị ọkwọ ụgbọ ala, ndị na-eme atụmatụ ajụjụ, shards kwa ... Gịnịkwa ka usoro ahụ na-agbada ma ọ bụrụ na anyị nwere nghọtahie na mberede: mmadụ na-ekpebi na ọ bụ maka a. nkeji n'ihu, onye nkeji n'azụ? Ebee ka anyị ga-ejedebe?

MT: – Nnukwu ajụjụ n'ezie! Naanị m chọrọ ikwu maka shards. Ọ bụrụ na m ghọtara ajụjụ ahụ n'ụzọ ziri ezi, anyị nwere ọnọdụ ndị a: e nwere shard 1 na shard 2, ịgụ akwụkwọ na-apụta site na shards abụọ a - ha nwere nghọtahie, ha adịghị emekọrịta ihe, n'ihi na oge ha maara dị iche. karịsịa oge ha dị na oplogs.
Ka anyị kwuo na shard 1 mere nde ndekọ nde, shard 2 emeghị ihe ọ bụla ma ọlị, arịrịọ ahụ wee bịaruo ihe abụọ. Na nke mbụ nwere afterClusterTime ihe karịrị otu nde. N'ọnọdụ dị otú ahụ, dị ka m kọwara, shard 2 agaghị aza ma ọlị.

Na: – Achọrọ m ịma ka ha na-emekọrịta ihe na-ahọrọ otu ezi uche oge?

MT: - Ọ dị mfe ịmekọrịta. Shard, mgbe afterClusterTime abịakwute ya ma ọ hụghị oge na "Oplog", na-amalite enweghị nkwado. Ya bụ, ọ na-eji aka ya ewelite oge ya na uru a. Nke a pụtara na o nweghị mmemme dabara na arịrịọ a. Ọ na-emepụta ihe omume a n'ụzọ artificial ma si otú ahụ ghọọ Causal Consistent.

Na: - Gịnị ma ọ bụrụ na mgbe nke a ụfọdụ ihe omume ndị ọzọ na-abịakwute ya nke furu efu ebe na netwọk?

MT: - Ezubere Shard n'ụzọ na ha agaghị abịa ọzọ, ebe ọ bụ otu nna ukwu. Ọ bụrụ na o debanyere aha ya, ha agaghị abịa, mana ha ga-abịa ma emechaa. Ọ pụghị ime na ihe na-arapara n'otu ebe, mgbe ahụ, ọ dịghị ede ihe, mgbe ahụ, ihe omume ndị a na-abata - na nkwụsi ike nke Causal na-agbaji. Mgbe ọ na-edeghị, ha niile ga-abịa ọzọ (ọ ga-echere ha).

HighLoad ++, Mikhail Tyulenev (MongoDB): Ihe na-akpata agbanwe agbanwe: site na tiori na-eme ihe

Na: – Enwere m ọtụtụ ajụjụ gbasara kwụ n'ahịrị. Nkwekọrịta ihe kpatara na-eche na enwere otu ahịrị nke omume kwesịrị ime. Kedu ihe ga - eme ma ọ bụrụ na otu ngwungwu anyị apụọ? Nke a na-abịa 10th, 11th... nke iri na abụọ apụọla, na onye ọ bụla ọzọ na-eche ka ọ na-emezu. Na mberede ụgbọ ala anyị nwụrụ, anyị enweghị ike ime ihe ọ bụla. Enwere ogologo ogologo kwụ n'ahịrị na-agbakọta tupu e gbuo ya? Kedu ọdịda na-egbu egbu na-eme mgbe otu steeti furu efu? Ọzọkwa, ọ bụrụ na anyị dee na e nwere ụfọdụ gara aga ala, mgbe ahụ anyị kwesịrị n'ụzọ ụfọdụ malite ya? Ma ha achụpụghị ya!

MT: – Ọzọkwa a oké ajụjụ! Gịnị ka anyị na-eme? MongoDB nwere echiche nke quorum na-ede, quorum na-agụ. N'ọnọdụ ndị dị aṅaa ka ozi nwere ike ịla n'iyi? Mgbe ederede abụghị quorum ma ọ bụ mgbe ọgụgụ na-abụghị quorum (ụfọdụ ụdị ihe mkpofu nwekwara ike ịrapara).
Banyere nkwụsi ike nke Causal, e mere nnukwu nnwale nnwale, nke si na ya pụta bụ na n'ọnọdụ mgbe edere na ịgụ na-abụghị quorum, mmebi nke nkwụsi ike nke Causal na-eme. Kpọmkwem ihe ị na-ekwu!

Ndụmọdụ anyị: jiri opekata mpe kworum ọgụgụ mgbe ị na-eji nkwụsi ike nke Causal. N'okwu a, ọ dịghị ihe ga-efunahụ, ọ bụrụgodị na ndekọ quorum efunahụ ... Nke a bụ ọnọdụ orthogonal: ọ bụrụ na onye ọrụ achọghị ka data efu efu, ọ kwesịrị iji ndekọ quorum. Nkwekọrịta ihe kpatara anaghị ekwe nkwa ịdịte aka. A na-ekwe nkwa ịdịte aka site na ntugharị na igwe ejikọtara na ntugharị.

Na: - Mgbe anyị mepụtara ihe atụ nke na-arụ ọrụ sharding maka anyị (ọ bụghị nna ukwu, ma ohu, n'otu n'otu), ọ na-adabere na oge Unix nke igwe nke ya ma ọ bụ n'oge "nna ukwu"; Ọ na-emekọrịta ihe na nke mbụ ma ọ bụ oge ụfọdụ?

MT: – Aga m dokwuo anya ugbu a. Shard (ya bụ akụkụ kehoraizin) - a na-enwekarị Primary ebe ahụ. Na shard nwere ike inwe "nna ukwu" na enwere ike inwe ụdị oyiri. Mana shard na-akwado ndekọ mgbe niile, n'ihi na ọ ga-akwadorịrị ụfọdụ ngalaba (shard nwere Primary).

Na: – Ya mere, ihe niile na-adabere kpere na "nna ukwu"? A na-eji oge nna ukwu eme ihe mgbe niile?

MT: - Ee. Ị nwere ike ikwu n'ụzọ ihe atụ: elekere na-akụ mgbe ntinye n'ime "nna ukwu", n'ime "Oplog" pụtara.

Na: - Anyị nwere onye ahịa na-ejikọta na ọ dịghị mkpa ịmara ihe ọ bụla gbasara oge ahụ?

MT: - Ọ dịghị mkpa ka ị mara ihe ọ bụla! Ọ bụrụ na anyị na-ekwu banyere otú o si arụ ọrụ na onye ahịa: mgbe onye ahịa chọrọ iji causal agbanwe agbanwe, ọ kwesịrị imeghe nnọkọ. Ugbu a ihe niile dị n'ebe ahụ: azụmahịa na nnọkọ, ma weghachite ikike ... Otu nnọkọ bụ ịhazi ihe omume ezi uche dị na ya na onye ahịa.

Ọ bụrụ na ọ mepee nnọkọ a wee kwuo n'ebe ahụ na ọ chọrọ nkwụsi ike nke Causal (ma ọ bụrụ na nnọkọ ahụ na-akwado nkwụsịtụ Causal na ndabara), ihe niile na-arụ ọrụ na-akpaghị aka. Onye ọkwọ ụgbọ ala na-echeta oge a ma na-abawanye mgbe ọ natara ozi ọhụrụ. Ọ na-echeta nzaghachi nke gara aga si na sava weghachiri data ahụ. Arịrịọ na-esote ga-enwe mgbe ụyọkọ ("oge karịrị nke a").

Ọ dịghị mkpa ka onye ahịa mara ihe ọ bụla! Nke a bụ ihe na-adịghị ahụkebe n'anya ya. Ọ bụrụ na ndị mmadụ na-eji njirimara ndị a, gịnị ka ha ga-eme? Nke mbụ, ị nwere ike ịgụ nke abụọ n'enweghị nsogbu: ị nwere ike idegara Primary akwụkwọ wee gụọ site na ụlọ akwụkwọ sekọndrị nke mpaghara ma hụ na ọ na-arụ ọrụ. N'otu oge ahụ, nnọkọ ndị edere na Primary nwere ike ibuga na Secondary, i.. ị nwere ike iji ọ bụghị otu nnọkọ, mana ọtụtụ.

Na: - Ụdị data ọhụrụ nke sayensị Compute - CRDT (ụdị data emegharịghị anya) nwere njikọ siri ike na isiokwu nke nkwụsi ike n'ikpeazụ. Ị tụlere iwebata ụdị data ndị a na nchekwa data na ihe ị nwere ike ikwu banyere ya?

MT: - Ajụjụ dị mma! CRDT nwere ezi uche maka ide esemokwu: na MongoDB, otu nna ukwu.

Na: – Enwere m ajụjụ si devops. N'ime ụwa n'ezie, enwere ọnọdụ ndị Jesuitical dị otú ahụ mgbe ọdịda Byzantine mere, na ndị ajọ mmadụ nọ n'ime ebe a na-echebe na-amalite ịbanye na protocol, zipu ngwugwu nka n'ụzọ pụrụ iche?

HighLoad ++, Mikhail Tyulenev (MongoDB): Ihe na-akpata agbanwe agbanwe: site na tiori na-eme ihe

MT: - Ndị ajọ mmadụ nọ na gburugburu dị ka ịnyịnya Trojan! Ndị ajọ mmadụ nọ na gburugburu nwere ike ime ọtụtụ ihe ọjọọ.

Na: – O doro anya na ịpụ, roughly na-ekwu okwu, oghere na ihe nkesa site na nke ị nwere ike inupụ a zoo nke enyí na daa dum ụyọkọ ruo mgbe ebighị ebi ... Ọ ga-ewe oge maka ntuziaka mgbake ... Nke a, na-etinye ya nwayọọ, bụ. ezighi ezi. N'aka nke ọzọ, nke a bụ ihe na-akpali: na ndụ n'ezie, na omume, e nwere ọnọdụ mgbe ndammana yiri esịtidem ọgụ ime?

MT: – Ebe ọ bụ na m adịkarịghị ezute mmebi nchekwa na ndụ n'ezie, enweghị m ike ikwu ma ọ bụrụ na ha emee. Ma ọ bụrụ na anyị na-ekwu banyere nkà ihe ọmụma mmepe, anyị na-eche dị ka nke a: anyị nwere perimeta nke na-enye ụmụ okorobịa na-eme nchebe - nke a bụ nnukwu ụlọ, mgbidi; na n'ime perimeta ị nwere ike ime ihe ọ bụla ịchọrọ. O doro anya na e nwere ndị ọrụ nwere ike ịlele naanị, na e nwere ndị ọrụ nwere ikike ihichapụ ndekọ ahụ.

Dabere na ikike, mmebi nke ndị ọrụ nwere ike ime nwere ike ịbụ òké, ma ọ bụ ọ nwere ike ịbụ elephant. O doro anya na onye ọrụ nwere ikike zuru oke nwere ike ime ihe ọ bụla. Onye ọrụ nwere oke ikike nwere ike ịkpata obere mmerụ ahụ. Karịsịa, ọ nweghị ike imebi usoro ahụ.

Na: - Na gburugburu ebe nchekwa, onye gbalịrị ịmepụta usoro iwu na-atụghị anya ya maka ihe nkesa ahụ iji mebie ihe nkesa ahụ kpamkpam, ma ọ bụrụ na ị nwere obi ụtọ, ụyọkọ dum ... Ọ na-enweta "ezigbo" ahụ?

MT: "Anụtụbeghị m ihe ndị dị otú ahụ." Eziokwu ahụ bụ na ị nwere ike imebi ihe nkesa n'ụzọ dị otú a abụghị ihe nzuzo. Daa n'ime, site na protocol, ịbụ onye ọrụ ikike nke nwere ike ide ihe dị otú a na ozi ahụ ... N'ezie, ọ gaghị ekwe omume, n'ihi na a ka ga-enyocha ya. Ọ ga-ekwe omume gbanyụọ nkwenye a maka ndị ọrụ na-achọghị ya - mgbe ahụ bụ nsogbu ha; ha, roughly na-ekwu okwu, mebiri mgbidi n'onwe ha na ị nwere ike ịkwanye elephant n'ebe ahụ, nke ga-azọ ụkwụ ... Ma n'ozuzu, ị nwere ike iyi uwe dị ka onye na-arụzi ihe, bịa dọpụta ya!

Na: – Daalụ maka akụkọ. Sergey (Yandex). Enwere ihe na-adịgide adịgide na Mong nke na-amachi ọnụ ọgụgụ ndị otu ịtụ vootu na Set Replica, na nke a na-adịgide adịgide bụ 7 (asaa). Gịnị mere nke a ji na-adịgide adịgide? Gịnị kpatara na nke a abụghị ụdị paramita?

MT: - Anyị nwere Set Set nwere ọnụ ụzọ 40. A na-enwekarị ọtụtụ. Amaghị m ụdị nke...

Na: – Na oyiri Set ị nwere ike na-agba ọsọ na-abụghị ịtụ vootu òtù, ma e nwere a kacha nke 7 ịtụ vootu òtù na nke a ma ọ bụrụ na oyiri Set na-agbasa gafee 3 data centers? Otu ebe data nwere ike ịgbanyụ ngwa ngwa, igwe ọzọ nwere ike dapụ.

MT: – Nke a adịlarị ntakịrị karịa oke akụkọ a. Nke a bụ ajụjụ n'ozuzu. Enwere m ike ịgwa gị maka ya ma emechaa.

HighLoad ++, Mikhail Tyulenev (MongoDB): Ihe na-akpata agbanwe agbanwe: site na tiori na-eme ihe

Ụfọdụ mgbasa ozi 🙂

Daalụ maka ịnọnyere anyị. Akụkọ anyị ọ masịrị gị? Chọrọ ịhụ ọdịnaya na-adọrọ mmasị karị? Kwado anyị site n'itinye iwu ma ọ bụ ịkwado ndị enyi, igwe ojii VPS maka ndị mmepe sitere na $ 4.99, analog pụrụ iche nke sava ọkwa ntinye, nke anyị chepụtara maka gị: Eziokwu niile gbasara VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps site na $19 ma ọ bụ otu esi ekekọrịta ihe nkesa? (dị na RAID1 na RAID10, ruo 24 cores na ruo 40GB DDR4).

Dell R730xd 2x dị ọnụ ala na etiti data Equinix Tier IV na Amsterdam? Naanị ebe a 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV sitere na $199 na Netherlands! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - sitere na $99! Gụkwuo banyere ya Kedu otu esi emepụta Infrastructure Corp. klas na iji Dell R730xd E5-2650 v4 sava kwesịrị 9000 euro maka otu penny?

isi: www.habr.com

Tinye a comment