HighLoad++, Mikhail Tyulenev (MongoDB): Kūlike kumu: mai ka manaʻo a i ka hana.

E mālama ʻia ka hālāwai HighLoad++ aʻe ma ʻApelila 6 a me 7, 2020 ma St. Petersburg.
Nā kikoʻī a me nā tiketi loulou. HighLoad++ Siberia 2019. Hale "Krasnoyarsk". Iune 25, 12:00. Theses and hōʻikeʻike.

HighLoad++, Mikhail Tyulenev (MongoDB): Kūlike kumu: mai ka manaʻo a i ka hana.

Ke kū'ē nei nā koi kūpono me ke kumumanaʻo, kahi i mālama ʻole ʻia ai nā mea koʻikoʻi no kahi huahana kalepa. Hōʻike kēia kamaʻilio i kahi kaʻina no ke koho ʻana a me ka hoʻohui ʻana i nā ala like ʻole i ka hoʻokumu ʻana i nā ʻāpana kūlike kumu ma muli o ka noiʻi hoʻonaʻauao e pili ana i nā koi o kahi huahana kalepa. E aʻo ana ka poʻe hoʻolohe e pili ana i nā ʻano hoʻonaʻauao i loaʻa i nā uaki loiloi, ka nānā ʻana i ka hilinaʻi, ka palekana ʻōnaehana, ka hoʻonohonoho ʻana i ka uaki, a me ke kumu i hoʻoholo ai ʻo MongoDB i kekahi mau hoʻonā.

ʻO Mikhail Tyulenev (i kapa ʻia ʻo MT): - E kamaʻilio wau e pili ana i ke kūpaʻa kumu - he hiʻohiʻona kēia a mākou i hana ai ma MongoDB. Hana wau i kahi hui o nā ʻōnaehana hoʻolaha, hana mākou ma kahi o ʻelua makahiki i hala.

HighLoad++, Mikhail Tyulenev (MongoDB): Kūlike kumu: mai ka manaʻo a i ka hana.

Ma ke kaʻina hana, pono wau e hoʻomaʻamaʻa iaʻu iho me ka nui o ka noiʻi hoʻonaʻauao, no ka mea, ua aʻo maikaʻi ʻia kēia hiʻohiʻona. Ua ʻike ʻia ʻaʻole kūpono kahi ʻatikala i ka mea i koi ʻia i loko o kahi waihona hana ma muli o nā koi kikoʻī loa i loaʻa paha i kekahi noi hana.

E kamaʻilio wau e pili ana i ke ʻano o kā mākou mea kūʻai aku i ka Research Research, e hoʻomākaukau ai i kahi mea e hiki ai iā mākou ke hōʻike aku i kā mākou mea hoʻohana ma ke ʻano he kīʻaha mākaukau i kūpono a palekana hoʻi e hoʻohana.

Kūlike kumu. E wehewehe kākou i nā manaʻo

I ka hoʻomaka ʻana, makemake wau e ʻōlelo ma nā ʻōlelo maʻamau i ke ʻano o ka Causal consistency. ʻElua mau huaʻōlelo - ʻo Leonard lāua ʻo Penny (moʻo TV "The Big Bang Theory"):

HighLoad++, Mikhail Tyulenev (MongoDB): Kūlike kumu: mai ka manaʻo a i ka hana.

E ʻōlelo kākou aia ʻo Penny i ʻEulopa a makemake ʻo Leonard e hoʻolei iā ia i kahi pāʻina pīhoihoi. A ʻaʻole hiki iā ia ke noʻonoʻo i kekahi mea ʻoi aku ka maikaʻi ma mua o ka hoʻolei ʻana iā ia mai kāna papa inoa hoaaloha, e hoʻouna ana i kāna mau hoaaloha āpau i kahi mea hou ma ka hānai: "E hauʻoli kāua iā Penny!" (Aia ʻo ia i ʻEulopa, ʻoiai ʻo ia e hiamoe ana, ʻaʻole ʻo ia e ʻike i kēia mau mea a ʻaʻole hiki ke ʻike, no ka mea, ʻaʻole ʻo ia ma laila). ʻO ka hope loa, hoʻopau ʻo ia i kēia pou, holoi iā ia mai ka Feed a hoʻihoʻi i ke komo ʻana i ʻole ʻo ia e ʻike i kekahi mea a ʻaʻohe hewa.
Maikaʻi a maikaʻi kēia, akā e manaʻo kākou ua puʻunaue ʻia ka ʻōnaehana a ua hewa iki nā mea. No ka laʻana, hiki ke kaohi ʻia ʻana o Penny ma hope o ka puka ʻana o kēia pou, inā ʻaʻole pili nā hanana i ke kumu a me ka hopena. ʻOiaʻiʻo, he laʻana kēia o ka wā e koi ʻia ai ke kūlike ʻo Causal i mea e hana ai i kahi hana ʻoihana (ma kēia hihia).

ʻO ka ʻoiaʻiʻo, he mau mea waiwai ʻole kēia o ka waihona - he kakaikahi ka poʻe e kākoʻo iā lākou. E neʻe kākou i nā hiʻohiʻona.

Nā Hoʻohālike Kūlike

He aha ke ʻano hoʻohālike kūlike i nā waihona? ʻO kēia kekahi o nā hōʻoia e hāʻawi ʻia e kahi ʻōnaehana puʻunaue e pili ana i ka ʻikepili i hiki ke loaʻa i ka mea kūʻai aku a me ke ʻano o ke kaʻina.

Ma ke kumu, hiki i nā hiʻohiʻona kūlike a pau ke ʻano like o kahi ʻōnaehana puʻunaue me kahi ʻōnaehana e holo ana, no ka laʻana, ma kahi node ma kahi kamepiula. A ʻo kēia ke ʻano like o kahi ʻōnaehana e holo ana ma luna o nā tausani o nā "Nodes" i hoʻokaʻawale ʻia e geo i kahi pona, kahi i hana ʻia ai kēia mau waiwai āpau ma ke kumu.

No laila, hoʻohana ʻia nā hiʻohiʻona kūlike i nā ʻōnaehana puʻupuʻu. ʻAʻole i loaʻa i nā ʻōnaehana āpau i hana mua ʻia a i hoʻohana ʻia ma ka scaling kūpaʻa like. Aia hoʻokahi Buffer Cache, a heluhelu mau ʻia nā mea a pau mai ia mea.

Hoʻohālike ikaika

ʻOiaʻiʻo, ʻo ke kumu hoʻohālike mua loa ʻo Strong (a i ʻole ka laina hiki ke piʻi, e like me ka mea i kapa pinepine ʻia). ʻO kēia kahi hiʻohiʻona kūlike e hōʻoia i kēlā me kēia hoʻololi, i ka manawa i hōʻoia ʻia ua hiki mai, ʻike ʻia e nā mea hoʻohana a pau o ka ʻōnaehana.

Hoʻokumu kēia i kahi hoʻonohonoho honua o nā hanana āpau i ka waihona. He waiwai kūpaʻa ikaika loa kēia, a he kumu kūʻai maʻamau. Eia naʻe, kākoʻo maikaʻi ʻia. He pipiʻi loa a lohi - ʻaʻole i hoʻohana ʻia. Kapa ʻia kēia hiki ke piʻi.

Aia kekahi waiwai ʻoi aku ka ikaika i kākoʻo ʻia ma Spanner - i kapa ʻia ʻo External Consistency. E kamaʻilio mākou no ia mea ma hope iki.

ʻEha

ʻO ka mea aʻe ʻo Causal, ʻo ia kaʻu e kamaʻilio nei. Aia kekahi mau haʻahaʻa haʻahaʻa ma waena o Strong a me Causal ʻaʻole wau e kamaʻilio e pili ana, akā hoʻolapalapa lākou a pau i Causal. He kumu hoʻohālike koʻikoʻi kēia no ka mea ʻo ia ka ikaika o nā hiʻohiʻona a pau, ka paʻa ikaika loa i ke alo o kahi pūnaewele a i ʻole nā ​​ʻāpana.

ʻO nā kumu kumu maoli kahi kūlana i hoʻopili ʻia nā hanana e kahi pilina kumu-a-hopena. ʻIke pinepine ʻia lākou e heluhelu i kāu mau kuleana mai ka manaʻo o ka mea kūʻai aku. Inā ʻike ka mea kūʻai aku i kekahi mau waiwai, ʻaʻole hiki iā ia ke ʻike i nā waiwai i hala. Ke hoʻomaka nei ʻo ia e ʻike i nā heluhelu prefix. Ke hele mai nei nā mea a pau i ka mea like.
ʻO nā kumu kumu ma ke ʻano he kumu hoʻohālikelike he ʻāpana ʻāpana o nā hanana ma ke kikowaena, kahi e ʻike ʻia ai nā hanana mai nā mea kūʻai aku a pau ma ke kaʻina like. I kēia hihia, ʻo Leonard lāua ʻo Penny.

Kuhi Loaʻa

ʻO ke kolu o ka hoʻohālike ʻo ia ʻo Eventual Consistency. ʻO kēia ka mea e kākoʻo ai i nā ʻōnaehana puʻupuʻu āpau, ke kumu hoʻohālike liʻiliʻi i kūpono i nā mea āpau. ʻO ia ke ʻano o kēia: inā loaʻa iā mākou kekahi mau hoʻololi i ka ʻikepili, i kekahi manawa lilo lākou i kūlike.

I kēlā manawa ʻaʻole ʻo ia e ʻōlelo i kekahi mea, inā ʻaʻole e lilo ʻo ia i External Consistency - he moʻolelo ʻokoʻa loa ia. Eia naʻe, he hiʻohiʻona kaulana loa kēia, ka mea maʻamau. ʻO ka mea paʻamau, hoʻohana nā mea hoʻohana a pau o nā ʻōnaehana puʻunaue i ka hopena hopena.

Makemake au e hāʻawi i kekahi mau hiʻohiʻona hoʻohālikelike:

HighLoad++, Mikhail Tyulenev (MongoDB): Kūlike kumu: mai ka manaʻo a i ka hana.

He aha ke ʻano o kēia mau pua?

  • Latency Ke piʻi aʻe ka ikaika paʻa, lilo ia i mea nui no nā kumu maopopo: pono ʻoe e hana i nā moʻolelo hou aʻe, e kiʻi i ka hōʻoia mai nā pūʻali āpau a me nā nodes e komo i ka pūʻulu aia ka ʻikepili ma laila. No laila, ʻo ka hopena ʻoi loa ka pane wikiwiki loa, no ka mea ma laila, ma ke ʻano he kānāwai, hiki iā ʻoe ke hoʻopaʻa i ka hoʻomanaʻo ʻana a ʻo kēia, ma ke kumu, lawa.
  • Loaʻa. Inā mākou e hoʻomaopopo i kēia e like me ka hiki o ka ʻōnaehana ke pane aku i mua o nā haʻihaʻi pūnaewele, nā ʻāpana, a i ʻole kekahi ʻano hemahema, piʻi ka hoʻomanawanui hewa i ka emi ʻana o ke kumu hoʻohālikelike, ʻoiai ua lawa iā mākou ke ola hoʻokahi a ma ka like. hana ka manawa i kekahi mau ʻikepili. ʻAʻole hōʻoiaʻiʻo ʻo Eventual Consistency i kekahi mea e pili ana i ka ʻikepili - hiki ke lilo i kekahi mea.
  • Anomalies. I ka manawa like, ʻoiaʻiʻo, piʻi ka helu o nā anomalies. I loko o ka Strong Consistency ʻaneʻane ʻaʻole pono lākou e noho, akā i ka Consistency Hiki ke lilo i mea. Ke kū nei ka nīnau: no ke aha e koho ai ka poʻe i ka hopena hopena inā loaʻa nā anomalies? ʻO ka pane e pili ana nā hiʻohiʻona Eventual Consistency a aia nā anomalies, no ka laʻana, i loko o kahi manawa pōkole; hiki ke hoʻohana i ka wizard e heluhelu a ʻoi aku ka liʻiliʻi a i ʻole ka heluhelu ʻana i ka ʻikepili kūlike; Hiki pinepine ke hoʻohana i nā hiʻohiʻona kūpaʻa ikaika. Ma ka hoʻomaʻamaʻa hana kēia, a pinepine ka helu o nā anomalies i kaupalena ʻia i ka manawa.

CAP theorem

Ke ʻike ʻoe i nā huaʻōlelo kūlike, loaʻa - he aha ka mea i hiki i kou manaʻo? Pololei - CAP theorem! I kēia manawa, makemake wau e hoʻopau i ka moʻolelo... ʻAʻole wau - ʻo Martin Kleppmann, nāna i kākau i kahi ʻatikala maikaʻi loa, kahi puke kupaianaha.

HighLoad++, Mikhail Tyulenev (MongoDB): Kūlike kumu: mai ka manaʻo a i ka hana.

ʻO ke kumukānāwai CAP he kumu ia i hoʻokumu ʻia i ka makahiki 2000 ʻo Consistency, Availability, Partitions: e lawe i ʻelua, a ʻaʻole hiki iā ʻoe ke koho ʻekolu. He kumu ia. Ua hōʻoia ʻia ma ke ʻano he theorem i kekahi mau makahiki ma hope mai e Gilbert lāua ʻo Lynch. A laila hoʻomaka kēia e hoʻohana ʻia ma ke ʻano he mantra - hoʻomaka nā ʻōnaehana e māhele ʻia i CA, CP, AP a pēlā aku.

Ua hōʻoia maoli ʻia kēia theorem no kēia mau hihia ... ʻO ka mea mua, ʻaʻole i manaʻo ʻia ka loaʻa ʻana ma ke ʻano he waiwai mau mai ka zero a hiki i nā haneli (0 - "make" ka ʻōnaehana, 100 - pane wikiwiki; ua maʻa mākou i ka noʻonoʻo ʻana pēlā) , akā, ma keʻano he waiwai o ka algorithm, e hōʻoiaʻiʻo ana no kāna mau hana a pau e hoʻihoʻi i kaʻikepili.

ʻAʻohe ʻōlelo e pili ana i ka manawa pane! Aia kahi algorithm e hoʻihoʻi i ka ʻikepili ma hope o 100 mau makahiki - kahi algorithm maikaʻi loa i loaʻa, ʻo ia kahi ʻāpana o ka theorem CAP.
ʻO ka lua: ua hōʻoia ʻia ka theorem no nā loli i nā waiwai o ke kī hoʻokahi, ʻoiai ʻo ka hiki ke hoʻololi ʻia kēia mau loli. 'O ia ho'i, ma ka 'oia'i'o, 'a'ole ho'ohana 'ia, no ka mea, he 'oko'a nā hi'ohi'ona.

No ke aha kēia mau mea? Eia kekahi, ʻaʻole pili pono ka theorem CAP i ke ʻano i hōʻoia ʻia ai. Ma ke ʻano theoretical, ua kaupalena ʻia nā mea āpau. Ua hoʻololi ʻia i kahi loina i intuitively pololei, akā ma ka laulā ʻaʻole i hōʻoia ʻia.

ʻO ka hoʻohālikelike kumu ke kumu hoʻohālike ikaika loa

ʻO ka mea e hana nei i kēia manawa hiki iā ʻoe ke loaʻa i nā mea ʻekolu: Consistency, Availability using Partitions. ʻO ka mea nui, ʻo Causal consistency ke kumu hoʻohālikelike ikaika loa, e hana mau ana i mua o nā Partitions (nā haki i ka pūnaewele). ʻO ia ke kumu i makemake nui ai, a no laila mākou i lawe ai.

HighLoad++, Mikhail Tyulenev (MongoDB): Kūlike kumu: mai ka manaʻo a i ka hana.

ʻO ka mea mua, maʻalahi ia i ka hana a nā mea hoʻomohala noi. ʻO ka mea nui, ka loaʻa ʻana o ke kākoʻo nui mai ke kikowaena: ke hōʻoia ʻia nā moʻolelo āpau i loaʻa i loko o kahi mea kūʻai aku e hōʻea i ke kaʻina like ma kahi mea kūʻai aku. ʻO ka lua, kūpaʻa ia i nā ʻāpana.

MongoDB Kuloko Kuloko

Ke hoʻomanaʻo nei ʻo ia ka ʻaina awakea, neʻe mākou i ka lumi kuke. E haʻi aku wau iā ʻoe e pili ana i ka ʻōnaehana ʻōnaehana, ʻo ia hoʻi, he aha ka MongoDB no ka poʻe e lohe nei e pili ana i ia waihona no ka manawa mua.

HighLoad++, Mikhail Tyulenev (MongoDB): Kūlike kumu: mai ka manaʻo a i ka hana.

HighLoad++, Mikhail Tyulenev (MongoDB): Kūlike kumu: mai ka manaʻo a i ka hana.

ʻO MongoDB (ma hope aku i kapa ʻia ʻo "MongoDB") he ʻōnaehana puʻupuʻu e kākoʻo ana i ka scaling horizontal, ʻo ia hoʻi, sharding; a i loko o kēlā me kēia shard, kākoʻo pū ia i ka redundancy ʻikepili, ʻo ia hoʻi, ka hana hou ʻana.

ʻO Sharding ma MongoDB (ʻaʻole kahi waihona pili) e hana i ke kaulike maʻalahi, ʻo ia hoʻi, ʻo kēlā me kēia hōʻiliʻili o nā palapala (a i ʻole "papa" ma ke ʻano o ka ʻikepili pili) ua māhele ʻia i mau ʻāpana, a hoʻoneʻe aunoa ke kikowaena iā lākou ma waena o nā shards.

ʻO ka Query Router, nāna e hāʻawi i nā noi, no ka mea kūʻai aku kekahi mea kūʻai aku e hana ai. Ua ʻike mua ʻo ia i hea a me ka ʻikepili i loaʻa a kuhikuhi i nā noi āpau i ka shard kūpono.

ʻO kekahi mea nui: ʻO MongoDB kahi haku hoʻokahi. Aia hoʻokahi Primary - hiki iā ia ke lawe i nā moʻolelo e kākoʻo ana i nā kī i loko. ʻAʻole hiki iā ʻoe ke hana Multi-master kākau.

Ua hoʻokuʻu mākou i ka 4.2 - ua ʻike ʻia nā mea hoihoi hou ma laila. ʻO ka mea kūikawā, ua hoʻokomo lākou iā Lucene - huli - ʻo ia hoʻi ka executable java i Mongo, a ma laila i hiki ai ke hana i nā huli ma Lucene, e like me Elastica.

A hana lākou i kahi huahana hou - Charts, loaʻa nō hoʻi ma Atlas (Mongo's own Cloud). Loaʻa iā lākou kahi Tier Free - hiki iā ʻoe ke pāʻani a puni me ia. Ua makemake nui au i nā Palapala - ʻike ʻikepili, intuitive loa.

Nā mea hoʻohui Kausal consistent

Ua helu au ma kahi o 230 mau ʻatikala i paʻi ʻia ma kēia kumuhana - mai Leslie Lampert. I kēia manawa mai koʻu hoʻomanaʻo ʻana e haʻi aku wau iā ʻoe i kekahi mau ʻāpana o kēia mau mea.

HighLoad++, Mikhail Tyulenev (MongoDB): Kūlike kumu: mai ka manaʻo a i ka hana.

Ua hoʻomaka ʻia me kahi ʻatikala na Leslie Lampert, i kākau ʻia i ka makahiki 1970. E like me kāu e ʻike ai, ke hoʻomau nei kekahi mau noiʻi e pili ana i kēia kumuhana. I kēia manawa ke ʻike nei ʻo Causal consistency i ka hoihoi e pili ana i ka hoʻomohala ʻana o nā ʻōnaehana puʻupuʻu.

Nā palena

He aha nā kapu? ʻO kēia kekahi o nā manaʻo nui, no ka mea, ʻokoʻa loa nā kaohi ʻana o kahi ʻōnaehana hana mai nā mea paʻa i loko o nā ʻatikala hoʻonaʻauao. He mea hana maoli nō lākou.

HighLoad++, Mikhail Tyulenev (MongoDB): Kūlike kumu: mai ka manaʻo a i ka hana.

  • ʻO ka mea mua, ʻo "MongoDB" kahi haku hoʻokahi, e like me kaʻu i ʻōlelo ai (maʻalahi kēia).
  • Manaʻo mākou e kākoʻo ka ʻōnaehana ma kahi o 10 tausani shards. ʻAʻole hiki iā mākou ke hoʻoholo i nā hoʻoholo hoʻolālā e hoʻopaʻa pono i kēia waiwai.
  • Loaʻa iā mākou kahi ao, akā manaʻo mākou e loaʻa i ke kanaka ka manawa ke hoʻoiho ʻo ia i ka binary, holo ia ma kāna kamepiula, a hana maikaʻi nā mea āpau.
  • Manaʻo mākou i kahi mea i manaʻo ʻole ʻia e Research: hiki i nā mea kūʻai aku waho ke hana i kā lākou makemake. ʻO MongoDB kahi kumu wehe. No laila, hiki i nā mea kūʻai ke akamai a huhū - hiki iā lākou ke makemake e wāwahi i nā mea āpau. Manaʻo mākou e hiki mai ana nā Feilor Byzantine.
  • No nā mea kūʻai aku ma waho o ka palena, aia kahi palena nui: inā paʻa kēia hiʻohiʻona, a laila ʻaʻole pono e ʻike ʻia ka hoʻohaʻahaʻa hana.
  • ʻO kekahi mea ʻē aʻe he anti-academic: ka hoʻohālikelike ʻana o nā mana o mua a me nā mea e hiki mai ana. Pono nā mea hoʻokele kahiko e kākoʻo i nā mea hou, a pono e kākoʻo ka waihona i nā mea hoʻokele kahiko.

Ma keʻano laulā, ke kau nei kēia mau mea i nā kapu.

Nā ʻāpana kūlike kumu

E kamaʻilio wau i kēia manawa e pili ana i kekahi o nā ʻāpana. Inā mākou e noʻonoʻo i ka hoʻohālikelike kumu ma ka laulā, hiki iā mākou ke koho i nā poloka. Ua koho mākou mai nā hana i pili i kekahi poloka: Dependency Tracking, ke koho ʻana i nā uaki, pehea e hiki ai ke hui pū ʻia kēia mau wati me kekahi, a pehea mākou e hōʻoia ai i ka palekana - he kikoʻī koʻikoʻi kēia o kaʻu e kamaʻilio ai:

HighLoad++, Mikhail Tyulenev (MongoDB): Kūlike kumu: mai ka manaʻo a i ka hana.

Ka Hoʻokolo ʻana i ka hilinaʻi piha

No ke aha e pono ai? No laila ke hoʻopili hou ʻia ka ʻikepili, kēlā me kēia moʻolelo, loaʻa i kēlā me kēia hoʻololi ʻikepili ka ʻike e pili ana i nā loli e pili ana. ʻO ka hoʻololi mua loa a me ka naive ʻo ia ka manawa i loaʻa i kēlā me kēia memo i loko o kahi moʻolelo ka ʻike e pili ana i nā memo mua.

HighLoad++, Mikhail Tyulenev (MongoDB): Kūlike kumu: mai ka manaʻo a i ka hana.

I kēia laʻana, ʻo ka helu ma nā bracket curly ka helu moʻolelo. I kekahi manawa ua hoʻoili ʻia kēia mau moʻolelo me nā waiwai i ko lākou holoʻokoʻa, i kekahi manawa ua hoʻololi ʻia kekahi mau mana. ʻO ka laina lalo, aia kēlā me kēia hoʻololi i ka ʻike e pili ana i ka mea ma mua (ʻoiaʻiʻo e lawe i kēia mau mea a pau i loko ona iho).

No ke aha mākou i hoʻoholo ai ʻaʻole e hoʻohana i kēia ala (holo piha)? ʻOiaʻiʻo, no ka mea hiki ʻole kēia ala: ʻo ka hoʻololi ʻana i kahi ʻoihana pūnaewele e pili ana i nā hoʻololi mua a pau i kēlā ʻoihana pūnaewele, ka hoʻololi ʻana, e ʻōlelo, Facebook a i ʻole VKontakte i kēlā me kēia hoʻonui. Eia nō naʻe, nui ka noiʻi e pili ana i ka Full Dependency Tracking - he mau pūnaewele mua kēia; no kekahi mau kūlana, hana maoli ia.

Ka hoʻokolo ʻana i ka hilinaʻi

ʻOi aku ka palena o ka mea aʻe. Noʻonoʻo ʻia ka hoʻoili ʻana o ka ʻike ma ʻaneʻi, akā ʻo ka mea i hilinaʻi ʻia. ʻO ka mea e pili ana i ka mea, e like me ke kānāwai, i hoʻoholo ʻia e ka Application. Ke hoʻopili hou ʻia ka ʻikepili, hoʻihoʻi wale ka nīnau i nā pane ke hoʻokō ʻia nā hilinaʻi mua, ʻo ia hoʻi, hōʻike ʻia. ʻO kēia ke kumu o ka hana ʻana o Causal consistency.

HighLoad++, Mikhail Tyulenev (MongoDB): Kūlike kumu: mai ka manaʻo a i ka hana.

ʻIke ʻo ia e pili ana ka moʻolelo 5 i nā moʻolelo 1, 2, 3, 4 - no laila, kali ʻo ia ma mua o ka loaʻa ʻana o ka mea kūʻai aku i nā hoʻololi i hana ʻia e ka hoʻoholo ʻana a Penny, i ka wā i hala mua ai nā hoʻololi āpau ma ka waihona.

ʻAʻole kūpono kēia iā mākou, no ka mea he nui ka ʻike, a e hoʻolohi i nā mea. Aia kekahi ala ʻē aʻe ...

Uaki Lamport

He ʻelemakule loa lākou. ʻO Lamport Clock ke ʻano o kēia mau hilinaʻi i pelu ʻia i kahi hana scalar, i kapa ʻia ʻo Lamport Clock.

ʻO ka hana scalar kekahi helu abstract. Ua kapa pinepine ia ka manawa logical. Me kēlā me kēia hanana, hoʻonui kēia counter. Hoʻouna ʻo Counter, i ʻike ʻia i ke kaʻina hana, i kēlā me kēia memo. ʻIke maopopo ʻole hiki ke hana ʻia nā kaʻina hana, hiki iā lākou ke loaʻa nā manawa like ʻole. Eia naʻe, ke kaulike nei ka ʻōnaehana i ka uaki me kēlā memo. He aha ka hana ma kēia hihia?

Māhele au i kēlā ʻāpana nui i ʻelua i mea e maopopo ai: Hiki i nā hoaaloha ke noho i hoʻokahi node, aia kahi ʻāpana o ka hōʻiliʻili, a hiki i ka Feed ke noho i kahi ʻāpana ʻē aʻe, aia kahi ʻāpana o kēia hōʻiliʻili. Ua maopopo pehea e hiki ai iā lākou ke puka i waho o ka laina? E ʻōlelo ʻo First Feed: "Replicated", a laila Hoa. Inā ʻaʻole hāʻawi ka ʻōnaehana i kekahi ʻano hōʻoiaʻiʻo ʻaʻole e hōʻike ʻia ka Feed a hiki i ka hāʻawi ʻia ʻana o nā hilinaʻi Hoa ma ka hōʻiliʻili Hoa, a laila e loaʻa iā mākou ke kūlana aʻu i ʻōlelo ai.

ʻIke ʻoe i ka piʻi ʻana o ka manawa counter ma Feed:

HighLoad++, Mikhail Tyulenev (MongoDB): Kūlike kumu: mai ka manaʻo a i ka hana.

No laila ʻo ka waiwai nui o kēia Lamport Clock and Causal consistency (wehewehe ʻia ma o Lamport Clock) ʻo ia kēia: inā loaʻa iā mākou nā hanana A a me B, a ʻo ka hanana B e pili ana i ka hanana A *, a laila ʻoi aku ka liʻiliʻi o ka LogicalTime o Event A ma mua o LogicalTime mai ka hanana B.

* I kekahi manawa, ʻōlelo pū lākou ua hiki ʻo A ma mua o B, ʻo ia hoʻi, ua hana ʻia ʻo A ma mua o B - ʻo ia kekahi pilina e kauoha hapa i ka pūʻulu holoʻokoʻa o nā hanana i hana ma ka laulā.

ʻAʻole pololei ka ʻaoʻao. ʻO kēia kekahi o nā hemahema nui o Lamport Clock - ʻāpana ʻāpana. Aia kekahi manaʻo e pili ana i nā hanana like ʻole, ʻo ia hoʻi, nā hanana i loaʻa ʻole (A ma mua o B) ʻaʻole (A i hana ma mua o B). ʻO kekahi laʻana, ʻo ia ka hoʻohui like ʻana o Leonard me kekahi mea ʻē aʻe ma ke ʻano he hoaaloha (ʻaʻole ʻo Leonard, akā ʻo Sheldon, no ka laʻana).
ʻO kēia ka waiwai i hoʻohana pinepine ʻia i ka hana ʻana me nā uaki Lamport: nānā pono lākou i ka hana a mai kēia mea lākou e hoʻoholo ai he hilinaʻi paha kēia mau hanana. No ka mea, he ʻoiaʻiʻo kekahi ala: inā ʻoi aku ka liʻiliʻi o LogicalTime A ma mua o LogicalTime B, a laila ʻaʻole hiki ke B ma mua o A; a inā ʻoi aku, a laila paha.

Uaki Vector

ʻO ka hoʻomohala kūpono o ka uaki Lamport ʻo ka Vector Clock. ʻOkoʻa lākou i kēlā me kēia node ma aneʻi i kona uaki ponoʻī, a ua hoʻoili ʻia lākou ma ke ʻano he vector.
I kēia hihia, ʻike ʻoe ʻo ka helu helu zeroth o ka vector ke kuleana no ka Feed, a ʻo ka helu helu mua o ka vector no nā Hoa (kekahi o kēia mau nodes). A i kēia manawa e hoʻonui lākou: piʻi ka helu helu helu o "Feed" i ke kākau ʻana - 1, 2, 3:

HighLoad++, Mikhail Tyulenev (MongoDB): Kūlike kumu: mai ka manaʻo a i ka hana.

No ke aha i ʻoi aku ka maikaʻi o ka Uaki Vector? No ka mea e ʻae lākou iā ʻoe e noʻonoʻo i nā hanana i ka manawa like a i ka wā e kū ai lākou ma nā node like ʻole. He mea nui kēia no kahi ʻōnaehana sharding e like me MongoDB. Eia naʻe, ʻaʻole mākou i koho i kēia, ʻoiai he mea kupanaha ia, a hana maikaʻi, a kūpono paha ia iā mākou ...

Inā loaʻa iā mākou he 10 tausani shards, ʻaʻole hiki iā mākou ke hoʻololi i nā ʻāpana he 10 tausani, ʻoiai inā mākou e hoʻopaʻa a i ʻole e piʻi mai me kahi mea ʻē aʻe - e ʻoi aku ka liʻiliʻi o ka uku ma mua o ka nui o kēia vector holoʻokoʻa. No laila, me ka ʻeha ʻana i ko mākou naʻau a me nā niho, haʻalele mākou i kēia ala a neʻe aku i kahi ʻē aʻe.

ʻO Spanner TrueTime. Uaki atomika

Ua ʻōlelo au e loaʻa kahi moʻolelo e pili ana iā Spanner. He mea ʻoluʻolu kēia, pololei mai ka XNUMXst century: nā uaki atomika, GPS synchronization.

He aha ka manaʻo? ʻO "Spanner" kahi ʻōnaehana Google i loaʻa i nā poʻe i kēia manawa (ua hoʻohui lākou iā SQL). Loaʻa i kēlā me kēia hana i kahi hōʻailona manawa. No ka hoʻonohonoho ʻana o ka manawa *, hiki ke hāʻawi ʻia kēlā me kēia hanana i kahi manawa kikoʻī - loaʻa i nā uaki atomic kahi manawa kali, a ma hope o ka manawa ʻokoʻa e "hana".

HighLoad++, Mikhail Tyulenev (MongoDB): Kūlike kumu: mai ka manaʻo a i ka hana.

No laila, ma ke kākau wale ʻana i ka waihona a me ka kali ʻana no kekahi manawa, ua hōʻoia ʻia ka Serializability o ka hanana. Loaʻa iā lākou ke kumu hoʻohālike ikaika loa i hiki ke noʻonoʻo ʻia ma ke kumu - ʻo ia ka Kūlike Kūwaho.

* ʻO kēia ka pilikia nui me nā uaki Lampart - ʻaʻole lākou i hui pū ʻia ma nā ʻōnaehana puʻupuʻu. Hiki iā lākou ke hoʻokaʻawale; ʻoiai me NTP, ʻaʻole naʻe lākou e hana maikaʻi loa. Loaʻa iā "Spanner" kahi uaki atomika a me ka hoʻonohonoho ʻana, me he mea lā, he microseconds.

No ke aha mākou i koho ʻole ai? ʻAʻole mākou manaʻo ua loaʻa i kā mākou mea hoʻohana kahi uaki atomika i kūkulu ʻia. Ke ʻike ʻia lākou, ke kūkulu ʻia nei i loko o kēlā me kēia kamepiula, e loaʻa kekahi ʻano o ka hoʻonohonoho GPS super cool - a laila ʻae ... Akā i kēia manawa ʻo ka mea maikaʻi loa e hiki ai ʻo Amazon, Base Stations - no ka poʻe hauʻoli ... No laila ua hoʻohana mākou i nā wati ʻē aʻe. .

Uaki Hybrid

ʻO kēia ka mea e ʻike ai ma MongoDB i ka wā e hōʻoiaʻiʻo ai i ka kūlike ʻo Causal. Pehea lākou hybrid? He waiwai scalar ka Hybrid, akā ʻelua mau ʻāpana:

HighLoad++, Mikhail Tyulenev (MongoDB): Kūlike kumu: mai ka manaʻo a i ka hana.

  • ʻO ka mua ka Unix epoch (ehia mau kekona i hala mai ka "hoʻomaka o ka honua kamepiula").
  • ʻO ka lua he hoʻonui, he 32-bit unsigned int.

ʻO ia wale nō, ʻoiaʻiʻo. Aia kēia ʻano hana: ʻo ka ʻāpana i kuleana no ka manawa e hui pū ʻia me ka uaki i nā manawa a pau; I kēlā me kēia manawa e loaʻa ai kahi hoʻohou, hoʻonohonoho ʻia kēia ʻāpana me ka uaki a ʻike ʻia ʻoi aku ka pololei o ka manawa, a ʻo ka hoʻonui ʻana e hiki ai iā ʻoe ke hoʻokaʻawale i waena o nā hanana i hana ʻia i ka manawa like.

No ke aha he mea nui kēia no MongoDB? No ka mea hiki iā ʻoe ke hana i kekahi ʻano hale ʻaina hoʻihoʻi i kekahi manawa i ka manawa, ʻo ia hoʻi, ua kuhikuhi ʻia ka hanana e ka manawa. He mea nui kēia i ka wā e pono ai kekahi mau hanana; No kahi waihona, nā hanana he hoʻololi i ka waihona i hana ʻia i kekahi mau manawa i ka manawa.

E haʻi aku wau iā ʻoe i ke kumu nui loa iā ʻoe wale nō (ʻoluʻolu, mai haʻi i kekahi)! Hana mākou i kēia no ka mea ʻo ia ka mea i hoʻonohonoho ʻia, ʻike ʻia ka ʻikepili i loko o MongoDB OpLog. ʻO OpLog kahi hoʻolālā ʻikepili i loaʻa i nā hoʻololi āpau i ka waihona: hele mua lākou i OpLog, a laila hoʻohana ʻia i ka Storage iā ia iho inā he lā hoʻopiʻi a i ʻole shard.

ʻO kēia ke kumu nui. Eia nō naʻe, aia kekahi mau koi kūpono no ka hoʻomohala ʻana i kahi waihona, ʻo ia hoʻi he mea maʻalahi - liʻiliʻi liʻiliʻi, he liʻiliʻi nā mea haki i hiki ke kākau hou ʻia a hoʻāʻo ʻia. ʻO ka ʻoiaʻiʻo o kā mākou oplogs i kuhikuhi ʻia e nā uaki hybrid i kōkua nui a ʻae iā mākou e hana i ke koho kūpono. Ua uku maoli ia a ua hana maalea i ka prototype mua loa. Ua hauʻoli loa!

Hoʻonohonoho ʻana i ka uaki

Nui nā ʻano hana hoʻonohonoho i wehewehe ʻia ma ka palapala ʻepekema. Ke kamaʻilio nei au e pili ana i ka synchronization ke loaʻa iā mākou ʻelua shards ʻokoʻa. Inā loaʻa hoʻokahi kope kope, ʻaʻohe pono no ka hoʻonohonoho ʻana: he "master hoʻokahi" kēia; loaʻa iā mākou he OpLog, kahi e hāʻule ai nā hoʻololi āpau - i kēia hihia, ua kauoha ʻia nā mea āpau ma ka "Oplog" ponoʻī. Akā inā loaʻa iā mākou ʻelua shards ʻokoʻa, he mea nui ka hoʻonohonoho manawa ma aneʻi. ʻO kēia kahi i kōkua nui ai ka uaki vector! Akā ʻaʻole iā mākou.

HighLoad++, Mikhail Tyulenev (MongoDB): Kūlike kumu: mai ka manaʻo a i ka hana.

He kūpono ka lua - ʻo ia ka "Heartbeats". Hiki ke hoʻololi i kekahi mau hōʻailona e kū ana i kēlā me kēia manawa. Akā lohi loa ka Heartbeats, ʻaʻole hiki iā mākou ke hāʻawi i ka latency i kā mākou mea kūʻai.

ʻO ka manawa maoli, he mea kupanaha. Akā, eia hou, ʻo ia paha ka wā e hiki mai ana ... ʻOiai ua hiki ke hana ʻia ma Atlas, aia nā mea wikiwiki "Amazon" manawa synchronizers. Akā ʻaʻole e loaʻa i nā kānaka a pau.

ʻO ka haʻihaʻi ʻana ka manawa e komo ai nā memo a pau. ʻO kēia ka mea a mākou e hoʻohana ai. ʻO kēlā me kēia memo ma waena o nā nodes, kahi mea hoʻokele, kahi router node data, ʻo nā mea āpau no MongoDB kekahi ʻano mea, kahi waihona waihona i loaʻa kahi uaki e holo ana. Loaʻa iā lākou ka manaʻo o ka manawa hybrid ma nā wahi āpau, lawe ʻia. 64 mau ʻāpana? ʻAe kēia, hiki kēia.

Pehea ka hana like ana?

Eia wau ke nānā nei i hoʻokahi kope kope i mea e maʻalahi iki. Aia ke kula kiʻekiʻe a me ke kula kiʻekiʻe. Hana ʻo Secondary i ka hana hou ʻana a ʻaʻole i hui pū ʻia me ka Primary.

Hoʻokomo ʻia i loko o ka "Primy" me kahi waiwai manawa. Hoʻonui kēia mea hoʻokomo i ka helu kūloko i ka 11, inā ʻo ia ka nui. A i ʻole e nānā i nā koina uaki a hoʻonohonoho i ka uaki inā ʻoi aku ka nui o nā koina uaki. Hiki iā ʻoe ke hoʻonohonoho i ka manawa.

Ma hope o kāna hana ʻana i ka hoʻopaʻa ʻana, hiki mai kahi manawa koʻikoʻi. Aia ka uaki ma "MongoDB" a hoʻonui wale ʻia ke kākau ʻana iā "Oplog". ʻO kēia ka hanana e hoʻololi i ke kūlana o ka pūnaewele. Ma nā ʻatikala kahiko loa, manaʻo ʻia kahi hanana i ka wā e paʻi ai kahi leka i kahi node: ua hiki mai ka memo, ʻo ia hoʻi ua hoʻololi ka ʻōnaehana i kona kūlana.

ʻO kēia ke kumu i ka wā o ka noiʻi ʻana ʻaʻole maopopo loa ke ʻano o ka wehewehe ʻana i kēia leka. Uaʻike maopopo mākou ināʻaʻole i hōʻikeʻia ma ka "Oplog", a laila,ʻaʻole ia e unuhiʻia ma kekahiʻano, aʻo ka hoʻololiʻana i ka moku'āina o ka pūnaewele he komo wale nō ia i ka "Oplog". Hoʻomaʻamaʻa kēia i nā mea a pau iā mākou: hoʻomaʻamaʻa ke kumu hoʻohālike, a hiki iā mākou ke hoʻonohonoho i loko o hoʻokahi set replica, a me nā mea pono ʻē aʻe he nui.

Hoʻihoʻi ʻia ka waiwai i kākau ʻia i ka "Oplog" - ʻike mākou ua loaʻa i ka "Oplog" kēia waiwai, a ʻo 12 kona manawa. ka leka. 'Ōleloʻo ia: "Pono wau i nā mea a pau i hanaʻia ma hope o 12 aiʻole i kaʻumikumamālua" (e nānā i ke kiʻi ma luna).

ʻO kēia ka mea i kapa ʻia ʻo Causal a consistent (CAT). Aia kekahi manaʻo i loko o ke kumumanaʻo he ʻāpana kēia o ka manawa, i kūlike i loko ona iho. I kēia hihia, hiki iā mākou ke ʻōlelo ʻo ia ke kūlana o ka ʻōnaehana i ʻike ʻia i ka manawa 12.

I kēia manawa ʻaʻohe mea ma aneʻi, no ka mea, hoʻohālikelike kēia ʻano i ke kūlana i ka wā e pono ai ʻoe i ka Secondary e hana hou i ka ʻikepili mai ka Primary. Ke kali nei ʻo ia ... A i kēia manawa ua hiki mai ka ʻikepili - hoʻihoʻi ʻo ia i kēia mau waiwai.

HighLoad++, Mikhail Tyulenev (MongoDB): Kūlike kumu: mai ka manaʻo a i ka hana.

ʻO ia ka hana a pau. Kokoke.

He aha ka manaʻo o "kokoke"? E manaʻo kākou aia kekahi kanaka i heluhelu a hoʻomaopopo i ka hana ʻana o kēia mau mea. Ua ʻike au i kēlā me kēia manawa e kū mai ai ʻo ClusterTime, hoʻomaikaʻi ia i ka uaki loiloi kūloko, a laila hoʻonui ʻia ke komo ʻana i hoʻokahi. Lawe kēia hana i 20 laina. E ʻōlelo kākou ua hoʻouna kēia kanaka i ka helu 64-bit nui loa, hoʻemi ʻia hoʻokahi.

No ke aha he "minus one"? No ka mea e hoʻololi ʻia ka uaki kūloko i kēia waiwai (ʻoiaʻiʻo, ʻo ia ka mea nui loa a ʻoi aku ka nui ma mua o ka manawa o kēia manawa), a laila e loaʻa kahi komo ma "Oplog", a e hoʻonui ʻia ka uaki e kahi ʻāpana ʻē aʻe - a aia i laila. he waiwai nui loa (he mau ʻāpana wale nō, ʻaʻohe wahi ʻē aʻe e hele ai) , unsaint innts).

Ua maopopo ma hope o kēia ʻano lilo loa ka ʻōnaehana no kekahi mea. Hiki ke hoʻokuʻu waleʻia a hoʻomaʻemaʻeʻia - he nui nā hana lima. Loaʻa piha:

HighLoad++, Mikhail Tyulenev (MongoDB): Kūlike kumu: mai ka manaʻo a i ka hana.

Eia kekahi, inā e hana hou ʻia kēia ma kahi ʻē aʻe, a laila hāʻule wale ka pūʻulu holoʻokoʻa. ʻO kahi kūlana kūpono ʻole i hiki i kekahi ke hoʻonohonoho wikiwiki a maʻalahi! No laila, ua noʻonoʻo mākou i kēia manawa ʻo ia kekahi o nā mea nui loa. Pehea e pale aku ai?

ʻO kā mākou ala e kau inoa i ka clusterTime

ʻO kēia ke ʻano o ka lawe ʻia ʻana i ka memo (ma mua o ka kikokikona polū). Akā ua hoʻomaka pū mākou e hana i kahi pūlima (ka kikokikona uliuli):

HighLoad++, Mikhail Tyulenev (MongoDB): Kūlike kumu: mai ka manaʻo a i ka hana.

Hoʻokumu ʻia ka pūlima e kahi kī i mālama ʻia i loko o ka waihona, i loko o kahi palena paʻa; hana ʻia a hōʻano hou ʻia (ʻaʻole ʻike nā mea hoʻohana i kekahi mea e pili ana iā ia). Hoʻokumu ʻia kahi hash, a kau inoa ʻia kēlā me kēia memo i ka wā i hana ʻia a hōʻoia ʻia ke loaʻa.
E ulu aʻe paha ka nīnau i ka noʻonoʻo o ka poʻe: "Pehea ka nui o kēia mea e hoʻolohi i nā mea?" Ua haʻi aku au iā ʻoe e hana wikiwiki ia, ʻoi aku ka nui o ka nele o kēia hiʻohiʻona.

He aha ka manaʻo o ka hoʻohana ʻana i ke ʻano kūlike i kēia hihia? ʻO kēia ka mea e hōʻike i ka ʻāpana afterClusterTime. Me ka ʻole o kēia, e hala wale nō ia i nā waiwai. ʻO ka haʻalulu, e hoʻomaka ana mai ka mana 3.6, hana mau.

Inā haʻalele mākou i ka hanauna mau o nā pūlima, e hoʻolōʻihi ia i ka ʻōnaehana me ka ʻole o kahi hiʻohiʻona, ʻaʻole i kūpono i kā mākou mau ala a me nā koi. No laila he aha kā mākou i hana ai?

E hana wikiwiki!

He mea maʻalahi loa ia, akā he mea hoihoi ka hoʻopunipuni - e kaʻana like wau, malia paha e hoihoi kekahi.
Loaʻa iā mākou kahi hash e mālama i ka ʻikepili i kau inoa ʻia. Hele nā ​​ʻikepili a pau ma ka hūnā. ʻAʻole kau inoa ka cache i ka manawa kikoʻī, akā ʻo ka Range. Ke hiki mai kekahi waiwai, hana mākou i kahi Range, uhi i nā 16 bits hope loa, a kau inoa mākou i kēia waiwai:

HighLoad++, Mikhail Tyulenev (MongoDB): Kūlike kumu: mai ka manaʻo a i ka hana.

Ma ka loaʻa ʻana o ia pūlima, wikiwiki mākou i ka ʻōnaehana (ma kahi) 65 tausani mau manawa. He hana maikaʻi loa ia: i ka wā i hana ai mākou i nā hoʻokolohua, ua emi maoli ka manawa e 10 tausani mau manawa i ka wā i loaʻa ai iā mākou kahi hoʻopou hou. He mea maopopo i ka wā e hakakā ai lākou, ʻaʻole pono kēia. Akā i ka hapanui o nā hihia kūpono e hana. ʻO ka hui pū ʻana o ka pūlima Range me ka pūlima i hoʻoponopono i ka pilikia palekana.

He aha kā mākou i aʻo ai?

Nā haʻawina a mākou i aʻo ai mai kēia:

  • Pono mākou e heluhelu i nā mea, nā moʻolelo, nā ʻatikala, no ka mea he nui nā mea hoihoi. Ke hana mākou i kekahi hiʻohiʻona (ʻoi loa i kēia manawa, i ka wā i hana ai mākou i nā kālepa, etc.), pono mākou e heluhelu a hoʻomaopopo. Pono ka manawa, akā he mea maikaʻi loa ia no ka mea e maopopo ai ko mākou wahi. ʻAʻole mākou i ʻike i kahi mea hou - lawe wale mākou i nā mea ʻai.

    Ma keʻano laulā, aia kekahi ʻokoʻa o ka noʻonoʻo i ka wā e loaʻa ai kahi hālāwai hoʻonaʻauao (Sigmon, no ka laʻana) - nānā nā mea a pau i nā manaʻo hou. He aha ka mea hou e pili ana i kā mākou algorithm? ʻAʻohe mea hou loa ma ʻaneʻi. Aia ka mea hou i ke ʻano o kā mākou hoʻohui ʻana i nā ala e kū nei. No laila, ʻo ka mea mua ka heluhelu ʻana i nā papa mele, e hoʻomaka me Lampart.

  • I ka hanaʻana, heʻokoʻa loa nā koi. Manaʻo wau ʻaʻole ʻike ka hapa nui o ʻoukou i nā ʻikepili "spherical" i loko o kahi hakahaka abstract, akā me nā mea maʻamau, nā mea maoli i pilikia me ka loaʻa, latency a me ka hoʻomanawanui hewa.
  • ʻO ka mea hope, pono mākou e nānā i nā manaʻo like ʻole a hoʻohui i nā ʻatikala like ʻole i hoʻokahi ala, hui pū. ʻO ka manaʻo e pili ana i ke kau inoa ʻana, no ka laʻana, maʻamau i hele mai i kahi ʻatikala i manaʻo ʻia ka protocol Paxos, no ka poʻe ʻaʻole Byzantine Failor aia i loko o ka protocol ʻae, no nā Byzantine - ma waho o ka protocol authorization... Ma ka laulā, ʻo ia ka mea a mākou. pau i ka hana.

    ʻAʻohe mea hou ma ʻaneʻi! Akā, i ka wā i hui pū ai mākou i nā mea a pau ... Ua like ia me ka'ōleloʻana he mea lapuwale ka papa saladi Olivier, no ka mea, ua hana muaʻia nā hua manu, ka mayonnaise a me nā kukama ... E pili ana i ka moʻolelo like.

HighLoad++, Mikhail Tyulenev (MongoDB): Kūlike kumu: mai ka manaʻo a i ka hana.

E hoʻopau wau i kēia. Mahalo iā ʻoe!

ʻO kāu mau nīnau

Nīnau mai ke anaina (i kapa ʻia ma hope aku ʻo B): – Mahalo iā ʻoe, e Mikhail, no ka hōʻike! He mea hoihoi ke kumuhana e pili ana i ka manawa. Ke hoʻohana nei ʻoe iā Gossiping. Ua ʻōlelo lākou he manawa pono kēlā me kēia kanaka, ʻike nā mea a pau i ko lākou manawa kūloko. E like me kaʻu i hoʻomaopopo ai, loaʻa iā mākou kahi mea hoʻokele - hiki ke nui nā mea kūʻai aku me nā mea hoʻokele, nā mea hoʻolālā nīnau, nā shards pū kekahi ... minuke ma mua, kekahi ma hope? Ma hea mākou e hoʻopau ai?

MT: – Nīnau nui maoli! Makemake au e kamaʻilio e pili ana i nā ʻāpana. Inā maopopo iaʻu ka nīnau, loaʻa iā mākou ke kūlana penei: aia ka shard 1 a me ka shard 2, loaʻa ka heluhelu mai kēia mau ʻāpana ʻelua - he ʻokoʻa ko lākou, ʻaʻole lākou e launa pū me kekahi, no ka mea, ʻokoʻa ka manawa a lākou i ʻike ai. ʻoi aku ka manawa o lākou e noho nei ma oplogs.
E ʻōlelo kākou ua hana ʻo shard 1 i hoʻokahi miliona mau moʻolelo, ʻaʻohe mea i hana ʻo shard 2, a ua hiki ke noi i ʻelua ʻāpana. A ʻo ka mea mua he afterClusterTime ma mua o hoʻokahi miliona. Ma ia kūlana, e like me kaʻu i wehewehe ai, ʻaʻole e pane iki ka shard 2.

IN: - Ua makemake au e ʻike pehea lākou e hoʻonohonoho ai a koho i hoʻokahi manawa kūpono?

MT: - Maʻalahi loa e hoʻonohonoho. ʻO Shard, i ka wā e hiki mai ana iā ClusterTime iā ia a ʻaʻole loaʻa iā ia ka manawa ma ka "Oplog", hoʻomaka ʻaʻole i ʻae ʻia. ʻO ia hoʻi, hāpai ʻo ia i kona manawa me kona mau lima i kēia waiwai. ʻO ia hoʻi, ʻaʻohe hanana e pili ana i kēia noi. Hoʻokumu ʻo ia i kēia hanana a no laila lilo i Causal Consistent.

IN: - He aha inā ma hope o kēia e hele mai kekahi mau hanana ʻē aʻe iā ia i nalowale ma kahi o ka pūnaewele?

MT: - Ua hoʻolālā ʻia ʻo Shard i ke ʻano ʻaʻole lākou e hele hou mai, no ka mea he haku hoʻokahi. Inā ua kākau inoa ʻo ia, a laila ʻaʻole lākou e hele mai, akā hiki mai ma hope. ʻAʻole hiki ke hoʻopaʻa ʻia kekahi mea ma kahi, a laila ʻaʻole ʻo ia e kākau, a laila hiki mai kēia mau hanana - a haki ke ʻano o ka Causal. Inā ʻaʻole ʻo ia e kākau, e hele mai lākou a pau (e kali ʻo ia iā lākou).

HighLoad++, Mikhail Tyulenev (MongoDB): Kūlike kumu: mai ka manaʻo a i ka hana.

IN: - He mau nīnau kaʻu e pili ana i nā pila. Manaʻo ka hoʻohālikelike kumu aia kahi laina kikoʻī o nā hana pono e hana ʻia. He aha ka hopena inā nalowale kekahi o kā mākou pūʻolo? Eia mai ka la 10, 11... ua nalo ka la 12, a ke kali nei na mea a pau i ka hiki ana mai. A make koke ko mākou kaʻa, ʻaʻole hiki iā mākou ke hana i kekahi mea. Aia ka lōʻihi loa o ka pila e hōʻiliʻili ma mua o ka hoʻokō ʻia? He aha ka hemahema e hiki mai ana ke nalowale kekahi moku'āina? Eia kekahi, inā mākou e kākau i lalo aia kekahi moku'āina ma mua, a laila pono mākou e hoʻomaka mai ia? Akā ʻaʻole lākou i hoʻokuke iā ia!

MT: - He nīnau nui hoʻi! He aha kā mākou e hana nei? Loaʻa i ka MongoDB ka manaʻo o ke kākau ʻana o ke kōruma, heluhelu ʻo quorum. I nā hihia hea e nalowale ai kahi leka? Inā ʻaʻole kōrum ka mea kākau a i ʻole ʻaʻole kōrum ka heluhelu ʻana (e pili pū kekahi ʻano ʻōpala).
E pili ana i ka hoʻohālikelike ʻana i ke kumu, ua hoʻokō ʻia kahi hoʻokolohua hoʻokolohua nui, ʻo ia ka hopena i ka wā i kākau ʻole ʻia ai ka heluhelu ʻana a me ka heluhelu ʻana, ʻaʻole i quorum, ʻae ʻia nā hana ʻino i ke kūlike ʻo Causal. Pololei kāu e ʻōlelo nei!

ʻO kā mākou ʻōlelo aʻoaʻo: e hoʻohana ma ka liʻiliʻi loa i ka heluhelu ʻana i ke kōrum i ka wā e hoʻohana ai iā Causal consistent. I kēia hihia, ʻaʻohe mea e nalowale, ʻoiai inā nalowale ka moʻolelo korum ... He kūlana orthogonal kēia: inā ʻaʻole makemake ka mea hoʻohana e nalowale ka ʻikepili, pono ʻo ia e hoʻohana i kahi moʻolelo korum. ʻAʻole e hōʻoiaʻiʻo ʻia ka paʻa ʻana o ke kumu. Hoʻopaʻa ʻia ka lōʻihi e ka hana hou ʻana a me nā mīkini e pili ana me ka hana hou ʻana.

IN: - Ke hana mākou i kahi hana e hana sharding no mākou (ʻaʻole haku, akā kauā, kēlā me kēia), hilinaʻi ia i ka manawa Unix o kāna mīkini ponoʻī a i ka manawa o ka "master"; Hoʻopili ia no ka manawa mua a i ʻole i kēlā me kēia manawa?

MT: - E wehewehe au i kēia manawa. Shard (ʻo ia hoʻi. A hiki i kahi shard ke loaʻa kahi "master" a hiki ke loaʻa nā kope. Akā, kākoʻo mau ka shard i ka hoʻopaʻa ʻana, no ka mea, pono ia e kākoʻo i kekahi domain (he Primary ka shard).

IN: - No laila, hilinaʻi nā mea a pau i ka "master"? Hoʻohana mau ʻia ka manawa haku?

MT: - ʻAe. Hiki iā ʻoe ke ʻōlelo ma ke ʻano: ke kuhi nei ka uaki i ka wā e komo ai i ka "master", i ka "Oplog".

IN: - Loaʻa iā mākou kahi mea kūʻai aku e pili ana a ʻaʻole pono e ʻike i kekahi mea e pili ana i ka manawa?

MT: - ʻAʻole pono ʻoe e ʻike i kekahi mea! Inā mākou e kamaʻilio e pili ana i ka hana ʻana i ka mea kūʻai aku: ke makemake ka mea kūʻai aku e hoʻohana i ke kūlike Causal, pono ʻo ia e wehe i kahi hālāwai. I kēia manawa aia nā mea a pau: nā hana i loko o ka hālāwai, a kiʻi i kahi kuleana ... ʻO kahi hālāwai ka hoʻonohonoho ʻana i nā hanana logical e kū nei me ka mea kūʻai aku.

Inā wehe ʻo ia i kēia kau a ʻōlelo ʻo ia ma laila makemake ʻo ia i ke kūlike ʻo Causal (inā kākoʻo ke kau i ke kūlike ʻo Causal ma ka paʻamau), hana maʻalahi nā mea a pau. Hoʻomanaʻo ka mea hoʻokele i kēia manawa a hoʻonui i ka wā i loaʻa iā ia kahi leka hou. Hoʻomanaʻo ʻo ia i ka pane o ka mea ma mua i hoʻihoʻi mai ka server nāna i hoʻihoʻi i ka ʻikepili. Loaʻa ka noi aʻe afterCluster("ʻoi aku ka manawa ma mua o kēia").

ʻAʻole pono ka mea kūʻai aku e ʻike i kekahi mea! He opaque loa kēia iā ia. Inā hoʻohana nā kānaka i kēia mau hiʻohiʻona, he aha kā lākou e hana ai? ʻO ka mea mua, hiki iā ʻoe ke heluhelu palekana i nā kula kiʻekiʻe: hiki iā ʻoe ke kākau i ke kula kiʻekiʻe a heluhelu mai nā kula kiʻekiʻe i hoʻopaʻa ʻia ma ka ʻāina a e hōʻoia i ka hana. I ka manawa like, hiki ke hoʻololi ʻia nā kau i hoʻopaʻa ʻia ma ke Kula Nui, ʻo ia hoʻi, ʻaʻole hiki iā ʻoe ke hoʻohana i hoʻokahi kau, akā he nui.

IN: - He papa hou o ka ʻepekema Compute - CRDT (Conflict-free Replicated Data Types) ʻano ʻikepili - pili ikaika i ke kumuhana o ka hopena hopena. Ua noʻonoʻo paha ʻoe i ka hoʻohui ʻana i kēia mau ʻano ʻikepili i loko o ka waihona a he aha kāu e ʻōlelo ai no ia?

MT: - He nīnau maikaʻi! Maikaʻi ka CRDT no ke kākau ʻana i nā paio: ma MongoDB, haku hoʻokahi.

IN: – He nīnau kaʻu mai nā devops. I ka honua maoli, aia nā ʻano Jesuitical i ka wā i hiki mai ai ka Byzantine Failure, a hoʻomaka ka poʻe hewa i loko o ka perimeter i pale ʻia i loko o ka protocol, e hoʻouna i nā pūʻulu hana ma kahi ala kūikawā?

HighLoad++, Mikhail Tyulenev (MongoDB): Kūlike kumu: mai ka manaʻo a i ka hana.

MT: - ʻO ka poʻe ʻino i loko o ka perimeter e like me ka lio Trojan! Hiki i nā poʻe ʻino i loko o ka ʻāpana ke hana i nā mea ʻino he nui.

IN: - Ua maopopo ka haʻalele ʻana, ma ka ʻōlelo koʻikoʻi, kahi puka i loko o ke kikowaena kahi e hiki ai iā ʻoe ke hoʻokomo i kahi zoo o nā elepani a hāʻule i ka hui āpau a mau loa ... hewa. Ma ka ʻaoʻao ʻē aʻe, he mea hoihoi kēia: i ke ola maoli, i ka hoʻomaʻamaʻa ʻana, aia nā kūlana i ka wā e kū mai ai nā hoʻouka kūloko?

MT: - No ka mea ʻaʻole hiki iaʻu ke ʻike i nā haki palekana i ke ola maoli, ʻaʻole hiki iaʻu ke ʻōlelo inā hiki mai. Akā inā mākou e kamaʻilio e pili ana i ka hoʻomohala ʻana, manaʻo mākou penei: loaʻa iā mākou kahi perimeter e hāʻawi i nā poʻe hana palekana - he hale kākela kēia, he pā; a i loko o ka perimeter hiki iā ʻoe ke hana i nā mea āu e makemake ai. Ua maopopo aia nā mea hoʻohana me ka hiki ke nānā wale, a aia nā mea hoʻohana me ka hiki ke holoi i ka papa kuhikuhi.

Ma muli o nā kuleana, hiki i nā mea hoʻohana ke hana he ʻiole, a he ʻelepani paha. Ua maopopo e hiki i ka mea hoʻohana me nā kuleana piha ke hana i kekahi mea. Hiki i ka mea hoʻohana me nā kuleana liʻiliʻi ke hōʻemi loa i ka pōʻino. ʻO ka mea nui, ʻaʻole hiki ke uhaʻi i ka ʻōnaehana.

IN: - I loko o ka palena i hoʻomaluʻia, ua ho'āʻo kekahi e hana i nā protocols i manaʻoʻoleʻia no ke kikowaena i mea e hoʻopau loa ai i ke kikowaena, a inā ua lakiʻoe,ʻo ka hui holoʻokoʻa ... Loaʻa iā ia kēlā "maikaʻi"?

MT: "ʻAʻole au i lohe i nā mea like." ʻO ka ʻoiaʻiʻo hiki iā ʻoe ke hōʻeha i kahi kikowaena ma kēia ala ʻaʻole ia he mea huna. ʻAʻole i loko, mai ka protocol, he mea hoʻohana i ʻae ʻia e hiki ke kākau i kahi mea e like me kēia i ka memo ... ʻOiaʻiʻo, ʻaʻole hiki, no ka mea, e hōʻoia mau ʻia. Hiki ke hoʻopau i kēia hōʻoia no nā mea hoʻohana ʻaʻole makemake ia - a laila ʻo ia kā lākou pilikia; ʻO lākou, me ka ʻōlelo koʻikoʻi, ua luku lākou i nā pā iā lākou iho a hiki iā ʻoe ke hoʻokuke i kahi elepani i laila, kahi e hehi ai ... Akā ma ke ʻano nui, hiki iā ʻoe ke ʻaʻahu i ka mea hoʻoponopono, hele mai a huki iā ia!

IN: - Mahalo no ka hōʻike. Sergey (Yandex). Aia kahi mau ma Mong e kaupalena ana i ka helu o nā lālā koho ma ka Replica Set, a ʻo kēia mau ʻo 7 (ʻehiku). No ke aha kēia mea mau? No ke aha ʻaʻole kēia ʻano hoʻohālikelike?

MT: - Loaʻa iā mākou nā ʻāpana Replica me 40 mau nodes. Aia mau ka hapa nui. ʻAʻole maopopo iaʻu kahi mana...

IN: - Ma Replica Set hiki iā ʻoe ke holo i nā lālā koho ʻole, akā aia ka nui o nā lālā koho 7. Pehea e hiki ai iā mākou ke ola i ka pani ʻana i kēia hihia inā hoʻolaha ʻia kā mākou Replica Set ma nā kikowaena data 3? Hiki ke pio maʻalahi kahi kikowaena data, a hāʻule kekahi mīkini.

MT: - Ua ʻoi aku kēia ma mua o ke ʻano o ka hōʻike. He nīnau maʻamau kēia. Hiki paha iaʻu ke haʻi aku iā ʻoe ma hope.

HighLoad++, Mikhail Tyulenev (MongoDB): Kūlike kumu: mai ka manaʻo a i ka hana.

Kekahi mau hoʻolaha 🙂

Mahalo no kou noho pū ʻana me mākou. Makemake ʻoe i kā mākou ʻatikala? Makemake ʻoe e ʻike i nā mea hoihoi hou aʻe? E kākoʻo iā mākou ma ke kau ʻana i kahi kauoha a i ʻole ka ʻōlelo ʻana i nā hoaaloha, cloud VPS no nā mea hoʻomohala mai $4.99, he analogue kū hoʻokahi o nā kikowaena hoʻokomo-level, i hana ʻia e mākou no ʻoe: ʻO ka ʻoiaʻiʻo holoʻokoʻa e pili ana iā VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps mai $ 19 a pehea e kaʻana like ai i kahi kikowaena? (loaʻa me RAID1 a me RAID10, a hiki i 24 cores a hiki i 40GB DDR4).

ʻO Dell R730xd 2 mau manawa maʻalahi ma Equinix Tier IV kikowaena data ma Amsterdam? Eia wale nō 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV mai $199 ma Netherlands! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - mai $99! Heluhelu e pili ana Pehea e kūkulu ai i ka ʻoihana ʻoihana. papa me ka hoʻohana 'ana o Dell R730xd E5-2650 v4 kikowaena waiwai 9000 euros no ka peni?

Source: www.habr.com

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