HighLoad ++, Mikhail Tyulenev (MongoDB): Konsistensi kausal: ti téori ka prakték

Konperénsi HighLoad ++ salajengna bakal dilaksanakeun dina 6 sareng 7 April 2020 di St.
Rinci jeung tiket link. HighLoad ++ Siberia 2019. Aula "Krasnoyarsk". 25. Juni 12:00. Tésis jeung presentasi.

HighLoad ++, Mikhail Tyulenev (MongoDB): Konsistensi kausal: ti téori ka prakték

Éta kajadian yén syarat praktis bertentangan sareng téori, dimana aspék penting pikeun produk komérsial henteu dipertimbangkeun. Obrolan ieu nampilkeun prosés pikeun milih sareng ngagabungkeun pendekatan anu béda pikeun nyiptakeun komponén konsistensi Kausal dumasar kana panalungtikan akademik dumasar kana sarat produk komérsial. Pamirsa bakal diajar ngeunaan pendekatan téoritis anu tos aya kana jam logis, nyukcruk kagumantungan, kaamanan sistem, sinkronisasi jam, sareng naha MongoDB netep dina solusi anu tangtu.

Mikhail Tyulenev (saterusna disebut MT): - Kuring bakal ngobrol ngeunaan konsistensi Kausal - ieu mangrupikeun fitur anu kami damel di MongoDB. Kuring gawe dina grup sistem disebarkeun, urang ngalakukeun eta ngeunaan dua taun ka pengker.

HighLoad ++, Mikhail Tyulenev (MongoDB): Konsistensi kausal: ti téori ka prakték

Dina prosésna, kuring kedah familiarize diri sareng seueur panilitian akademik, sabab fitur ieu parantos ditaliti kalayan saé. Tétéla teu hiji artikel fits kana naon anu diperlukeun dina database produksi alatan sarat pisan husus anu meureun aya dina sagala aplikasi produksi.

Kuring bakal ngobrol ngeunaan kumaha urang, salaku pamakéna Panaliti akademik, nyiapkeun hiji hal ti dinya urang lajeng bisa nampilkeun ka pamaké urang salaku piring siap-dijieun nu merenah tur aman ngagunakeun.

Konsistensi sabab. Hayu urang ngartikeun konsép

Pikeun mimitian, abdi hoyong nyarios sacara umum naon konsistensi Kausal. Aya dua karakter - Leonard jeung Penny (séri TV "The Big Bang Theory"):

HighLoad ++, Mikhail Tyulenev (MongoDB): Konsistensi kausal: ti téori ka prakték

Hayu urang nyebutkeun Penny aya di Éropa sarta Leonard rék ngalungkeun dirina pésta kejutan. Sareng anjeunna henteu tiasa mikir anu langkung saé tibatan ngalungkeun anjeunna tina daptar réréncangan, ngintunkeun ka sadayana réréncangan énggal dina feed: "Hayu urang bagjakeun Penny!" (anjeunna aya di Éropa, nalika anjeunna bobo, anjeunna henteu ningali sadayana sareng henteu tiasa ningali éta, sabab anjeunna henteu aya). Pamustunganana, anjeunna ngahapus pos ieu, ngahapus tina Feed sareng malikkeun aksés supados anjeunna henteu perhatikeun nanaon sareng teu aya skandal.
Ieu sadayana saé sareng saé, tapi hayu urang nganggap yén sistemna disebarkeun sareng hal-hal anu salah. Bisa jadi, contona, kajadian nu pangwatesan aksés Penny urang lumangsung sanggeus pos ieu mucunghul, lamun kajadian teu patali sabab jeung akibat. Sabenerna, ieu mangrupikeun conto nalika konsistensi Kausal diperyogikeun pikeun ngalaksanakeun fungsi bisnis (dina hal ieu).

Nyatana, ieu mangrupikeun sipat anu teu pati penting tina pangkalan data - sakedik pisan jalma ngadukung aranjeunna. Hayu urang ngaléngkah ka model.

Modél konsistensi

Naon kahayang téh modél konsistensi dina database? Ieu mangrupikeun sababaraha jaminan anu masihan sistem anu disebarkeun ngeunaan data naon anu tiasa ditampi ku klien sareng dina urutan naon.

Sacara prinsip, sadaya modél konsistensi turun ka sabaraha sistem anu disebarkeun sami sareng sistem anu dijalankeun, contona, dina hiji titik dina laptop. Sareng ieu kumaha sistem anu sami anu ngajalankeun rébuan "Node" anu disebarkeun geo ka laptop, dimana sadaya pasipatan ieu sacara otomatis dilaksanakeun sacara prinsip.

Ku alatan éta, model konsistensi ngan dilarapkeun ka sistem disebarkeun. Sadaya sistem anu saacanna aya sareng dioperasikeun dina skala vertikal anu sami henteu ngalaman masalah sapertos kitu. Aya hiji panyangga Cache, sarta sagalana salawasna dibaca ti dinya.

Model Kuat

Sabenerna, modél anu pangheulana nyaéta Strong (atanapi garis kamampuan naékna, sakumaha anu sering disebut). Ieu mangrupikeun modél konsistensi anu mastikeun yén unggal parobihan, sakali dikonfirmasi yén éta parantos kajantenan, katingali ku sadaya pangguna sistem.

Ieu nyiptakeun urutan global sadaya kajadian dina database. Ieu mangrupikeun sipat konsistensi anu kuat, sareng umumna mahal pisan. Sanajan kitu, eta dirojong kacida alusna. Ieu ngan pisan mahal tur slow - ngan jarang dipaké. Ieu disebut kamampuan naék.

Aya deui harta anu langkung kuat anu dirojong dina Spanner - disebut Konsistensi Eksternal. Urang bakal ngobrol ngeunaan eta saeutik engké.

Sabab

Anu salajengna nyaéta Kausal, anu leres-leres anu kuring nyarioskeun. Aya sababaraha deui sub-tingkat antara Strong jeung Kausal yén kuring moal ngobrol ngeunaan, tapi aranjeunna sadayana kulub handap ka Kausal. Ieu mangrupikeun modél anu penting sabab éta anu paling kuat tina sadaya modél, konsistensi anu paling kuat dina ayana jaringan atanapi partisi.

Causals sabenerna ngarupakeun kaayaan dimana kajadian disambungkeun ku hubungan sabab-akibat. Sering pisan aranjeunna ditanggap salaku Baca hak anjeun tina sudut pandang klien. Upami klien parantos ningali sababaraha nilai, anjeunna moal tiasa ningali nilai anu baheula. Anjeunna parantos mimiti ningali bacaan awalan. Éta sadayana turun kana hal anu sami.
Causals salaku modél konsistensi mangrupakeun susunan parsial kajadian dina server, nu acara ti sakabeh klien dititénan dina runtuyan sarua. Dina hal ieu, Leonard jeung Penny.

Antukna

Modél katilu nyaéta Konsistensi ahirna. Ieu anu leres-leres ngadukung sistem anu disebarkeun, modél minimal anu leres pisan. Ieu ngandung harti kieu: lamun urang boga sababaraha parobahan dina data, di sawatara titik aranjeunna janten konsisten.

Dina momen sapertos kitu, anjeunna henteu nyarios nanaon, upami henteu, anjeunna bakal janten Konsistensi Eksternal - éta bakal janten carita anu béda. Sanajan kitu, ieu téh modél kawentar, paling umum. Sacara standar, sadaya pangguna sistem anu disebarkeun nganggo Konsistensi Akhirna.

Abdi hoyong masihan sababaraha conto komparatif:

HighLoad ++, Mikhail Tyulenev (MongoDB): Konsistensi kausal: ti téori ka prakték

Naon hartosna panah ieu?

  • Latén. Nalika kakuatan konsistensi ningkat, janten langkung ageung kusabab alesan anu jelas: anjeun kedah ngadamel langkung seueur rékaman, kéngingkeun konfirmasi ti sadaya host sareng titik anu ilubiung dina kluster yén datana parantos aya. Sasuai, Konsistensi ahirna boga jawaban panggancangna, sabab aya, sakumaha aturan, anjeun malah bisa bunuh kana memori jeung ieu bakal, prinsipna mah, cukup.
  • Kasadiaan. Upami urang ngartos ieu salaku kamampuan sistem pikeun ngaréspon ku ayana jaringan ngarecah, partisi, atanapi sababaraha jinis kagagalan, kasabaran sesar ningkat nalika modél konsistensi turun, sabab cekap pikeun urang yén hiji host hirup sareng dina waktos anu sami. waktos ngahasilkeun sababaraha data. Konsistensi ahirna henteu ngajamin nanaon ngeunaan data - éta tiasa nanaon.
  • Anomali. Dina waktos anu sami, tangtosna, jumlah anomali naék. Dina Konsistensi Kuat aranjeunna ampir teu kedah aya, tapi dina Konsistensi Akhirna aranjeunna tiasa nanaon. Patarosan timbul: naha jalma milih Konsistensi ahirna lamun ngandung anomali? Dina jawaban eta model Konsistensi ahirna lumaku sarta aya anomali, contona, dina periode pondok waktu; kasebut nyaéta dimungkinkeun pikeun ngagunakeun wizard pikeun maca jeung leuwih atawa kirang maca data konsisten; Ieu sering mungkin ngagunakeun model konsistensi kuat. Dina prakték ieu jalan, sarta mindeng jumlah anomali diwatesan dina jangka waktu.

Téoréma CAP

Lamun anjeun ningali kecap konsistensi, kasadiaan - naon datang ka pikiran anjeun? Leres - teorema CAP! Ayeuna abdi hoyong dispel mitos ... Ieu lain kuring - éta Martin Kleppmann, anu nulis artikel éndah, buku éndah.

HighLoad ++, Mikhail Tyulenev (MongoDB): Konsistensi kausal: ti téori ka prakték

Teorema CAP mangrupakeun prinsip ngarumuskeun dina 2000s yén Konsistensi, kasadiaan, Partitions: nyandak mana wae dua, jeung anjeun teu bisa milih tilu. Éta mangrupikeun prinsip anu tangtu. Ieu dibuktikeun salaku teorema sababaraha taun saterusna ku Gilbert jeung Lynch. Lajeng ieu mimiti dipaké salaku mantra - sistem mimiti dibagi kana CA, CP, AP jeung saterusna.

Téoréma ieu sabenerna dibuktikeun pikeun kasus di handap ieu ... Firstly, Kasadiaan dianggap teu salaku nilai kontinyu ti enol nepi ka ratusan (0 - sistem "maot", 100 - responds gancang; kami geus dipaké pikeun tempo eta cara nu) , Tapi salaku milik algoritma , nu ngajamin yén pikeun sakabéh executions na eta mulih data.

Henteu aya kecap ngeunaan waktos réspon pisan! Aya hiji algoritma nu mulih data sanggeus 100 taun - hiji algoritma sadia kacida alusna, nu mangrupa bagian tina teorema CAP.
Kadua: teorema ieu dibuktikeun pikeun parobahan dina nilai konci anu sarua, sanajan kanyataan yén parobahan ieu bisa dirobah ukuranana. Ieu ngandung harti yén dina kanyataanana aranjeunna praktis teu dipaké, sabab model béda Konsistensi ahirna, Konsistensi Strong (meureun).

Keur naon ieu sadayana? Sumawona, téoréma CAP dina persis bentuk anu dibuktikeun sacara praktis henteu tiasa dianggo sareng jarang dianggo. Dina bentuk téoritis, kumaha bae ngawatesan sagalana. Tétéla prinsip nu tangtu anu intuitif bener, tapi sacara umum teu acan kabuktian.

Konsistensi kausal mangrupikeun modél anu paling kuat

Anu kajantenan ayeuna nyaéta anjeun tiasa nampi sadaya tilu hal: Konsistensi, Kasadiaan nganggo Partisi. Khususna, Konsistensi Kausal mangrupikeun modél konsistensi anu paling kuat, anu masih tiasa dianggo ku ayana Partitions (ngarecah dina jaringan). Éta pisan sababna naha éta dipikaresep hébat, sarta éta naha urang nyandak up eta.

HighLoad ++, Mikhail Tyulenev (MongoDB): Konsistensi kausal: ti téori ka prakték

Anu mimiti, éta nyederhanakeun padamelan pamekar aplikasi. Khususna, ayana dukungan hébat ti server: nalika sadaya rékaman anu lumangsung di jero hiji klien dijamin sumping dina urutan anu sami dina klien anu sanés. Bréh, éta tahan partisi.

Dapur internal MongoDB

Inget yen geus dahar beurang, urang pindah ka dapur. Kuring bakal nyarioskeun ka anjeun ngeunaan modél sistem, nyaéta, naon MongoDB pikeun anu mimiti ngupingkeun databés sapertos kitu.

HighLoad ++, Mikhail Tyulenev (MongoDB): Konsistensi kausal: ti téori ka prakték

HighLoad ++, Mikhail Tyulenev (MongoDB): Konsistensi kausal: ti téori ka prakték

MongoDB (saterusna disebut "MongoDB") mangrupakeun sistem disebarkeun nu ngarojong skala horizontal, nyaeta, sharding; sarta dina unggal beling eta oge ngarojong redundansi data, nyaeta, réplikasi.

Sharding di MongoDB (sanes database relational) ngalakukeun balancing otomatis, nyaeta, unggal kumpulan dokumén (atawa "tabel" dina watesan data relational) dibagi kana lembar, sarta server otomatis mindahkeun aranjeunna antara shards.

The Query Router, nu distributes requests, pikeun klien sababaraha klien ngaliwatan nu gawéna. Éta parantos terang dimana sareng naon data anu aya sareng ngarahkeun sadaya pamundut ka beling anu leres.

Poin penting séjén: MongoDB mangrupikeun master tunggal. Aya hiji primér - bisa nyandak rékaman nu ngarojong kenop nu ngandung. Anjeun teu bisa ngalakukeun Multi-master nulis.

Urang nyieun release 4.2 - hal metot anyar mucunghul di dinya. Khususna, aranjeunna nyelapkeun Lucene - milarian - nyaéta java executable langsung kana Mongo, sareng didinya janten kamungkinan pikeun ngalaksanakeun pamilarian ngalangkungan Lucene, sami sareng Elastica.

Sareng aranjeunna ngadamel produk énggal - Bagan, éta ogé sayogi dina Atlas (Awan Mongo sorangan). Aranjeunna gaduh Tier Gratis - anjeun tiasa maén sareng éta. Kuring resep pisan Bagan - visualisasi data, intuitif pisan.

Bahan Konsistensi kausal

Kuring diitung ngeunaan 230 artikel nu geus diterbitkeun dina topik ieu - ti Leslie Lampert. Ayeuna ti ingetan kuring bakal nepikeun ka anjeun sababaraha bagian tina bahan ieu.

HighLoad ++, Mikhail Tyulenev (MongoDB): Konsistensi kausal: ti téori ka prakték

Éta sadayana dimimitian ku tulisan Leslie Lampert, anu ditulis dina taun 1970-an. Sakumaha anjeun tiasa tingali, sababaraha panalungtikan ngeunaan topik ieu masih lumangsung. Ayeuna konsistensi Kausal ngalaman minat dina sambungan kalawan ngembangkeun sistem disebarkeun.

larangan

Naon larangan anu aya? Ieu saleresna mangrupikeun salah sahiji titik utama, sabab larangan anu diterapkeun ku sistem produksi béda pisan sareng larangan anu aya dina tulisan akademik. Aranjeunna mindeng rada jieunan.

HighLoad ++, Mikhail Tyulenev (MongoDB): Konsistensi kausal: ti téori ka prakték

  • Anu mimiti, "MongoDB" mangrupikeun master tunggal, sakumaha anu kuring parantos nyarios (ieu nyederhanakeun pisan).
  • Simkuring yakin yén sistem kedah ngarojong ngeunaan 10 sarébu shards. Kami moal tiasa nyandak kaputusan arsitéktur anu sacara eksplisit bakal ngawatesan nilai ieu.
  • Kami gaduh awan, tapi urang nganggap yén jalma masih kedah ngagaduhan kasempetan nalika ngaunduh binér, ngajalankeun éta dina laptopna, sareng sadayana tiasa dianggo.
  • Urang nganggap hal anu jarang Panaliti nganggap: klien éksternal tiasa ngalakukeun naon waé anu dipikahoyong. MongoDB mangrupikeun sumber terbuka. Sasuai, klien tiasa jadi pinter jeung ambek - aranjeunna tiasa hoyong megatkeun sagalana. Kami ngaduga yén Feilor Bizantium tiasa asalna.
  • Pikeun klien éksternal anu aya di luar perimeter, aya watesan penting: lamun fitur ieu ditumpurkeun, lajeng euweuh degradasi kinerja kudu dititénan.
  • titik sejen umumna anti akademik: kasaluyuan versi saméméhna jeung nu bakal datang. Supir lami kedah ngadukung apdet énggal, sareng pangkalan data kedah ngadukung supir lami.

Sacara umum, sadaya ieu maksakeun larangan.

Komponén konsistensi kausal

Ayeuna kuring bakal ngobrol ngeunaan sababaraha komponén. Upami urang nganggap konsistensi Kausal sacara umum, urang tiasa milih blok. Kami milih tina karya anu kagolong kana blok anu tangtu: Pelacakan Depéndensi, milih jam, kumaha jam-jam ieu tiasa disingkronkeun, sareng kumaha urang mastikeun kaamanan - ieu mangrupikeun garis kasar ngeunaan naon anu bakal kuring bahas:

HighLoad ++, Mikhail Tyulenev (MongoDB): Konsistensi kausal: ti téori ka prakték

Pinuh Depéndensi Tracking

Naha éta diperlukeun? Ku kituna lamun data ieu replicated, unggal catetan, unggal robah data ngandung émbaran ngeunaan naon robah eta gumantung kana. Parobahan anu pangheulana sareng naif nyaéta nalika unggal pesen anu ngandung rékaman ngandung inpormasi ngeunaan pesen anu sateuacana:

HighLoad ++, Mikhail Tyulenev (MongoDB): Konsistensi kausal: ti téori ka prakték

Dina conto ieu, jumlah dina kurung Curly nyaeta angka catetan. Kadang-kadang rékaman ieu kalayan nilai malah ditransferkeun sadayana, sakapeung sababaraha versi ditransfer. Intina nyaéta yén unggal parobihan ngandung émbaran ngeunaan anu sateuacana (écés nyandak sadayana ieu dina dirina).

Naha urang mutuskeun teu make pendekatan ieu (tracking pinuh)? Jelas, sabab pendekatan ieu teu praktis: sagala robah kana jaringan sosial gumantung kana sagala parobahan saméméhna kana jaringan sosial, nransper, sebutkeun, Facebook atanapi VKontakte dina unggal update. Tapi, aya seueur panilitian ngeunaan Tracking Dependency Full - ieu mangrupikeun jaringan pra-sosial; pikeun sababaraha kaayaan éta leres-leres jalanna.

Nyukcruk Depéndensi Eksplisit

Anu salajengna langkung kawates. Mindahkeun inpormasi ogé dianggap di dieu, tapi ngan ukur anu jelas gumantung. Naon gumantung kana naon, sakumaha aturan, ditangtukeun ku Aplikasi. Nalika data diréplikasi, pamundut ngan ukur ngabalikeun réspon nalika kagumantungan saméméhna parantos puas, nyaéta, ditampilkeun. Ieu hakekat kumaha konsistensi Kausal jalan.

HighLoad ++, Mikhail Tyulenev (MongoDB): Konsistensi kausal: ti téori ka prakték

Anjeunna ningali yén catetan 5 gumantung kana rékaman 1, 2, 3, 4 - sasuai, anjeunna ngantosan sateuacan klien ngagaduhan aksés kana parobihan anu dilakukeun ku kaputusan aksés Penny, nalika sadaya parobihan sateuacana parantos ngalangkungan pangkalan data.

Ieu ogé teu cocog kami, sabab aya kénéh teuing informasi, sarta eta bakal ngalambatkeun hal handap. Aya pendekatan sejen ...

Jam Lampor

Maranéhna geus kolot pisan. Jam Lamport ngandung harti yén dependensi ieu dilipat kana fungsi skalar, anu disebut Jam Lamport.

Fungsi skalar nyaéta sababaraha angka abstrak. Ieu sering disebut waktos logis. Kalawan unggal acara, counter ieu naek. Counter, anu ayeuna dipikanyaho pikeun prosésna, ngirimkeun unggal pesen. Ieu jelas yén prosés tiasa kaluar tina singkronisasi, aranjeunna tiasa gaduh waktos lengkep béda. Tapi, sistem kumaha waé nyaimbangkeun jam sareng olahtalatah sapertos kitu. Naon anu lumangsung dina hal ieu?

Kuring dibeulah éta beling badag dina dua sangkan eta jelas: Babaturan bisa hirup dina hiji titik, nu ngandung sapotong koleksi, sarta Feed bisa hirup dina titik sejen, nu ngandung sapotong kempelan ieu. Éta jelas kumaha aranjeunna tiasa kaluar tina garis? Feed munggaran bakal nyarios: "Replicated", teras Babaturan. Upami sistem henteu masihan jaminan yén Feed moal ditingalikeun dugi ka kagumantungan Babaturan dina kumpulan Babaturan ogé dikirimkeun, maka urang bakal gaduh persis kaayaan anu kuring nyarios.

Anjeun ningali kumaha waktos counter dina Feed sacara logis naek:

HighLoad ++, Mikhail Tyulenev (MongoDB): Konsistensi kausal: ti téori ka prakték

Janten sipat utama tina Jam Lamport ieu sareng konsistensi Kausal (dijelaskeun ngaliwatan Jam Lamport) nyaéta kieu: upami urang gaduh Kajadian A sareng B, sareng Kajadian B gumantung kana Acara A *, teras éta LogicalTime Acara A kirang ti LogicalTime ti Kajadian B.

* Kadang-kadang aranjeunna ogé nyarios yén A kajantenan sateuacan B, nyaéta, A kajantenan sateuacan B - ieu mangrupikeun hubungan anu tangtu anu sawaréh maréntahkeun sadaya set kajadian anu kajantenan sacara umum.

Sabalikna teu bener. Ieu sabenerna salah sahiji kalemahan utama Jam Lamport - urutan parsial. Aya konsep kajadian simultaneous, nyaeta, kajadian nu teu (A kajadian saméméh B) atawa (A kajadian saméméh B). Hiji conto bakal Leonard sakaligus nambahkeun batur salaku babaturan (malah teu Leonard, tapi Sheldon, contona).
Ieu mangrupikeun harta anu sering dianggo nalika damel sareng jam Lamport: aranjeunna sacara khusus ningali fungsina sareng tina ieu aranjeunna nyimpulkeun yén sigana acara ieu gumantung. Kusabab salah sahiji cara anu bener: lamun LogicalTime A kirang ti LogicalTime B, lajeng B teu bisa lumangsung saméméh A; sarta lamun leuwih, lajeng meureun.

Jam Vektor

Kamekaran logis tina jam Lamport nyaéta Jam Véktor. Aranjeunna béda dina unggal titik anu aya di dieu ngandung jam anu misah, sareng dikirimkeun salaku vektor.
Dina hal ieu, nu katingali yén indéks zeroth sahiji vektor tanggung jawab Feed, sarta indéks mimiti vektor pikeun Babaturan (unggal titik ieu). Sareng ayeuna aranjeunna bakal ningkat: indéks enol "Feed" ningkat nalika nyerat - 1, 2, 3:

HighLoad ++, Mikhail Tyulenev (MongoDB): Konsistensi kausal: ti téori ka prakték

Naha Jam Vektor langkung saé? Kusabab aranjeunna ngidinan Anjeun pikeun angka kaluar nu acara anu simultaneous na nalika aranjeunna lumangsung dina titik béda. Ieu penting pisan pikeun sistem sharding sapertos MongoDB. Najan kitu, urang teu milih ieu, sanajan mangrupa hal éndah, sarta gawéna hébat, sarta eta meureun bakal cocog kami ...

Upami urang gaduh 10 rébu beling, urang moal tiasa nransferkeun 10 rébu komponén, sanaos urang niiskeun atanapi ngadamel anu sanés - beban bakal tetep sababaraha kali langkung alit tibatan volume sadayana vektor ieu. Ku alatan éta, gritting haté jeung huntu urang, urang ditinggalkeun pendekatan ieu sarta pindah ka nu sejen.

Spanner TrueTime. Jam atom

Cenah mah bakal aya carita ngeunaan Spanner. Ieu mangrupikeun hal anu saé, langsung ti abad ka-XNUMX: jam atom, sinkronisasi GPS.

Naon idena? "Spanner" mangrupikeun sistem Google anu nembe janten sayogi pikeun jalma (aranjeunna nambihan SQL ka dinya). Unggal transaksi aya sababaraha cap waktu. Kusabab waktos disingkronkeun *, unggal acara tiasa ditugaskeun waktos khusus - jam atom gaduh waktos ngantosan, saatos waktos anu béda dijamin "kajadian".

HighLoad ++, Mikhail Tyulenev (MongoDB): Konsistensi kausal: ti téori ka prakték

Ku kituna, ku saukur nulis kana database jeung ngantosan sababaraha periode waktu, Serializability acara otomatis dijamin. Aranjeunna gaduh modél Konsistensi anu paling kuat anu tiasa dibayangkeun prinsipna - éta Konsistensi Eksternal.

* Ieu masalah utama kalawan jam Lampart - aranjeunna pernah sinkron dina sistem disebarkeun. Éta tiasa diverge; sanaos sareng NTP, aranjeunna tetep henteu tiasa dianggo kalayan saé. "Spanner" gaduh jam atom sareng singkronisasi, sigana, microseconds.

Naha urang henteu milih? Kami henteu nganggap yén pangguna kami gaduh jam atom anu diwangun. Nalika aranjeunna muncul, diwangun kana unggal laptop, bakal aya sababaraha jinis sinkronisasi GPS super cool - teras enya ... Tapi pikeun ayeuna anu pangsaéna nyaéta Amazon, Base Station - pikeun fanatik ... Jadi kami nganggo jam tangan anu sanés. .

Jam Hibrid

Ieu sabenerna naon ticks di MongoDB nalika mastikeun konsistensi Kausal. Kumaha aranjeunna hibrida? Hibrida mangrupikeun nilai skalar, tapi gaduh dua komponén:

HighLoad ++, Mikhail Tyulenev (MongoDB): Konsistensi kausal: ti téori ka prakték

  • Kahiji nyaeta Unix epoch (sabaraha detik geus kaliwat ti "awal dunya komputer").
  • Anu kadua nyaéta sababaraha paningkatan, ogé int unsigned 32-bit.

Éta sadayana, sabenerna. Aya pendekatan ieu: bagian anu tanggung jawab waktos disingkronkeun sareng jam sepanjang waktos; unggal waktos update lumangsung, bagian ieu nyingkronkeun jeung jam jeung tétéla yén waktu sok leuwih atawa kurang bener, sarta increment ngidinan Anjeun pikeun ngabedakeun antara acara anu lumangsung dina titik anu sarua dina jangka waktu nu.

Naha ieu penting pikeun MongoDB? Kusabab éta ngamungkinkeun anjeun ngadamel sababaraha jinis réstoran cadangan dina waktos anu tangtu, nyaéta, acarana diindeks ku waktos. Ieu penting lamun acara tangtu diperlukeun; Pikeun pangkalan data, kajadian nyaéta parobahan dina pangkalan data anu lumangsung dina interval waktu nu tangtu.

Kuring bakal nyarioskeun ka anjeun alesan anu paling penting ngan ukur pikeun anjeun (punten, tong nyarios ka saha waé)! Kami ngalakukeun ieu kusabab ieu anu diatur, data anu diindeks sapertos dina MongoDB OpLog. OpLog mangrupikeun struktur data anu ngandung leres pisan sadaya parobihan dina pangkalan data: aranjeunna mimiti angkat ka OpLog, teras aranjeunna diterapkeun kana Panyimpenan nyalira upami éta mangrupikeun tanggal atanapi beling.

Ieu alesan utama. Masih, aya ogé sarat praktis pikeun ngembangkeun database, nu hartina kudu basajan - saeutik kode, sakumaha sababaraha hal rusak mungkin nu kudu ditulis ulang tur diuji. Kanyataan yén oplog urang diindeks ku jam hibrida ngabantosan pisan sareng ngamungkinkeun urang milih pilihan anu leres. Éta leres-leres mayar sareng kumaha waé sacara gaib damel dina prototipe anu munggaran. Ieu pisan cool!

Sinkronisasi jam

Aya sababaraha metode sinkronisasi anu dijelaskeun dina literatur ilmiah. Kuring ngawangkong ngeunaan sinkronisasi lamun urang boga dua shards béda. Upami aya hiji set replika, teu aya anu peryogi kanggo sinkronisasi: ieu mangrupikeun "master tunggal"; Kami gaduh OpLog, dimana sadaya parobihan turun - dina hal ieu, sadayana parantos diurutkeun sacara berurutan dina "Oplog" sorangan. Tapi upami urang gaduh dua beling anu béda, sinkronisasi waktos penting di dieu. Ieu dimana jam vektor mantuan leuwih! Tapi urang teu boga aranjeunna.

HighLoad ++, Mikhail Tyulenev (MongoDB): Konsistensi kausal: ti téori ka prakték

Anu kadua cocog - ieu "Heartbeats". Kasebut nyaéta dimungkinkeun pikeun tukeur sababaraha sinyal anu lumangsung unggal unit waktu. Tapi Heartbeats lambat teuing, urang teu bisa nyadiakeun latency ka klien kami.

waktos leres téh, tangtosna, hiji hal éndah. Tapi, deui, ieu meureun mangsa nu bakal datang ... Sanajan geus bisa dipigawé di Atlas, geus aya gancang "Amazon" sinkronisasi waktos. Tapi éta moal sayogi pikeun sadayana.

Gosip nyaéta nalika sadaya pesen kalebet waktos. Ieu kira-kira anu kami anggo. Unggal pesen antara titik, supir, a router titik data, pancen sagalana pikeun MongoDB sababaraha jenis unsur, komponén database nu ngandung hiji jam nu ngalir. Aranjeunna gaduh hartos waktos hibrid dimana-mana, éta dikirimkeun. 64 bit? Hal ieu ngamungkinkeun, ieu mungkin.

Kumaha eta sadayana gawé bareng?

Di dieu Kuring nempo hiji replica set sangkan eta saeutik gampang. Aya primér sarta sekundér. Sekundér ngalakukeun réplikasi sareng henteu salawasna disingkronkeun lengkep sareng Primer.

Hiji sisipan lumangsung kana "Primery" kalawan nilai waktu nu tangtu. sisipan ieu ngaronjatkeun count internal ku 11, lamun ieu maksimum nu. Atanapi éta bakal pariksa nilai jam sareng nyingkronkeun kana jam upami nilai jam langkung ageung. Ieu ngamungkinkeun anjeun pikeun ngatur waktos.

Saatos anjeunna ngadamel rekaman, aya momen penting. Jamna aya dina "MongoDB" sareng naék ngan ukur upami aya tulisan ka "Oplog". Ieu mangrupikeun acara anu ngarobih kaayaan sistem. Dina sakabeh artikel klasik, hiji acara dianggap nalika pesen pencét titik: pesen geus anjog, nu hartina sistem geus robah kaayaan na.

Ieu alatan kanyataan yén salila panalungtikan teu sagemblengna jelas kumaha pesen ieu bakal diinterpretasi. Urang terang pasti yén lamun teu reflected dina "Oplog", éta moal diinterpretasi sagala cara, sarta parobahan dina kaayaan sistem - ngan hiji éntri dina "Oplog". Ieu simplifies sagalana pikeun urang: model simplifies eta, tur ngamungkinkeun urang pikeun ngatur eta dina hiji set replica, sarta loba hal mangpaat séjén.

Nilai nu geus ditulis ka "Oplog" geus balik - urang terang yen "Oplog" geus ngandung nilai ieu, sarta waktu na 12. Ayeuna, sebutkeun, bacaan dimimitian ti titik sejen (Sekundér), sarta transmits afterClusterTime di. pesen. Anjeunna nyarios: "Kuring peryogi sadayana anu kajantenan sahenteuna saatos 12 atanapi salami dua belas" (tingali gambar di luhur).

Ieu nu disebut kausal a konsisten (CAT). Aya konsép sapertos dina téori yén ieu sababaraha nyiksikan waktos, anu konsisten dina dirina. Dina hal ieu, urang bisa disebutkeun yen ieu kaayaan sistem anu dititénan dina waktos 12.

Ayeuna aya nanaon di dieu acan, sabab jenis ieu simulates kaayaan nalika anjeun peryogi Sekundér pikeun ngayakeun réplikasi data ti primér. Anjeunna ngantosan ... Sareng ayeuna data parantos sumping - anjeunna ngabalikeun deui nilai-nilai ieu.

HighLoad ++, Mikhail Tyulenev (MongoDB): Konsistensi kausal: ti téori ka prakték

Éta pisan kumaha éta sadayana jalan. méh-méhan.

Naon hartina "ampir"? Hayu urang nganggap yén aya sababaraha jalma anu geus maca tur ngartos kumaha ieu sadayana jalan. Kuring sadar yén unggal waktos ClusterTime lumangsung, eta ngamutahirkeun jam logis internal, lajeng entri salajengna naek ku hiji. Pungsi ieu nyandak 20 garis. Anggap jalma ieu ngirimkeun nomer 64-bit panggedéna, dikurangan hiji.

Naha "minus one"? Kusabab jam internal bakal digantikeun kana nilai ieu (écés, ieu mangrupikeun kamungkinan panggedéna sareng langkung ageung tibatan waktos ayeuna), teras éntri bakal kajantenan dina "Oplog", sareng jamna bakal ningkat ku unit anu sanés - sareng bakal aya. janten nilai maksimum (aya ngan ukur sadaya unit, teu aya deui tempat anu sanés), ints anu teu saint).

Ieu jelas yén sanggeus ieu sistem jadi kacida inaccessible keur nanaon. Éta ngan ukur tiasa dibongkar sareng dibersihkeun - seueur padamelan manual. kasadiaan pinuh:

HighLoad ++, Mikhail Tyulenev (MongoDB): Konsistensi kausal: ti téori ka prakték

Sumawona, upami ieu ditiru di tempat anu sanés, maka sadayana klaster ngan saukur murag. Situasi anu teu tiasa ditampi ku saha waé anu tiasa ngatur gancang sareng gampang! Ku alatan éta, urang dianggap moment ieu salaku salah sahiji pangpentingna. Kumaha carana nyegah eta?

Cara kami nyaéta ngadaptarkeun clusterTime

Ieu kumaha éta dikirimkeun dina pesen (saméméh téks biru). Tapi kami ogé mimiti ngahasilkeun tanda tangan (téks biru):

HighLoad ++, Mikhail Tyulenev (MongoDB): Konsistensi kausal: ti téori ka prakték

Signature dihasilkeun ku konci anu disimpen di jero database, jero perimeter aman; sorangan dihasilkeun sarta diropéa (pamaké teu ningali nanaon ngeunaan eta). Hash dihasilkeun, sareng unggal pesen ditandatanganan nalika didamel sareng disahkeun nalika ditampi.
Patarosan sigana muncul dina pikiran jalma: "Sabaraha hal ieu ngalambatkeun?" Kuring bébéja yén éta kedah dianggo gancang, khususna dina henteuna fitur ieu.

Naon hartosna ngagunakeun konsistensi Kausal dina hal ieu? Ieu pikeun nembongkeun parameter afterClusterTime. Tanpa ieu, éta ngan saukur bakal lulus nilai. Gossiping, mimitian ti versi 3.6, salawasna jalan.

Upami urang ngantunkeun generasi tandatangan anu tetep, éta bakal ngalambatkeun sistem sanaos henteuna fitur, anu henteu nyumponan pendekatan sareng syarat urang. Janten naon anu urang lakukeun?

Laksanakeun gancang!

Ieu hal anu cukup basajan, tapi trik nu metot - Kuring bakal babagi deui, meureun batur bakal kabetot.
Kami gaduh hash anu nyimpen data anu ditandatanganan. Sadaya data ngalangkungan cache. Cache teu asup waktu husus, tapi Range. Lamun sababaraha nilai datang, urang ngahasilkeun Range a, mask kaluar panungtungan 16 bit, sarta kami asup nilai ieu:

HighLoad ++, Mikhail Tyulenev (MongoDB): Konsistensi kausal: ti téori ka prakték

Ku nampi tanda tangan sapertos kitu, urang nyepetkeun sistem (relatif) 65 rébu kali. Gawéna saé: nalika urang ngalaksanakeun ékspérimén, waktosna leres-leres turun ku 10 rébu kali nalika urang ngagaduhan pembaruan anu berurutan. Ieu jelas yén basa aranjeunna keur aya di odds, ieu teu jalan. Tapi dina kalolobaan kasus praktis gawéna. Kombinasi tanda tangan Range sareng tandatangan ngarengsekeun masalah kaamanan.

Naon anu urang diajar?

Palajaran anu urang diajar tina ieu:

  • Urang kudu maca bahan, carita, artikel, sabab urang boga loba hal metot. Nalika urang ngerjakeun sababaraha fitur (utamana ayeuna, nalika urang ngalakukeun transaksi, jsb), urang kedah maca sareng ngartos. Butuh waktu, tapi sabenerna mangpaat pisan sabab ngajadikeun eta jelas dimana urang aya. Urang sigana teu datang nepi ka nanaon anyar - urang ngan nyokot bahan.

    Sacara umum, aya béda nu tangtu dina pamikiran lamun konferensi akademik (contona, Sigmon) - dulur museurkeun kana gagasan anyar. Naon anu anyar ngeunaan algoritma kami? Aya nanaon utamana anyar di dieu. Kabaruan rada aya dina cara urang ngahijikeun pendekatan anu aya. Ku alatan éta, hal kahiji nyaéta maca klasik, dimimitian ku Lampart.

  • Dina produksi, sarat sagemblengna béda. Kuring yakin yén loba anjeun teu Nyanghareupan database "bulat" dina vakum abstrak, tapi kalawan normal, hal nyata nu gaduh masalah sareng kasadiaan, latency jeung kasabaran sesar.
  • Anu terakhir nyaéta urang kedah ningali ideu anu béda sareng ngagabungkeun sababaraha tulisan anu béda-béda kana hiji pendekatan, babarengan. Gagasan ngeunaan nandatanganan, contona, umumna asalna tina hiji artikel anu dianggap protokol Paxos, nu keur non-Bizantium Failors aya di jero protokol otorisasina, pikeun Bizantium - di luar protokol otorisasina ... Sacara umum, ieu téh kahayang urang. réngsé ngalakonan.

    Henteu aya anu énggal di dieu! Tapi pas urang nyampur sadayana ... Ieu sarua jeung nyebutkeun yén resep salad Olivier téh omong kosong, sabab endog, mayonnaise jeung cucumbers geus nimukeun ... Ieu ngeunaan carita sarua.

HighLoad ++, Mikhail Tyulenev (MongoDB): Konsistensi kausal: ti téori ka prakték

Abdi badé réngsé ieu. Hatur nuhun!

patarosan

Patarosan ti panongton (satuluyna disebut B): – Hatur nuhun, Mikhail, pikeun laporan! Topik ngeunaan waktu metot. Anjeun nganggo Gossiping. Aranjeunna nyarios yén sadayana gaduh waktosna masing-masing, sadayana terang waktos lokalna. Salaku I ngartos eta, urang boga supir - aya bisa jadi loba klien kalawan drivers, query-planners teuing, shards teuing ... Jeung naon sistem turun ka lamun urang ujug-ujug boga discrepancy a: batur mutuskeun yén éta téh pikeun a menit payun, batur hiji menit balik? Dimana urang bakal mungkas?

MT: – Patarosan hébat mang! Kuring ngan hayang ngobrol ngeunaan beling. Upami kuring ngartos patarosan anu leres, urang gaduh kaayaan di handap ieu: aya beling 1 sareng beling 2, bacaan lumangsung tina dua beling ieu - aranjeunna gaduh bédana, aranjeunna henteu saling berinteraksi, sabab waktos anu aranjeunna terang béda, utamana waktu nu maranéhna aya di oplogs.
Hayu urang nyebutkeun beling 1 dijieun sajuta rékaman, beling 2 teu nanaon pisan, sarta pamundut datang ka dua beling. Sareng anu kahiji gaduh afterClusterTime langkung ti sajuta. Dina kaayaan kitu, sakumaha kuring ngajelaskeun, beling 2 moal pernah ngabales pisan.

Dina: – Kuring hayang nyaho kumaha maranéhanana nyingkronkeun jeung milih hiji waktu logis?

MT: - Gampang pisan pikeun nyingkronkeun. Shard, nalika afterClusterTime datang ka anjeunna sarta anjeunna teu manggihan waktu dina "Oplog", initiates euweuh disatujuan. Nyaéta, anjeunna raises waktos na kalawan leungeun-Na kana nilai ieu. Ieu ngandung harti yén teu boga acara cocog pamundut ieu. Anjeunna nyiptakeun acara ieu sacara artifisial sahingga janten Konsisten Kausal.

Dina: – Kumaha lamun sanggeus ieu sababaraha kajadian séjén datang ka manéhna nu leungit wae dina jaringan?

MT: - Shard dirancang dina cara sapertos anu aranjeunna moal datang deui, saprak éta master tunggal. Upami anjeunna parantos ngadaptarkeun, maka aranjeunna moal sumping, tapi bakal sumping engké. Teu tiasa kajadian yén aya anu nyangkut dimana waé, teras anjeunna henteu nyerat, teras acara ieu sumping - sareng konsistensi Kausal rusak. Nalika anjeunna henteu nyerat, aranjeunna sadayana kedah sumping salajengna (anjeunna bakal ngantosan aranjeunna).

HighLoad ++, Mikhail Tyulenev (MongoDB): Konsistensi kausal: ti téori ka prakték

Dina: – Kuring boga sababaraha patarosan ngeunaan antrian. Konsistensi kausal nganggap yén aya antrian husus tina lampah anu kudu dipigawé. Naon anu lumangsung lamun salah sahiji bungkusan urang leungit? Di dieu datang ka 10, 11 ... 12 geus ngiles, jeung dulur sejenna ngantosan eta jadi kanyataan. Sarta ujug-ujug mobil urang maot, urang teu bisa ngalakukeun nanaon. Aya panjang maksimum antrian nu accumulates saméméh keur dieksekusi? Naon kagagalan fatal anu lumangsung nalika hiji nagara leungit? Sumawona, upami urang nyerat yén aya sababaraha kaayaan sateuacana, maka urang kedah kumaha waé mimitian ti éta? Tapi aranjeunna henteu nyorong anjeunna jauh!

MT: - Oge patarosan hébat! Keur naon urang? MongoDB ngagaduhan konsép nyerat kuorum, maca kuorum. Dina kasus naon pesen tiasa leungit? Nalika tulisan henteu kuorum atanapi nalika bacaan henteu kuorum (sababaraha jinis sampah ogé tiasa nempel).
Ngeunaan konsistensi Kausal, tés ékspérimén ageung dilaksanakeun, hasilna dina kasus nalika nyerat sareng maca henteu quorum, pelanggaran konsistensi Kausal lumangsung. Persis naon anu anjeun carioskeun!

Saran kami: nganggo sahenteuna bacaan kuorum nalika nganggo konsistensi Kausal. Dina hal ieu, euweuh bakal leungit, sanajan catetan kuorum leungit ... Ieu kaayaan ortogonal: lamun pamaké teu hayang data leungit, anjeunna perlu ngagunakeun catetan kuorum. Konsistensi sabab teu ngajamin durability. Daya tahan dijamin ku réplikasi sareng mesin anu aya hubunganana sareng réplikasi.

Dina: - Nalika urang nyieun hiji conto nu ngalakukeun sharding pikeun urang (sanes master, tapi budak, masing-masing), eta gumantung kana waktu Unix mesin sorangan atawa dina waktu "master"; Naha nyingkronkeun pikeun kahiji kalina atanapi périodik?

MT: – Kuring gé netelakeun ayeuna. Shard (nyaéta partisi horizontal) - sok aya Primer di dinya. Sareng beling tiasa gaduh "master" sareng tiasa aya réplika. Tapi beling salawasna ngarojong rékaman, sabab kudu ngarojong sababaraha domain (beling nu boga primér).

Dina: - Jadi sagalana gumantung murni dina "master"? Naha waktos master sok dianggo?

MT: - Sumuhun. Anjeun tiasa nyarios sacara figuratif: jamna diticking nalika éntri kana "master", kana "Oplog" lumangsung.

Dina: – Urang boga klien nu nyambung jeung teu kudu nyaho nanaon tentang waktu?

MT: - Anjeun teu kedah terang nanaon pisan! Lamun urang ngobrol ngeunaan kumaha gawéna on klien nu: lamun klien hayang ngagunakeun konsistensi Kausal, anjeunna perlu muka sési. Ayeuna sagalana geus aya: transaksi dina rintakan, sarta meunangkeun hak ... A sési mangrupa susunan acara logis lumangsung kalawan klien nu.

Upami anjeunna muka sési ieu sareng nyarios yén anjeunna hoyong konsistensi Kausal (upami sési ngadukung konsistensi Kausal sacara standar), sadayana jalan otomatis. Supir émut waktos ieu sareng ningkatkeun nalika nampi pesen énggal. Eta emut naon respon saméméhna balik ti server nu balik data. Paménta salajengna bakal ngandung afterCluster ("waktos langkung ageung tibatan ieu").

Klién henteu peryogi terang naon waé! Ieu sagemblengna opak pikeun anjeunna. Lamun jalma ngagunakeun fitur ieu, naon bisa maranéhna ngalakukeun? Kahiji, anjeun aman bisa maca sékundér: Anjeun bisa nulis ka primér sarta maca ti sékundér réplika géografis tur pastikeun yén éta jalan. Dina waktos anu sami, sési anu dirékam dina Primer malah tiasa dialihkeun ka Secondary, nyaéta anjeun henteu tiasa nganggo hiji sési, tapi sababaraha.

Dina: - Lapisan anyar Élmu Komputasi - tipe data CRDT (Tipe Data Réplikasi Bébas Konflik) - pakuat patalina sareng topik konsistensi ahirna. Naha anjeun nganggap ngahijikeun jinis data ieu kana pangkalan data sareng naon anu anjeun tiasa nyarios ngeunaan éta?

MT: - Patarosan alus! CRDT asup akal pikeun konflik nulis: dina MongoDB, master tunggal.

Dina: – Abdi gaduh patarosan ti devops. Di dunya nyata, aya kaayaan Jesuitical sapertos nalika Kagagalan Bizantium lumangsung, sarta jalma jahat di jero perimeter ditangtayungan ngawitan nyodok kana protokol, ngirim bungkusan karajinan dina cara husus?

HighLoad ++, Mikhail Tyulenev (MongoDB): Konsistensi kausal: ti téori ka prakték

MT: - Jalma jahat di jero perimeter sapertos kuda Trojan! Jalma jahat di jero perimeter tiasa ngalakukeun seueur hal anu goréng.

Dina: – Ieu jelas yén ninggalkeun, kasarna diomongkeun, liang dina server ngaliwatan nu bisa nyorong hiji kebon binatang gajah jeung ambruk sakabéh klaster salawasna... Butuh waktu pikeun recovery manual... Ieu, mun nempatkeun eta mildly, nyaeta salah. Di sisi anu sanés, ieu pikaresepeun: dina kahirupan nyata, dina prakna, aya kaayaan nalika serangan internal anu sami sacara alami lumangsung?

MT: - Kusabab kuring jarang sapatemon breaches kaamanan dina kahirupan nyata, abdi teu bisa nyebutkeun lamun éta kajadian. Tapi lamun urang ngobrol ngeunaan filosofi ngembangkeun, urang pikir kawas kieu: urang boga perimeter nu nyadiakeun guys anu ngalakukeun kaamanan - ieu puri, témbok a; sareng di jero perimeter anjeun tiasa ngalakukeun naon waé anu anjeun pikahoyong. Ieu jelas yén aya pamaké kalawan kamampuhan pikeun ngan nempo, sarta aya pamaké kalawan kamampuhan pikeun mupus diréktori.

Gumantung kana hakna, karusakan anu tiasa dilakukeun ku pangguna tiasa janten beurit, atanapi tiasa janten gajah. Ieu jelas yén pamaké kalawan hak pinuh bisa ngalakukeun nanaon pisan. Pamaké kalawan hak kawates bisa ngabalukarkeun nyata kirang ngarugikeun. Khususna, éta henteu tiasa ngarobih sistem.

Dina: - Dina perimeter ditangtayungan, batur diusahakeun nyieun protokol kaduga pikeun server dina urutan pikeun sakabéhna ngancurkeun server, sarta lamun geus untung, sakabéh klaster ... Dupi eta kantos meunang nu "alus"?

MT: "Kuring henteu kantos nguping perkawis sapertos kitu." Kanyataan yén anjeun tiasa ngadat server ku cara ieu sanés rusiah. Gagal di jero, janten ti protokol, janten pangguna otorisasi anu tiasa nyerat sapertos kieu dina pesen ... Kanyataanna, mustahil, sabab éta bakal tetep diverifikasi. Kasebut nyaéta dimungkinkeun pikeun nganonaktipkeun auténtikasi ieu pikeun pangguna anu henteu hoyong éta - teras éta masalahna; aranjeunna, kasarna diomongkeun, ngancurkeun tembok sorangan jeung anjeun bisa nyorong gajah di dinya, nu bakal trample ... Tapi sacara umum, anjeun tiasa pakéan nepi sakumaha repairman a, datangna sarta tarik kaluar!

Dina: – Hatur nuhun kana laporan. Sergey (Yandex). Aya konstanta dina Mong anu ngawatesan jumlah anggota voting dina Set Replica, sarta konstanta ieu 7 (tujuh). Naha ieu konstan? Naha ieu sanés sababaraha jinis parameter?

MT: - Kami ngagaduhan sét réplika sareng 40 titik. Sok aya mayoritas. Abdi henteu terang versi mana...

Dina: - Dina Replica Set anjeun tiasa ngajalankeun anggota non-voting, tapi aya maksimal anggota voting 7. Kumaha urang tiasa salamet shutdown dina hal ieu upami Replika Set kami sumebar ka 3 pusat data? Hiji puseur data bisa kalayan gampang mareuman, sarta mesin sejen bisa ragrag kaluar.

MT: – Ieu geus saeutik saluareun lingkup laporan. Ieu patarosan umum. Meureun kuring bisa ngabejaan Anjeun tentang eta engké.

HighLoad ++, Mikhail Tyulenev (MongoDB): Konsistensi kausal: ti téori ka prakték

Sababaraha iklan 🙂

Hatur nuhun pikeun tetep sareng kami. Naha anjeun resep artikel kami? Hoyong ningali eusi anu langkung narik? Dukung kami ku cara nempatkeun pesenan atanapi nyarankeun ka babaturan, cloud VPS pikeun pamekar ti $4.99, analog unik tina server tingkat éntri, anu diciptakeun ku kami pikeun anjeun: Sakabeh bebeneran ngeunaan VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps ti $ 19 atanapi kumaha babagi server a? (sadia kalawan RAID1 na RAID10, nepi ka 24 cores sarta nepi ka 40GB DDR4).

Dell R730xd 2 kali langkung mirah dina puseur data Equinix nagara golongan IV di Amsterdam? Ngan di dieu 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV ti $199 di Walanda! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - ti $99! Baca ngeunaan Kumaha ngawangun Infrastruktur Corp. kelas kalawan pamakéan Dell R730xd E5-2650 v4 server patut 9000 euro pikeun Penny a?

sumber: www.habr.com

Tambahkeun komentar