HighLoad ++, Mikhail Tyulenev (MongoDB): Ang hinungdan nga pagkamakanunayon: gikan sa teorya hangtod sa praktis

Ang sunod nga HighLoad++ nga komperensya ipahigayon sa Abril 6 ug 7, 2020 sa St. Petersburg.
Mga detalye ug mga tiket link. HighLoad++ Siberia 2019. Hall "Krasnoyarsk". Hunyo 25, 12:00. Theses ug pagpasundayag.

HighLoad ++, Mikhail Tyulenev (MongoDB): Ang hinungdan nga pagkamakanunayon: gikan sa teorya hangtod sa praktis

Nahitabo nga ang praktikal nga mga kinahanglanon sukwahi sa teorya, diin ang mga aspeto nga hinungdanon alang sa usa ka komersyal nga produkto wala gikonsiderar. Kini nga pakigpulong nagpresentar sa usa ka proseso alang sa pagpili ug paghiusa sa lain-laing mga pamaagi sa paghimo sa Causal pagkamakanunayon nga mga sangkap base sa akademikong panukiduki base sa mga kinahanglanon sa usa ka komersyal nga produkto. Ang mga tigpaminaw makakat-on mahitungod sa kasamtangan nga teoretikal nga mga pamaagi sa lohikal nga mga orasan, pagsubay sa dependency, seguridad sa sistema, pag-synchronize sa orasan, ug nganong ang MongoDB nahusay sa pipila ka mga solusyon.

Mikhail Tyulenev (gitawag nga MT): – Maghisgot ko bahin sa Causal consistency - kini usa ka bahin nga among gitrabaho sa MongoDB. Nagtrabaho ko sa usa ka grupo sa mga gipang-apod-apod nga sistema, gibuhat namo kini mga duha ka tuig na ang milabay.

HighLoad ++, Mikhail Tyulenev (MongoDB): Ang hinungdan nga pagkamakanunayon: gikan sa teorya hangtod sa praktis

Sa proseso, kinahanglan nako nga pamilyar ang akong kaugalingon sa daghang panukiduki sa akademiko, tungod kay kini nga bahin gitun-an pag-ayo. Nahibal-an nga wala’y usa ka artikulo nga nahiangay sa kung unsa ang gikinahanglan sa usa ka database sa produksiyon tungod sa piho nga mga kinahanglanon nga lagmit naa sa bisan unsang aplikasyon sa produksiyon.

Akong hisgutan kung giunsa namo, isip mga konsumidor sa academic Research, nag-andam og usa ka butang gikan niini nga mahimo namong ipresentar sa among mga tiggamit isip usa ka andam nga pinggan nga sayon ​​​​ug luwas nga gamiton.

Ang hinungdan nga pagkamakanunayon. Atong ipasabot ang mga konsepto

Sa pagsugod, gusto nakong isulti sa kinatibuk-ang termino kung unsa ang Causal consistency. Adunay duha ka mga karakter - Leonard ug Penny (serye sa TV "The Big Bang Theory"):

HighLoad ++, Mikhail Tyulenev (MongoDB): Ang hinungdan nga pagkamakanunayon: gikan sa teorya hangtod sa praktis

Ingnon ta nga si Penny naa sa Europe ug gusto ni Leonard nga maghimo siya og usa ka surprise party. Ug wala siyay mahunahunaan nga mas maayo pa kay sa paglabay kaniya sa iyang listahan sa higala, pagpadala sa tanan niyang mga higala og update sa feed: "Atong lipayon si Penny!" (anaa siya sa Europe, samtang siya natulog, wala niya makita kining tanan ug dili niya makita, tungod kay wala siya didto). Sa katapusan, iyang gitangtang kini nga post, gipapas kini gikan sa Feed ug gipahiuli ang pag-access aron dili siya makamatikod ug wala’y eskandalo.
Maayo ug maayo ang tanan, apan atong hunahunaon nga ang sistema giapod-apod ug ang mga butang nasayup gamay. Mahimo, pananglitan, mahitabo nga ang pagdili sa pag-access ni Penny nahitabo pagkahuman sa kini nga post nga nagpakita, kung ang mga panghitabo wala’y kalabutan sa hinungdan ug epekto. Sa tinuud, kini usa ka pananglitan kung kanus-a ang hinungdan nga pagkamakanunayon gikinahanglan aron mahimo ang usa ka function sa negosyo (sa kini nga kaso).

Sa tinuud, kini mga dili hinungdanon nga mga kabtangan sa database - gamay ra nga mga tawo ang nagsuporta niini. Mopadayon kita sa mga modelo.

Mga modelo sa pagkamakanunayon

Unsa man gyud ang modelo sa pagkamakanunayon sa mga database? Kini ang pipila sa mga garantiya nga gihatag sa usa ka giapod-apod nga sistema bahin sa kung unsang datos ang madawat sa kliyente ug sa unsang pagkasunod-sunod.

Sa prinsipyo, ang tanan nga mga modelo sa pagkamakanunayon moabut kung unsa ka parehas ang usa ka giapod-apod nga sistema sa usa ka sistema nga nagdagan, pananglitan, sa usa ka node sa usa ka laptop. Ug ingon niini ang pagkaparehas sa usa ka sistema nga nagdagan sa libu-libo nga mga geo-apod-apod nga "Nodes" sa usa ka laptop, diin ang tanan nga kini nga mga kabtangan awtomatiko nga gihimo sa prinsipyo.

Busa, ang mga modelo sa pagkamakanunayon gigamit lamang sa mga gipang-apod-apod nga mga sistema. Ang tanan nga mga sistema nga kaniadto naglungtad ug naglihok sa parehas nga bertikal nga scaling wala makasinati sa ingon nga mga problema. Adunay usa ka Buffer Cache, ug ang tanan kanunay nga gibasa gikan niini.

Model nga Kusog

Sa tinuud, ang labing una nga modelo mao ang Kusog (o ang linya sa abilidad sa pagtaas, ingon sa kanunay nga pagtawag niini). Kini usa ka modelo sa pagkamakanunayon nga nagsiguro nga ang matag pagbag-o, sa higayon nga makumpirma nga kini nahitabo, makita sa tanan nga mga tiggamit sa sistema.

Naghimo kini usa ka global nga han-ay sa tanan nga mga panghitabo sa database. Kini usa ka lig-on nga pagkamakanunayon nga kabtangan, ug kini sa kasagaran mahal kaayo. Bisan pa, kini gisuportahan pag-ayo. Kini mahal kaayo ug hinay - kini panagsa ra gamiton. Gitawag kini nga abilidad sa pagtaas.

Adunay lain, mas lig-on nga kabtangan nga gisuportahan sa Spanner - gitawag nga External Consistency. Atong hisgotan kini sa ulahi.

Hinungdan

Ang sunod mao ang Causal, nga mao gyud ang akong gihisgutan. Adunay daghang mga sub-level tali sa Strong ug Causal nga dili nako hisgutan, apan silang tanan nagbukal hangtod sa Causal. Kini usa ka importante nga modelo tungod kay kini ang pinakalig-on sa tanan nga mga modelo, ang pinakalig-on nga pagkamakanunayon sa presensya sa usa ka network o mga partisyon.

Ang mga hinungdan sa tinuud usa ka sitwasyon diin ang mga panghitabo konektado sa usa ka hinungdan-ug-epekto nga relasyon. Kasagaran sila gitan-aw nga Basaha ang imong mga katungod gikan sa punto sa panglantaw sa kliyente. Kung ang kliyente nakaobserbar sa pipila ka mga kantidad, dili niya makita ang mga kantidad nga kaniadto. Nagsugod na siya sa pagtan-aw sa mga pagbasa sa prefix. Kini tanan moabut sa parehas nga butang.
Ang mga hinungdan ingon usa ka modelo sa pagkamakanunayon usa ka partial nga pag-order sa mga panghitabo sa server, diin ang mga panghitabo gikan sa tanan nga mga kliyente naobserbahan sa parehas nga pagkasunod-sunod. Niini nga kaso, si Leonard ug Penny.

Kataposan

Ang ikatulo nga modelo mao ang Katapusan nga Pagkamauyon. Mao kini ang hingpit nga gisuportahan sa tanan nga gipang-apod-apod nga mga sistema, ang gamay nga modelo nga makatarunganon sa tanan. Kini nagpasabot sa mosunod: sa diha nga kita adunay pipila ka mga kausaban sa data, sa usa ka punto sila mahimong makanunayon.

Sa ingon nga higayon wala siya mosulti bisan unsa, kung dili siya mahimong External Consistency - kini usa ka lahi nga istorya. Bisan pa niana, kini usa ka popular kaayo nga modelo, ang labing komon. Pinaagi sa default, ang tanan nga tiggamit sa gipang-apod-apod nga mga sistema naggamit sa Katapusan nga Pagkamauyon.

Gusto kong maghatag pipila ka mga pagtandi nga mga pananglitan:

HighLoad ++, Mikhail Tyulenev (MongoDB): Ang hinungdan nga pagkamakanunayon: gikan sa teorya hangtod sa praktis

Unsa ang gipasabut niini nga mga pana?

  • Latency Samtang nagkadako ang kalig-on sa pagkamakanunayon, kini nahimong mas dako alang sa klaro nga mga rason: kinahanglan ka nga maghimo og dugang nga mga rekord, pagkuha og kumpirmasyon gikan sa tanang mga host ug mga node nga miapil sa cluster nga ang data anaa na. Sumala niana, ang Katapusan nga Pagkamauyonan adunay labing paspas nga tubag, tungod kay didto, ingon nga usa ka lagda, mahimo nimo nga itugyan kini sa panumduman ug kini, sa prinsipyo, igo na.
  • Pagkaon. Kung atong masabtan kini ingon nga abilidad sa sistema sa pagtubag sa presensya sa network breaks, partitions, o usa ka matang sa kapakyasan, fault tolerance nagdugang samtang ang consistency model mikunhod, tungod kay kini igo na alang kanato nga ang usa ka host nagpuyo ug sa samang ang oras nagpatunghag pipila ka datos. Ang Katapusan nga pagkamakanunayon dili garantiya sa bisan unsa bahin sa datos - kini mahimong bisan unsa.
  • Mga anomaliya. Sa samang higayon, siyempre, ang gidaghanon sa mga anomaliya nagdugang. Sa Strong Consistency halos dili na sila kinahanglan nga maglungtad, apan sa Eventual Consistency mahimo silang bisan unsa. Mitungha ang pangutana: nganong gipili man sa mga tawo ang Eventual Consistency kon kini adunay mga anomaliya? Ang tubag mao nga ang mga modelo sa Eventual Consistency magamit ug adunay mga anomaliya, pananglitan, sa mubo nga panahon; posible nga gamiton ang wizard sa pagbasa ug labaw pa o dili kaayo pagbasa sa makanunayon nga datos; Kanunay nga posible nga gamiton ang lig-on nga mga modelo sa pagkamakanunayon. Sa praktis kini molihok, ug kasagaran ang gidaghanon sa mga anomaliya limitado sa panahon.

Teorama sa CAP

Kung makita nimo ang mga pulong nga pagkamakanunayon, pagkaanaa - unsa ang naa sa imong hunahuna? Husto kana - CAP theorem! Karon gusto nako nga wagtangon ang tumotumo ... Dili ako - kini si Martin Kleppmann, kinsa nagsulat sa usa ka talagsaon nga artikulo, usa ka talagsaon nga libro.

HighLoad ++, Mikhail Tyulenev (MongoDB): Ang hinungdan nga pagkamakanunayon: gikan sa teorya hangtod sa praktis

Ang CAP theorem usa ka prinsipyo nga giporma sa 2000s nga Consistency, Availability, Partitions: kuhaa ang bisan unsa nga duha, ug dili ka makapili og tulo. Kini usa ka piho nga prinsipyo. Gipamatud-an kini isip teorama pipila ka tuig ang milabay ni Gilbert ug Lynch. Unya nagsugod kini nga gigamit ingon usa ka mantra - ang mga sistema nagsugod nga gibahin sa CA, CP, AP ug uban pa.

Kini nga theorem sa tinuod napamatud-an alang sa mosunod nga mga kaso... Una, Availability giisip nga dili ingon nga usa ka padayon nga bili gikan sa zero ngadto sa gatusan (0 - ang sistema mao ang "patay", 100 - motubag sa madali; kita gigamit sa pagkonsiderar niini nga paagi) , apan isip usa ka kabtangan sa algorithm , nga naggarantiya nga alang sa tanan nga mga pagpatay niini kini nagbalik sa datos.

Wala’y pulong bahin sa oras sa pagtubag! Adunay usa ka algorithm nga nagbalik sa datos pagkahuman sa 100 ka tuig - usa ka talagsaon nga magamit nga algorithm, nga bahin sa teorama sa CAP.
Ikaduha: ang teorama napamatud-an alang sa mga pagbag-o sa mga kantidad sa parehas nga yawe, bisan pa sa kamatuoran nga kini nga mga pagbag-o mabag-o. Kini nagpasabot nga sa pagkatinuod sila halos wala gigamit, tungod kay ang mga modelo managlahi sa Katapusan nga Pagkakonsistent, Kusog nga Pagkakonsistent (tingali).

Para sa unsa kining tanan? Dugang pa, ang CAP theorem sa eksakto nga porma diin kini napamatud-an halos dili magamit ug panagsa ra nga gigamit. Sa teoretikal nga porma, kini sa usa ka paagi naglimite sa tanan. Kini nahimo nga usa ka piho nga prinsipyo nga intuitively nga husto, apan sa kinatibuk-an wala pa napamatud-an.

Ang pagkamakanunayon sa hinungdan mao ang pinakalig-on nga modelo

Ang nahitabo karon mao nga makuha nimo ang tanan nga tulo ka mga butang: Pagkakonsistent, Pagkaanaa gamit ang mga Partisyon. Sa partikular, Causal pagkamakanunayon mao ang labing lig-on nga pagkamakanunayon nga modelo, nga sa gihapon nagtrabaho sa atubangan sa Partitions (break sa network). Mao nga kini usa ka dako nga interes, ug mao nga among gikuha kini.

HighLoad ++, Mikhail Tyulenev (MongoDB): Ang hinungdan nga pagkamakanunayon: gikan sa teorya hangtod sa praktis

Una, gipasimple niini ang trabaho sa mga nag-develop sa aplikasyon. Sa partikular, ang presensya sa daghang suporta gikan sa server: kung ang tanan nga mga rekord nga nahitabo sa sulod sa usa ka kliyente gigarantiyahan nga moabut sa parehas nga pagkasunod-sunod sa lain nga kliyente. Ikaduha, kini makasukol sa mga partisyon.

MongoDB Internal nga Kusina

Paghinumdom nga paniudto na, mibalhin mi sa kusina. Sultihan ko ikaw bahin sa modelo sa sistema, nga mao, kung unsa ang MongoDB alang sa mga nakadungog bahin sa ingon nga database sa unang higayon.

HighLoad ++, Mikhail Tyulenev (MongoDB): Ang hinungdan nga pagkamakanunayon: gikan sa teorya hangtod sa praktis

HighLoad ++, Mikhail Tyulenev (MongoDB): Ang hinungdan nga pagkamakanunayon: gikan sa teorya hangtod sa praktis

Ang MongoDB (pagkahuman gitawag nga "MongoDB") usa ka giapod-apod nga sistema nga nagsuporta sa horizontal scaling, nga mao, sharding; ug sulod sa matag shard gisuportahan usab niini ang data redundancy, nga mao, replikasyon.

Ang Sharding sa MongoDB (dili usa ka relational database) naghimo sa awtomatik nga pagbalanse, nga mao, ang matag koleksyon sa mga dokumento (o "talaan" sa termino sa relational data) gibahin ngadto sa mga piraso, ug ang server awtomatik nga nagpalihok niini tali sa mga shards.

Ang Query Router, nga nag-apod-apod sa mga hangyo, alang sa usa ka kliyente usa ka kliyente diin kini molihok. Nahibal-an na niini kung asa ug unsa nga datos ang nahimutang ug gidirekta ang tanan nga mga hangyo sa husto nga shard.

Laing importante nga punto: Ang MongoDB usa ka master. Adunay usa ka Primary - kini mahimong magkinahanglan og mga rekord nga nagsuporta sa mga yawe nga anaa niini. Dili nimo mahimo ang pagsulat sa Multi-master.

Gihimo namo ang pagpagawas sa 4.2 - bag-ong makapaikag nga mga butang ang nagpakita didto. Sa partikular, ilang gisulod ang Lucene - search - nga mao ang executable java direkta ngadto sa Mongo, ug didto nahimong posible ang paghimo sa pagpangita pinaagi sa Lucene, sama sa Elastica.

Ug naghimo sila usa ka bag-ong produkto - Mga tsart, magamit usab kini sa Atlas (kaugalingon nga Cloud ni Mongo). Adunay sila usa ka Libre nga Tier - mahimo nimong dulaon kini. Ganahan kaayo ko sa Charts - data visualization, very intuitive.

Mga sangkap hinungdan sa pagkamakanunayon

Giihap nako ang mga 230 nga mga artikulo nga gipatik bahin niini nga hilisgutan - gikan sa Leslie Lampert. Karon gikan sa akong panumduman akong ipahibalo kanimo ang pipila ka bahin niini nga mga materyal.

HighLoad ++, Mikhail Tyulenev (MongoDB): Ang hinungdan nga pagkamakanunayon: gikan sa teorya hangtod sa praktis

Nagsugod ang tanan sa usa ka artikulo ni Leslie Lampert, nga gisulat kaniadtong 1970s. Sama sa imong makita, ang pipila ka panukiduki bahin niini nga hilisgutan nagpadayon pa. Karon ang Causal pagkamakanunayon nakasinati og interes kalabot sa pagpalambo sa mga gipang-apod-apod nga mga sistema.

Mga pagbabag

Unsang mga pagdili ang anaa? Kini sa tinuud usa sa mga nag-unang punto, tungod kay ang mga pagdili nga gipahamtang sa usa ka sistema sa produksiyon lahi kaayo sa mga pagdili nga naglungtad sa mga artikulo sa akademiko. Kasagaran sila mga artipisyal.

HighLoad ++, Mikhail Tyulenev (MongoDB): Ang hinungdan nga pagkamakanunayon: gikan sa teorya hangtod sa praktis

  • Una, ang "MongoDB" usa ka us aka agalon, sama sa giingon ko na (kini gipasimple kaayo).
  • Kami nagtuo nga ang sistema kinahanglan nga mosuporta sa mga 10 ka libo ka mga shards. Dili kami makahimo ug bisan unsang mga desisyon sa arkitektura nga dayag nga maglimite niini nga kantidad.
  • Kami adunay usa ka panganod, apan among gihunahuna nga ang usa ka tawo kinahanglan pa nga adunay higayon kung siya nag-download sa binary, gipadagan kini sa iyang laptop, ug ang tanan molihok nga maayo.
  • Naghunahuna kami og usa ka butang nga panagsa ra nga gihunahuna sa Research: ang mga kliyente sa gawas makahimo sa bisan unsa nga gusto nila. Ang MongoDB kay open source. Tungod niini, ang mga kliyente mahimong maalamon ug masuko - mahimo nilang bungkagon ang tanan. Kami nangagpas nga ang mga Byzantine Feilor mahimong naggikan.
  • Alang sa mga kliyente sa gawas nga naa sa gawas sa perimeter, adunay usa ka hinungdanon nga limitasyon: kung kini nga bahin gibabagan, nan wala’y kinahanglan nga maobserbahan nga pagkadaot sa pasundayag.
  • Ang laing punto sa kasagaran anti-akademiko: ang pagkaangay sa nangaging mga bersyon ug sa umaabot. Ang daan nga mga drayber kinahanglang mosuporta sa bag-ong mga update, ug ang database kinahanglang mosuporta sa daan nga mga drayber.

Sa kinatibuk-an, kining tanan nagpahamtang ug mga pagdili.

Ang hinungdan sa pagkamakanunayon nga mga sangkap

Maghisgot ako karon bahin sa pipila ka mga sangkap. Kung atong tagdon ang Causal consistency sa kinatibuk-an, makapili kita og mga bloke. Nagpili kami gikan sa mga buhat nga nahisakop sa usa ka bloke: Pagsubay sa Dependency, pagpili sa mga orasan, kung giunsa kini nga mga orasan ma-synchronize sa usag usa, ug kung giunsa namon masiguro ang seguridad - kini usa ka kasarangan nga outline kung unsa ang akong hisgutan:

HighLoad ++, Mikhail Tyulenev (MongoDB): Ang hinungdan nga pagkamakanunayon: gikan sa teorya hangtod sa praktis

Bug-os nga Pagsubay sa Dependency

Nganong gikinahanglan kini? Aron nga kung ang datos gisundog, ang matag rekord, ang matag pagbag-o sa datos adunay kasayuran bahin sa kung unsang mga pagbag-o ang gisaligan niini. Ang labing una ug walay hinungdan nga pagbag-o mao kung ang matag mensahe nga adunay usa ka rekord adunay kasayuran bahin sa nangaging mga mensahe:

HighLoad ++, Mikhail Tyulenev (MongoDB): Ang hinungdan nga pagkamakanunayon: gikan sa teorya hangtod sa praktis

Niini nga pananglitan, ang numero sa mga kulot nga bracket mao ang mga numero sa rekord. Usahay kini nga mga rekord nga adunay mga kantidad gibalhin bisan sa ilang kinatibuk-an, usahay ang pipila nga mga bersyon gibalhin. Ang hinungdan mao nga ang matag pagbag-o adunay kasayuran bahin sa nauna (klaro nga nagdala niining tanan sa sulod mismo).

Ngano nga nakahukom kami nga dili gamiton kini nga pamaagi (bug-os nga pagsubay)? Dayag nga, tungod kay kini nga pamaagi dili praktikal: ang bisan unsang pagbag-o sa usa ka social network nagdepende sa tanan nga nangagi nga mga pagbag-o sa kana nga social network, pagbalhin, ingnon ta, Facebook o VKontakte sa matag update. Bisan pa, adunay daghang panukiduki bahin sa Full Dependency Tracking - kini mga pre-social network; alang sa pipila nga mga sitwasyon kini molihok gyud.

Tin-aw nga Pagsubay sa Dependency

Ang sunod mas limitado. Ang pagbalhin sa kasayuran gikonsiderar usab dinhi, apan ang klaro nga nagsalig. Unsa ang nagdepende kung unsa, ingon usa ka lagda, gitino sa Aplikasyon. Kung ang datos gisubli, ang pangutana nagbalik lamang sa mga tubag kung ang mga naunang dependency natagbaw, kana, gipakita. Kini ang esensya kung giunsa ang Causal consistency molihok.

HighLoad ++, Mikhail Tyulenev (MongoDB): Ang hinungdan nga pagkamakanunayon: gikan sa teorya hangtod sa praktis

Nakita niya nga ang rekord 5 nagdepende sa mga rekord 1, 2, 3, 4 - sumala niana, naghulat siya sa wala pa ang kliyente adunay access sa mga pagbag-o nga gihimo sa desisyon sa pag-access ni Penny, kung ang tanan nga nangaging mga pagbag-o nakaagi na sa database.

Dili usab kini angay kanamo, tungod kay adunay daghan pa nga kasayuran, ug kini makapahinay sa mga butang. Adunay laing pamaagi ...

Lamport nga orasan

Tigulang na kaayo sila. Ang Lamport Clock nagpasabot nga kini nga mga dependency gipilo ngadto sa usa ka scalar function, nga gitawag ug Lamport Clock.

Ang usa ka scalar function usa ka abstract nga numero. Kasagaran kini gitawag nga lohikal nga panahon. Sa matag panghitabo, kini nga counter nagdugang. Ang Counter, nga nahibal-an karon sa proseso, nagpadala sa matag mensahe. Kini mao ang tin-aw nga ang mga proseso mahimong wala sa sync, sila adunay bug-os nga lain-laing mga panahon. Bisan pa, ang sistema sa usa ka paagi nagbalanse sa orasan sa ingon nga pagmemensahe. Unsa ang mahitabo niini nga kaso?

Gibahin nako ang dako nga shard sa duha aron maklaro: Ang mga higala mahimong magpuyo sa usa ka node, nga adunay usa ka piraso sa koleksyon, ug ang Feed mahimong mabuhi sa lain nga node, nga adunay usa ka piraso niini nga koleksyon. Klaro ba kung giunsa nila paggawas sa linya? Ang Unang Feed moingon: "Replicated", ug dayon Mga Higala. Kung ang sistema wala maghatag usa ka matang sa garantiya nga ang Feed dili ipakita hangtod ang mga dependency sa Mga Higala sa koleksyon sa Mga Higala mahatud usab, nan kita adunay eksakto nga kahimtang nga akong gihisgutan.

Nakita nimo kung giunsa ang pag-counter time sa Feed lohikal nga pagtaas:

HighLoad ++, Mikhail Tyulenev (MongoDB): Ang hinungdan nga pagkamakanunayon: gikan sa teorya hangtod sa praktis

Mao nga ang panguna nga kabtangan niining Lamport Clock ug Causal consistency (gipasabut pinaagi sa Lamport Clock) mao kini: kung kita adunay Mga Hitabo A ug B, ug ang Hitabo B nagdepende sa Hitabo A*, nan kini nagsunod nga ang LogicalTime sa Hitabo A mas ubos kay sa LogicalTime gikan sa Hitabo B.

* Usahay moingon usab sila nga ang A nahitabo sa wala pa ang B, nga mao, ang A nahitabo sa wala pa ang B - kini usa ka piho nga relasyon nga partially nagmando sa tibuuk nga hugpong sa mga panghitabo nga nahitabo sa kinatibuk-an.

Ang kaatbang kay dili husto. Kini sa tinuud usa sa mga nag-unang disbentaha sa Lamport Clock - partial order. Adunay usa ka konsepto bahin sa dungan nga mga panghitabo, nga mao, mga panghitabo diin wala (A nahitabo sa wala pa ang B) ni (A nahitabo sa wala pa ang B). Usa ka pananglitan mao ang managsama nga pagdugang ni Leonard sa usa ka tawo ingon usa ka higala (dili bisan si Leonard, apan si Sheldon, pananglitan).
Kini ang kabtangan nga sagad gigamit kung nagtrabaho sa mga orasan sa Lamport: espesipiko nilang gitan-aw ang function ug gikan niini nakahinapos sila nga tingali kini nga mga panghitabo nagsalig. Tungod kay ang usa ka paagi tinuod: kung ang LogicalTime A mas gamay kaysa LogicalTime B, nan ang B dili mahitabo sa wala pa ang A; ug kung labaw pa, nan tingali.

Vector nga Orasan

Ang lohikal nga pag-uswag sa orasan sa Lamport mao ang Vector Clock. Nagkalainlain sila tungod kay ang matag node nga ania dinhi adunay kaugalingon nga lahi nga orasan, ug kini gipasa ingon usa ka vector.
Niini nga kaso, imong makita nga ang zeroth index sa vector maoy responsable sa Feed, ug ang unang index sa vector kay para sa Friends (matag usa niini nga mga node). Ug karon sila modaghan: ang zero index sa "Feed" nagdugang sa pagsulat - 1, 2, 3:

HighLoad ++, Mikhail Tyulenev (MongoDB): Ang hinungdan nga pagkamakanunayon: gikan sa teorya hangtod sa praktis

Ngano nga mas maayo ang Vector Clock? Tungod kay gitugotan ka nila nga mahibal-an kung unsang mga panghitabo ang dungan ug kung kini mahitabo sa lainlaing mga node. Kini hinungdanon kaayo alang sa usa ka sharding system sama sa MongoDB. Bisan pa, wala namon kini gipili, bisan kung kini usa ka katingad-an nga butang, ug kini molihok nga maayo, ug tingali kini angay kanamo ...

Kung kami adunay 10 ka libo nga mga shards, dili kami makabalhin sa 10 ka libo nga mga sangkap, bisan kung among i-compress kini o adunay lain nga butang - ang payload mahimong daghang beses nga mas gamay kaysa sa gidaghanon sa tibuuk nga vector. Busa, nga nagkagot ang among mga kasingkasing ug ngipon, among gibiyaan kini nga pamaagi ug mibalhin sa lain.

Spanner TrueTime. Atomic nga orasan

Nakaingon ko nga naay storya about sa Spanner. Kini usa ka cool nga butang, diretso sa ika-XNUMX nga siglo: atomic nga mga orasan, pag-synchronize sa GPS.

Unsa ang ideya? Ang "Spanner" usa ka sistema sa Google nga bag-o lang nahimo nga magamit sa mga tawo (gidugang nila ang SQL niini). Ang matag transaksyon didto adunay pipila ka time stamp. Tungod kay ang oras gi-synchronize *, ang matag panghitabo mahimong ma-assign sa usa ka piho nga oras - ang mga orasan sa atomic adunay oras sa paghulat, pagkahuman gigarantiyahan ang lainlaing oras nga "mahitabo".

HighLoad ++, Mikhail Tyulenev (MongoDB): Ang hinungdan nga pagkamakanunayon: gikan sa teorya hangtod sa praktis

Busa, pinaagi lamang sa pagsulat sa database ug paghulat sa pipila ka yugto sa panahon, ang Serializability sa panghitabo awtomatik nga gigarantiyahan. Sila adunay pinakalig-on nga Consistency nga modelo nga mahanduraw sa prinsipyo - kini mao ang External Consistency.

* Kini ang panguna nga problema sa mga orasan sa Lampart - dili gyud sila magkadungan sa mga gipang-apod-apod nga sistema. Mahimo silang magkalainlain; bisan sa NTP, dili gihapon sila molihok nga maayo. Ang "Spanner" adunay usa ka atomic nga orasan ug ang pag-synchronize, ingon og, mga microsecond.

Nganong wala man ta mopili? Wala kami maghunahuna nga ang among mga tiggamit adunay usa ka built-in nga atomic nga orasan. Sa diha nga sila makita, nga gitukod sa matag laptop, adunay usa ka matang sa super cool GPS synchronization - unya oo ... Apan sa pagkakaron ang pinakamaayo nga posible mao ang Amazon, Base Stations - alang sa mga panatiko ... Busa migamit kami sa ubang mga relo .

Hybrid nga Orasan

Kini sa tinuud kung unsa ang gimarkahan sa MongoDB kung gisiguro ang pagkamakanunayon sa Causal. Giunsa sila hybrid? Ang Hybrid usa ka scalar nga kantidad, apan kini adunay duha ka sangkap:

HighLoad ++, Mikhail Tyulenev (MongoDB): Ang hinungdan nga pagkamakanunayon: gikan sa teorya hangtod sa praktis

  • Ang una mao ang panahon sa Unix (pila ka segundos ang milabay sukad sa "pagsugod sa kalibutan sa kompyuter").
  • Ang ikaduha mao ang pipila nga pag-uswag, usa usab ka 32-bit nga wala gipirmahan nga int.

Kana lang, sa tinuod. Adunay kini nga pamaagi: ang bahin nga responsable sa oras gi-synchronize sa orasan sa tanan nga oras; sa matag higayon nga ang usa ka update mahitabo, kini nga bahin gi-synchronize sa orasan ug kini turns nga ang oras mao ang kanunay nga mas o dili kaayo husto, ug ang pag-uswag nagtugot kaninyo sa pag-ila sa taliwala sa mga panghitabo nga nahitabo sa samang punto sa panahon.

Ngano nga hinungdanon kini alang sa MongoDB? Tungod kay kini nagtugot kanimo sa paghimo sa usa ka matang sa backup nga mga restawran sa usa ka punto sa panahon, nga mao, ang panghitabo gi-index sa panahon. Importante kini kung gikinahanglan ang pipila ka mga panghitabo; Alang sa usa ka database, ang mga panghitabo mao ang mga pagbag-o sa database nga nahitabo sa piho nga mga agwat sa oras.

Isulti ko kanimo ang labing hinungdanon nga hinungdan kanimo lamang (palihug, ayaw pagsulti bisan kinsa)! Gibuhat namo kini tungod kay mao kini ang hitsura sa organisado, na-index nga datos sa MongoDB OpLog. Ang OpLog usa ka istruktura sa datos nga adunay hingpit nga tanan nga mga pagbag-o sa database: una sila nga moadto sa OpLog, ug dayon kini magamit sa Pagtipig mismo sa kaso kung kini usa ka gikopya nga petsa o shard.

Kini ang panguna nga hinungdan. Bisan pa, adunay usab praktikal nga mga kinahanglanon alang sa pag-ugmad sa usa ka database, nga nagpasabut nga kini kinahanglan nga yano - gamay nga code, ingon gamay nga nabuak nga mga butang kutob sa mahimo nga kinahanglan nga isulat pag-usab ug sulayan. Ang kamatuoran nga ang among mga oplog gi-index sa hybrid nga mga orasan nakatabang ug dako ug nagtugot kanamo sa paghimo sa husto nga pagpili. Nagbayad gyud kini ug sa usa ka paagi mahika nga nagtrabaho sa labing una nga prototype. Nindot kaayo kadto!

Pag-synchronize sa orasan

Adunay daghang mga pamaagi sa pag-synchronize nga gihulagway sa siyentipikong literatura. Naghisgot ako bahin sa pag-synchronize kung kami adunay duha ka lainlaing mga shards. Kung adunay usa ka replika nga set, dili kinahanglan ang bisan unsang pag-synchronize: kini usa ka "single master"; kami adunay usa ka OpLog, diin ang tanan nga mga pagbag-o nahulog - sa kini nga kaso, ang tanan sunud-sunod nga gimando sa "Oplog" mismo. Apan kung kita adunay duha ka managlahi nga mga shards, ang pag-synchronize sa oras hinungdanon dinhi. Kini diin ang vector clock nakatabang pa! Pero wala namo sila.

HighLoad ++, Mikhail Tyulenev (MongoDB): Ang hinungdan nga pagkamakanunayon: gikan sa teorya hangtod sa praktis

Ang ikaduha mao ang angay - kini mao ang "Heartbeats". Posible nga ibaylo ang pipila ka mga signal nga mahitabo matag yunit sa oras. Pero hinay kaayo ang Heartbeats, dili mi makahatag ug latency sa among kliyente.

Ang tinuod nga panahon, siyempre, usa ka talagsaon nga butang. Apan, pag-usab, kini tingali ang umaabot ... Bisan kung mahimo na kini sa Atlas, adunay mga paspas nga "Amazon" nga mga synchronizer sa oras. Apan dili kini magamit sa tanan.

Ang pagpanglibak mao ang panahon nga ang tanang mensahe naglakip sa panahon. Kini ang gibanabana nga among gigamit. Ang matag mensahe tali sa mga node, usa ka drayber, usa ka data node router, hingpit nga tanan alang sa MongoDB usa ka matang sa elemento, usa ka bahin sa database nga adunay usa ka orasan nga nagdagan. Sila adunay kahulogan sa hybrid nga panahon bisan asa, kini gipasa. 64 ka gamay? Kini nagtugot, kini posible.

Sa unsang paagi kining tanan magtinabangay?

Dinhi ako nagtan-aw sa usa ka replika nga set aron kini mas sayon. Adunay Primary ug Secondary. Ang sekondarya naghimo sa pagkopya ug dili kanunay nga hingpit nga dungan sa Primary.

Ang pagsal-ot mahitabo sa "Primy" nga adunay piho nga kantidad sa oras. Kini nga insert nagdugang sa internal nga ihap sa 11, kung kini ang maximum. O kini susihon ang mga kantidad sa orasan ug i-sync sa orasan kung ang mga kantidad sa orasan mas dako. Kini nagtugot kanimo sa pag-organisar sa panahon.

Pagkahuman niya paghimo sa pagrekord, usa ka hinungdanon nga higayon ang nahitabo. Ang orasan naa sa "MongoDB" ug gidugangan lamang sa kaso sa pagsulat sa "Oplog". Kini ang panghitabo nga nagbag-o sa kahimtang sa sistema. Sa hingpit nga tanan nga klasiko nga mga artikulo, ang usa ka panghitabo giisip nga kung ang usa ka mensahe naigo sa usa ka node: ang mensahe miabot na, nga nagpasabut nga ang sistema nagbag-o sa kahimtang niini.

Kini tungod sa kamatuoran nga sa panahon sa panukiduki dili kini hingpit nga tin-aw kung giunsa paghubad kini nga mensahe. Nahibal-an namon nga sigurado nga kung dili kini makita sa "Oplog", nan dili kini mahubad sa bisan unsang paagi, ug ang pagbag-o sa kahimtang sa sistema usa ra ka pagsulod sa "Oplog". Gipasimple niini ang tanan alang kanamo: gipasimple kini sa modelo, ug gitugotan kami sa pag-organisar niini sulod sa usa ka set sa replika, ug daghang uban pang mapuslanon nga mga butang.

Ang kantidad nga gisulat na sa "Oplog" gibalik - nahibal-an namon nga ang "Oplog" naa na kini nga kantidad, ug ang oras niini 12. Karon, ingnon ta, ang pagbasa nagsugod gikan sa lain nga node (Secondary), ug kini nagpadala pagkahuman saClusterTime sa ang mensahe. Siya miingon: "Kinahanglan nako ang tanan nga nahitabo labing menos pagkahuman sa 12 o sa dose" (tan-awa ang litrato sa ibabaw).

Mao ni ang gitawag nga Causal a consistent (CAT). Adunay ingon nga konsepto sa teorya nga kini usa ka tipik sa oras, nga makanunayon sa iyang kaugalingon. Sa kini nga kaso, makaingon kita nga kini ang kahimtang sa sistema nga naobserbahan sa oras nga 12.

Karon wala pa dinhi, tungod kay kini nga matang sa pagsundog sa sitwasyon kung kinahanglan nimo ang Secondary aron makopya ang datos gikan sa Primary. Naghulat siya ... Ug karon miabot na ang datos - gibalik niya kini nga mga kantidad.

HighLoad ++, Mikhail Tyulenev (MongoDB): Ang hinungdan nga pagkamakanunayon: gikan sa teorya hangtod sa praktis

Ingon niana kung giunsa kini tanan molihok. Hapit.

Unsay buot ipasabot sa "hapit"? Ibutang ta nga adunay usa ka tawo nga nakabasa ug nakasabut kung giunsa kini tanan molihok. Naamgohan nako nga sa matag higayon nga mahitabo ang ClusterTime, kini nag-update sa internal nga lohikal nga orasan, ug dayon ang sunod nga entry nagdugang sa usa. Kini nga function nagkinahanglan og 20 ka linya. Ingnon ta nga kini nga tawo nagpadala sa pinakadako nga 64-bit nga numero, minus usa.

Nganong "minus one"? Tungod kay ang internal nga orasan ilisan sa kini nga kantidad (klaro, kini ang pinakadako nga posible ug labi pa sa karon nga oras), unya usa ka pagsulod ang mahitabo sa "Oplog", ug ang orasan madugangan sa lain nga yunit - ug adunay na. mahimong usa ka labing taas nga kantidad (adunay yano nga tanan nga mga yunit, wala’y lain nga moadto), dili santo nga mga ints).

Kini mao ang tin-aw nga human niini nga ang sistema mahimong hingpit nga inaccessible alang sa bisan unsa. Mahimo lamang kini nga idiskarga ug limpyohan - daghang manwal nga trabaho. Bug-os nga anaa:

HighLoad ++, Mikhail Tyulenev (MongoDB): Ang hinungdan nga pagkamakanunayon: gikan sa teorya hangtod sa praktis

Dugang pa, kung kini gisundog sa laing dapit, nan ang tibuok cluster mahulog lang. Usa ka hingpit nga dili madawat nga kahimtang nga mahimo’g maorganisar ni bisan kinsa nga dali ug dali! Busa, gikonsiderar namon kini nga higayon nga usa sa labing hinungdanon. Unsaon pagpugong niini?

Ang among paagi mao ang pagpirma sa clusterTime

Kini ang paagi nga kini gipasa sa mensahe (sa wala pa ang asul nga teksto). Apan nagsugod usab kami sa paghimo og usa ka pirma (asul nga teksto):

HighLoad ++, Mikhail Tyulenev (MongoDB): Ang hinungdan nga pagkamakanunayon: gikan sa teorya hangtod sa praktis

Ang pirma gihimo sa usa ka yawe nga gitipigan sa sulod sa database, sulod sa usa ka luwas nga perimeter; ang iyang kaugalingon gihimo ug gi-update (ang mga tiggamit wala’y nakita bahin niini). Nahimo ang usa ka hash, ug ang matag mensahe gipirmahan kung gihimo ug gi-validate kung nadawat.
Ang pangutana lagmit mitungha sa mga hunahuna sa mga tawo: “Unsa ka dako niini ang pagpahinay sa mga butang?” Gisultihan ko ikaw nga kini kinahanglan nga molihok dayon, labi na kung wala kini nga bahin.

Unsay buot ipasabot sa paggamit sa Causal consistency niini nga kaso? Kini aron ipakita ang afterClusterTime parameter. Kung wala kini, ipasa ra ang mga kantidad. Ang tsismis, sugod sa bersyon 3.6, kanunay nga molihok.

Kung atong biyaan ang kanunay nga henerasyon sa mga pirma, kini makapahinay sa sistema bisan kung wala ang usa ka bahin, nga wala makatagbo sa atong mga pamaagi ug mga kinahanglanon. Busa unsa ang atong gibuhat?

Buhata kini dayon!

Kini usa ka medyo yano nga butang, apan ang lansis makapaikag - ipaambit ko kini, tingali adunay usa nga interesado.
Kami adunay usa ka hash nga nagtipig sa gipirmahan nga datos. Ang tanan nga datos moagi sa cache. Ang cache wala mopirma sa piho nga oras, apan ang Range. Kung moabut ang pila ka kantidad, maghimo kami usa ka Range, itago ang katapusan nga 16 ka bit, ug among gipirmahan kini nga kantidad:

HighLoad ++, Mikhail Tyulenev (MongoDB): Ang hinungdan nga pagkamakanunayon: gikan sa teorya hangtod sa praktis

Pinaagi sa pagdawat sa ingon nga pirma, gipadali namon ang sistema (medyo) 65 ka libo ka beses. Nindot kaayo: kung nagpahigayon kami mga eksperimento, ang oras sa tinuud mikunhod sa 10 ka libo ka beses kung kami adunay sunud-sunod nga pag-update. Klaro nga kung magkaaway sila, dili kini molihok. Apan sa kadaghanan nga praktikal nga mga kaso kini molihok. Ang kombinasyon sa pirma sa Range uban sa pirma nakasulbad sa problema sa seguridad.

Unsay atong nakat-onan?

Mga leksyon nga atong nakat-unan gikan niini:

  • Kinahanglan natong basahon ang mga materyales, mga istorya, mga artikulo, tungod kay kita adunay daghan nga makapaikag nga mga butang. Kung nagtrabaho kami sa usa ka bahin (ilabi na karon, kung naghimo kami mga transaksyon, ug uban pa), kinahanglan namon nga basahon ug sabton. Nagkinahanglan kini og panahon, apan kini mapuslanon kaayo tungod kay kini nagpatin-aw kung asa kita. Morag wala miy nahimo nga bag-o - gikuha ra namo ang mga sangkap.

    Sa kinatibuk-an, adunay usa ka piho nga kalainan sa panghunahuna kung adunay usa ka komperensya sa akademiko (Sigmon, pananglitan) - ang tanan nagpunting sa bag-ong mga ideya. Unsa ang bag-o bahin sa among algorithm? Walay bisan unsa nga bag-o dinhi. Ang kabag-ohan kay naa sa paagi nga gisagol namon ang mga naglungtad nga pamaagi. Busa, ang una nga butang mao ang pagbasa sa mga klasiko, sugod sa Lampart.

  • Sa produksiyon, ang mga kinahanglanon hingpit nga lahi. Sigurado ako nga daghan kaninyo ang wala mag-atubang sa "spherical" nga mga database sa usa ka abstract vacuum, apan sa normal, tinuod nga mga butang nga adunay mga problema sa pagkaanaa, latency ug fault tolerance.
  • Ang katapusan nga butang mao nga kinahanglan namon nga tan-awon ang lainlaing mga ideya ug isagol ang daghang lainlaing mga artikulo sa usa ka pamaagi, nga magkauban. Ang ideya bahin sa pagpirma, pananglitan, sa kasagaran naggikan sa usa ka artikulo nga gikonsiderar ang protocol sa Paxos, nga alang sa mga dili Byzantine nga mga Failor naa sa sulod sa protocol sa pagtugot, alang sa mga Byzantine - sa gawas sa protocol sa pagtugot ... Sa kinatibuk-an, mao gyud kini ang atong nahuman sa pagbuhat.

    Wala gayoy bag-o dinhi! Apan sa diha nga gisagol namo ang tanan ... Parehas kini sa pag-ingon nga ang resipe sa salad sa Olivier usa ka binuang, tungod kay naimbento na ang mga itlog, mayonesa ug mga pepino ... Mahitungod sa parehas nga istorya.

HighLoad ++, Mikhail Tyulenev (MongoDB): Ang hinungdan nga pagkamakanunayon: gikan sa teorya hangtod sa praktis

Tapuson ko kini. Salamat!

Ang imong mga pangutana

Pangutana gikan sa mamiminaw (gitawag nga B): – Salamat, Mikhail, sa report! Makapainteres ang topiko bahin sa oras. Gigamit nimo ang Gossiping. Miingon sila nga ang matag usa adunay kaugalingon nga oras, nahibal-an sa tanan ang ilang lokal nga oras. Sa akong nasabtan, naa tay driver - naay daghan nga kliyente nga naay drivers, query-planners pud, shards pud... Ug unsa man ang mahitabo sa sistema kung kalit lang nga naay discrepancy: naay mudesisyon nga para sa usa ka minuto sa unahan, adunay usa ka minuto sa ulahi? Asa ta mahuman?

MT: - Nindot nga pangutana! Gusto lang ko maghisgot bahin sa mga shards. Kung nasabtan nako sa husto ang pangutana, aduna kitay mosunod nga sitwasyon: adunay shard 1 ug shard 2, ang pagbasa mahitabo gikan niining duha ka shards - sila adunay kalainan, dili sila makig-uban sa usag usa, tungod kay ang panahon nga ilang nahibal-an lahi, ilabi na ang panahon nga sila anaa sa oplogs.
Ingnon ta nga ang shard 1 nakahimo usa ka milyon nga mga rekord, ang shard 2 wala’y nahimo, ug ang hangyo miabot sa duha ka shards. Ug ang una adunay afterClusterTime nga kapin sa usa ka milyon. Sa ingon nga sitwasyon, sama sa akong gipasabut, ang shard 2 dili gyud motubag.

SA: – Gusto nako mahibal-an kung giunsa nila pag-synchronize ug gipili ang usa ka lohikal nga oras?

MT: - Sayon kaayo nga i-synchronize. Shard, sa diha nga human saClusterTime moabut kaniya ug siya wala makakita og panahon sa "Oplog", nagsugod nga walay aprobahan. Sa ato pa, gipataas niya ang iyang oras gamit ang iyang mga kamot sa kini nga kantidad. Kini nagpasabot nga kini walay mga panghitabo nga katumbas niini nga hangyo. Gihimo niya kini nga panghitabo sa artipisyal nga paagi ug sa ingon nahimong Causal Consistent.

SA: – Unsa kaha kon human niini ang ubang mga panghitabo moabut kaniya nga nawala sa usa ka dapit sa network?

MT: - Ang Shard gidisenyo sa paagi nga dili na sila mobalik, tungod kay kini usa ka agalon. Kung nagpalista na siya, dili sila moabut, apan moabut ra unya. Dili kini mahitabo nga adunay usa ka butang nga naipit sa usa ka dapit, unya wala siya magsulat, ug unya kini nga mga panghitabo moabut - ug ang Causal consistency nabuak. Kung dili siya magsulat, kinahanglan silang tanan sunod (maghulat siya kanila).

HighLoad ++, Mikhail Tyulenev (MongoDB): Ang hinungdan nga pagkamakanunayon: gikan sa teorya hangtod sa praktis

SA: – Daghan kog pangutana bahin sa mga pila. Ang hinungdan nga pagkamakanunayon nagdahum nga adunay usa ka piho nga pila sa mga aksyon nga kinahanglan buhaton. Unsa ang mahitabo kung mawala ang usa sa among mga pakete? Ania na ang ika-10, ika-11... ang ika-12 nahanaw, ug ang uban naghulat nga kini matuman. Ug kalit nga namatay ang among awto, wala kami'y mahimo. Aduna bay labing taas nga gitas-on sa pila nga natipon sa wala pa ipatuman? Unsang makamatay nga kapakyasan ang mahitabo kung ang usa ka estado nawala? Dugang pa, kung atong isulat nga adunay pipila ka miaging estado, nan kita kinahanglan nga magsugod gikan niini? Apan wala nila siya isalikway!

MT: - Usa usab ka maayo nga pangutana! Unsa may atong gibuhat? Ang MongoDB adunay konsepto sa pagsulat sa korum, pagbasa sa korum. Sa unsa nga mga kaso mahimong mawala ang usa ka mensahe? Kon ang usa ka pagsulat dili korum o kon ang usa ka pagbasa dili korum (usa ka matang sa basura mahimo usab nga motapot).
Mahitungod sa pagkamakanunayon sa Causal, usa ka dako nga eksperimento nga pagsulay ang gihimo, nga ang resulta mao nga sa kaso kung ang pagsulat ug pagbasa dili korum, ang mga paglapas sa Causal consistency mahitabo. Eksakto sa imong gisulti!

Ang among tambag: gamita ang labing minos nga pagbasa sa korum kon mogamit og Causal consistency. Sa kini nga kaso, walay mawala, bisan kon ang rekord sa korum mawala... Kini usa ka orthogonal nga sitwasyon: kon ang user dili gusto nga ang data mawala, siya kinahanglan nga mogamit sa usa ka korum nga rekord. Ang pagkamakanunayon sa hinungdan dili makagarantiya sa kalig-on. Ang kalig-on gigarantiyahan sa replikasyon ug sa makinarya nga may kalabotan sa pagkopya.

SA: - Kung maghimo kami usa ka pananglitan nga naghimo sa sharding alang kanamo (dili agalon, apan ulipon, matag usa), nagsalig kini sa oras sa Unix sa kaugalingon nga makina o sa oras sa "agalon"; Nag-sync ba kini sa unang higayon o matag karon ug unya?

MT: – Klarohon nako karon. Shard (i.e. horizontal partition) – naa gyuy Primary didto. Ug ang usa ka shard mahimong adunay "agalon" ug adunay mga replika. Apan ang shard kanunay nga nagsuporta sa pagrekord, tungod kay kini kinahanglan nga mosuporta sa pipila ka domain (ang shard adunay Primary).

SA: – Busa ang tanan nagdepende ra sa “agalon”? Gigamit ba kanunay ang master time?

MT: - Oo. Mahimo nimo nga mahulagwayon nga isulti: ang orasan nagtiktik kung ang usa ka pagsulod sa "master", sa "Oplog" mahitabo.

SA: - Kami adunay usa ka kliyente nga nagkonektar ug dili kinahanglan nga mahibal-an ang bisan unsa bahin sa oras?

MT: - Dili nimo kinahanglan mahibal-an ang bisan unsang butang! Kung maghisgot kita kung giunsa kini molihok sa kliyente: kung gusto sa kliyente nga gamiton ang pagkamakanunayon sa Causal, kinahanglan niya nga magbukas sa usa ka sesyon. Karon ang tanan anaa na: mga transaksyon sa sesyon, ug pagkuha sa usa ka katungod... Ang sesyon mao ang pag-order sa lohikal nga mga panghitabo nga nahitabo sa kliyente.

Kung ablihan niya kini nga sesyon ug giingon didto nga gusto niya ang Causal consistency (kung ang sesyon nagsuporta sa Causal consistency pinaagi sa default), ang tanan awtomatikong molihok. Ang drayber nahinumdom niini nga panahon ug nagdugang niini sa diha nga kini makadawat og bag-ong mensahe. Nahinumdom kini kung unsa nga tubag ang gibalik sa nauna gikan sa server nga nagbalik sa datos. Ang sunod nga hangyo maglangkob afterCluster("oras mas dako kay niini").

Dili kinahanglan nga mahibal-an sa kliyente ang bisan unsang butang! Kini mao ang bug-os nga opaque kaniya. Kung ang mga tawo mogamit niini nga mga bahin, unsa ang ilang mahimo? Una, luwas kang makabasa sa mga sekondarya: makasulat ka sa Primary ug makabasa gikan sa geographically replicated nga mga sekondarya ug siguroha nga kini magamit. Sa samang higayon, ang mga sesyon nga narekord sa Primary mahimo pa nga ibalhin ngadto sa Secondary, i.e. dili nimo magamit ang usa ka sesyon, apan daghan.

SA: – Usa ka bag-ong layer sa Compute science – CRDT (Conflict-free Replicated Data Types) nga mga tipo sa datos – kusganong nalambigit sa hilisgutan sa Katapusan nga pagkamakanunayon. Nahunahuna ba nimo ang paghiusa sa kini nga mga klase sa datos sa database ug unsa ang imong masulti bahin niini?

MT: - Maayong pangutana! Ang CRDT makatarunganon alang sa pagsulat sa mga panagbangi: sa MongoDB, usa ka agalon.

SA: – Naa koy pangutana sa mga devops. Sa tinuod nga kalibutan, adunay ingon nga Jesuitical nga mga sitwasyon kung ang Byzantine Failure mahitabo, ug ang mga dautang tawo sa sulod sa gipanalipdan nga perimeter nagsugod sa pagduslak sa protocol, pagpadala sa mga pakete sa craft sa usa ka espesyal nga paagi?

HighLoad ++, Mikhail Tyulenev (MongoDB): Ang hinungdan nga pagkamakanunayon: gikan sa teorya hangtod sa praktis

MT: – Ang mga dautang tawo sa sulod sa perimeter sama sa usa ka Trojan horse! Ang daotang mga tawo sa sulod sa perimeter makahimo ug daghang daotang mga butang.

SA: - Klaro nga ang pagbiya, sa halos pagsulti, usa ka lungag sa server diin mahimo nimong ibutang ang usa ka zoo sa mga elepante ug mahugno ang tibuuk nga pungpong hangtod sa kahangturan... Nagkinahanglan kini og panahon alang sa manwal nga pagbawi ... Kini, aron ibutang kini sa malumo, mao ang sayop. Sa laing bahin, kini makapainteres: sa tinuod nga kinabuhi, sa praktis, adunay mga sitwasyon nga natural nga susama nga internal nga mga pag-atake mahitabo?

MT: – Tungod kay panagsa ra ko makasugat og mga paglapas sa seguridad sa tinuod nga kinabuhi, dili ko makasulti kon kini mahitabo. Apan kung maghisgot kita bahin sa pilosopiya sa pag-uswag, kita maghunahuna nga ingon niini: kita adunay usa ka perimeter nga naghatag sa mga lalaki nga naghimo sa seguridad - kini usa ka kastilyo, usa ka kuta; ug sa sulod sa perimeter mahimo nimo ang bisan unsang gusto nimo. Klaro nga adunay mga tiggamit nga adunay katakus sa pagtan-aw lamang, ug adunay mga tiggamit nga adunay katakus sa pagpapas sa direktoryo.

Depende sa mga katungod, ang kadaot nga mahimo sa mga tiggamit mahimo nga usa ka mouse, o kini mahimo nga usa ka elepante. Kini mao ang tin-aw nga ang usa ka user uban sa bug-os nga mga katungod makahimo sa bisan unsa sa tanan. Ang usa ka tiggamit nga adunay limitado nga mga katungod mahimong hinungdan sa labi ka gamay nga kadaot. Sa partikular, dili kini makaguba sa sistema.

SA: - Sa gipanalipdan nga perimeter, adunay usa nga misulay sa paghimo sa wala damha nga mga protocol alang sa server aron hingpit nga malaglag ang server, ug kung swerte ka, ang tibuuk nga cluster ... Nakakuha ba kini nga "maayo"?

MT: "Wala pa ako makadungog sa ingon nga mga butang." Ang kamatuoran nga mahimo nimong ma-crash ang usa ka server sa kini nga paagi dili sekreto. Napakyas sa sulod, gikan sa protocol, nga usa ka awtorisado nga tiggamit nga makasulat sa usa ka butang nga sama niini sa mensahe ... Sa pagkatinuod, kini imposible, tungod kay kini mapamatud-an pa. Posible nga i-disable kini nga panghimatuud alang sa mga tiggamit nga dili gusto niini - nan kana ang ilang problema; sila, sa halos pagkasulti, nagguba sa mga paril sa ilang kaugalingon ug mahimo nimong itulod ang usa ka elepante didto, nga magyatak... Apan sa kinatibuk-an, mahimo ka nga magsul-ob ingon usa ka tig-ayo, umari ug kuhaa kini!

SA: – Salamat sa report. Sergey (Yandex). Adunay usa ka makanunayon sa Mong nga naglimite sa gidaghanon sa mga miyembro sa pagboto sa Replica Set, ug kini nga kanunay mao ang 7 (pito). Ngano nga kini usa ka kanunay? Ngano nga dili kini usa ka matang sa parameter?

MT: - Kami adunay mga Replica Set nga adunay 40 nga mga node. Kanunay adunay kadaghanan. Wala ko kabalo unsa nga version...

SA: – Sa Replica Set mahimo ka nga magpadagan nga dili mga miyembro sa pagboto, apan adunay labing taas nga 7 nga mga miyembro sa pagboto. Sa unsang paagi kita mabuhi sa pagsira sa kini nga kaso kung ang atong Replica Set mikaylap sa 3 nga mga sentro sa datos? Ang usa ka sentro sa datos dali nga mapalong, ug ang lain nga makina mahimong mahulog.

MT: – Kini mao ang na sa usa ka gamay nga labaw pa sa kasangkaran sa report. Kini usa ka kinatibuk-ang pangutana. Basin makasulti ko nimo bahin niini unya.

HighLoad ++, Mikhail Tyulenev (MongoDB): Ang hinungdan nga pagkamakanunayon: gikan sa teorya hangtod sa praktis

Pipila ka mga ad 🙂

Salamat sa pagpabilin kanamo. Ganahan ka ba sa among mga artikulo? Gusto nga makakita og mas makapaikag nga sulod? Suportahi kami pinaagi sa pag-order o pagrekomenda sa mga higala, cloud VPS alang sa mga developers gikan sa $4.99, usa ka talagsaon nga analogue sa mga entry-level server, nga giimbento namo alang kanimo: Ang tibuok kamatuoran bahin sa VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps gikan sa $19 o unsaon pagpaambit sa usa ka server? (anaa sa RAID1 ug RAID10, hangtod sa 24 ka mga core ug hangtod sa 40GB DDR4).

Dell R730xd 2 ka beses nga mas barato sa Equinix Tier IV data center sa Amsterdam? Dinhi lang 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV gikan sa $199 sa Netherlands! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - gikan sa $99! Basaha ang mahitungod sa Unsaon pagtukod sa infrastructure corp. klase sa paggamit sa Dell R730xd E5-2650 v4 server nga nagkantidad ug 9000 euros sa usa ka sentimos?

Source: www.habr.com

Idugang sa usa ka comment