HighLoad ++, Mikhail Tyulenev (MongoDB): Hevrêziya sedem: ji teoriyê berbi pratîkê

Konferansa paşîn a HighLoad++ dê di 6 û 7ê Avrêl, 2020 de li St.
Details û bilêtên link. HighLoad++ Siberia 2019. Salona "Krasnoyarsk". 25 Hezîran, 12:00. Tez û pêşkêşkirin.

HighLoad ++, Mikhail Tyulenev (MongoDB): Hevrêziya sedem: ji teoriyê berbi pratîkê

Wusa diqewime ku hewcedariyên pratîkî bi teoriyê re nakokî, li cihê ku aliyên girîng ji bo hilberek bazirganî nayên hesibandin. Ev axaftin pêvajoyek ji bo bijartin û berhevkirina nêzîkatiyên cihêreng ji bo afirandina pêkhateyên hevrêziya Sedemî li ser bingeha lêkolîna akademîk li ser bingeha hewcedariyên hilberek bazirganî pêşkêşî dike. Guhdar dê li ser nêzîkatiyên teorîkî yên heyî yên demjimêrên mantiqî, şopandina girêdayîbûnê, ewlehiya pergalê, hevdengkirina demjimêrê, û çima MongoDB li ser hin çareseriyan rûniştiye fêr bibin.

Mikhail Tyulenev (li vir şûnda wekî MT tê gotin): - Ez ê li ser hevrêziya Sedemî biaxivim - ev taybetmendiyek e ku me li MongoDB li ser xebitî. Ez di komek pergalên belavbûyî de dixebitim, me ew nêzî du sal berê kir.

HighLoad ++, Mikhail Tyulenev (MongoDB): Hevrêziya sedem: ji teoriyê berbi pratîkê

Di vê pêvajoyê de, ez neçar bûm ku xwe bi gelek lêkolînên akademîk re nas bikim, ji ber ku ev taybetmendî pir baş hatî lêkolîn kirin. Derket holê ku ji ber hewcedariyên pir taybetî yên ku belkî di her serîlêdana hilberînê de hene, yek gotarek di nav databasa hilberînê de hewce nake.

Ez ê bipeyivim ka em, wekî xerîdarên Lêkolînên akademîk, çawa tiştek jê amade dikin ku wê hingê em dikarin ji bikarhênerên xwe re wekî xwarinek amade ya ku karanîna wê hêsan û ewledar e pêşkêşî bikarhênerên xwe bikin.

Lihevhatina sedem. Werin em têgehan diyar bikin

Ji bo destpêkê, ez dixwazim bi gelemperî bibêjim ku hevgirtina Sedemî çi ye. Du karakter hene - Leonard û Penny (zincîra TV "The Big Bang Theory"):

HighLoad ++, Mikhail Tyulenev (MongoDB): Hevrêziya sedem: ji teoriyê berbi pratîkê

Em bêjin Penny li Ewropayê ye û Leonard dixwaze wê partiyek surprîz saz bike. Û ew nikare tiştek çêtir bifikire ku wê ji navnîşa hevalên xwe bavêje, ji hemî hevalên xwe re nûvekirinek li ser xwarinê bişîne: "Werin em Penny kêfxweş bikin!" (Ew li Ewropayê ye, dema ku ew di xew de ye, ew van hemîyan nabîne û nikare bibîne, ji ber ku ew ne li wir e). Di dawiyê de, ew vê postê jê dike, wê ji Feedê paqij dike û gihîştina nû vedigire da ku ew tiştek ferq neke û skandalek çênebe.
Ev hemî baş û baş e, lê em bihesibînin ku pergal belav bûye û tişt hinekî xelet çûn. Mînakî, dibe ku biqewime ku qedexekirina gihîştina Penny piştî xuyabûna vê postê pêk hat, heke bûyer ji hêla sedem û encamê ve girêdayî nebin. Bi rastî, ev mînakek e ku dema ku ji bo pêkanîna fonksiyonek karsaziyê (di vê rewşê de) hevrêziya Sedemî hewce ye.

Di rastiyê de, ev taybetmendiyên databasê yên pir ne-tewre ne - pir hindik kes wan piştgirî dikin. Ka em herin ser modelan.

Modelên Pêdengiyê

Di databasan de modela hevgirtinê bi rastî çi ye? Vana hin garantî ne ku pergalek belavkirî di derheqê kîjan daneyan de xerîdar dikare bi çi rêzê werbigire dide.

Di prensîbê de, hemî modelên domdariyê dişibihe ku pergalek belavbûyî çiqasî dişibihe pergalek ku, mînakî, li ser yek girêkek li ser laptopê dixebite. Û bi vî awayî pergalek ku li ser bi hezaran "Nod"ên jeo-belavbûyî dimeşe bi laptopek re ye, ku tê de hemî van taybetmendî di prensîbê de bixweber têne çêkirin.

Ji ber vê yekê, modelên hevgirtî tenê li pergalên belavkirî têne sepandin. Hemî pergalên ku berê hebûn û di heman pîvana vertîkal de xebitîn, pirsgirêkên weha nedîtin. Yek Buffer Cache hebû, û her tişt her dem jê dihat xwendin.

Model Strong

Bi rastî, modela yekem Strong e (an jî xeta şiyana bilindbûnê, wekî ku pir caran jê re tê gotin). Ev modelek hevgirtî ye ku piştrast dike ku her guhertin, piştî ku piştrast kir ku ew çêbûye, ji hemî bikarhênerên pergalê re xuya dibe.

Ev rêzek gerdûnî ya hemî bûyeran di databasê de diafirîne. Ev taybetmendiyek domdar a pir xurt e, û bi gelemperî pir biha ye. Lêbelê, ew pir baş piştgirî ye. Ew tenê pir biha û hêdî ye - ew tenê kêm tê bikar anîn. Ji vê re şiyana bilindbûnê tê gotin.

Taybetmendiyek din, bihêztir heye ku di Spanner de tê piştgirî kirin - bi navê Hevrêziya Derveyî. Em ê hinekî paşê li ser biaxivin.

Qedexe

Ya din Sedem e, ya ku min behs dikir tam ev e. Di navbera Strong û Causal de çend bin-asta din hene ku ez ê qala wan nekim, lê ew hemî bi Sedemî vedigerin. Ev modelek girîng e ji ber ku ew ji hemî modelan bihêztirîn e, di hebûna torê an dabeşan de hevgirtina herî bihêz e.

Sedem bi rastî rewşek e ku bûyer bi têkiliyek sedem-encamê ve girêdayî ne. Pir caran ew wekî ku mafên xwe ji nêrîna xerîdar bixwînin têne hesibandin. Ger xerîdar hin nirxan dîtibe, ew nikare nirxên ku berê bûn bibîne. Ew jixwe dest bi dîtina xwendina pêşgiran dike. Her tişt bi heman tiştî tê.
Sedem wekî modela hevgirtinê rêkûpêkek qismî ya bûyerên li ser serverê ye, ku tê de bûyerên ji hemî xerîdaran di heman rêzê de têne dîtin. Di vê rewşê de, Leonard û Penny.

Dawîn

Modela sêyemîn Eventual Consistency e. Ya ku bi tevahî pergalên belavkirî piştgirî dikin ev e, modela hindiktirîn ku bi tevahî watedar e. Wateya jêrîn ev e: gava ku em di daneyan de hin guhertin çêbibin, di demek de ew hevgirtî dibin.

Di demek wusa de ew tiştek nabêje, wekî din ew ê vegere Pêkhatina Derve - ew ê çîrokek bi tevahî cûda be. Lêbelê, ev modela pir populer, ya herî gelemperî ye. Ji hêla xwerû, hemî bikarhênerên pergalên belavkirî Consistency Eventual bikar tînin.

Ez dixwazim çend mînakên berawirdî bidim:

HighLoad ++, Mikhail Tyulenev (MongoDB): Hevrêziya sedem: ji teoriyê berbi pratîkê

Wateya van tîran çi ye?

  • Latency Her ku hêza hevgirtinê zêde dibe, ew ji ber sedemên diyar mezin dibe: hûn hewce ne ku bêtir tomar bikin, ji hemî mêvandar û girêkên ku beşdarî komê dibin piştrast bikin ku dane jixwe li wir in. Li gorî vê yekê, Eventual Consistency xwedan bersiva herî bilez e, ji ber ku li wir, wekî qaîdeyek, hûn dikarin wê jî bi bîr bînin û ev ê, di prensîbê de, bes be.
  • Berdestbûnî. Ger em vê yekê wekî şiyana pergalê ku di hebûna qutbûna torê, dabeşkirin, an celebek têkçûn de bersivê bide fam bikin, her ku modela hevgirtî kêm dibe, tolerasyona xeletiyê zêde dibe, ji ber ku ji me re bes e ku yek mêvandar bijî û di heman demê de. dem hin daneyan çêdike. Eventual Consistency di derheqê daneyê de qet tiştek garantî nake - ew dikare her tişt be.
  • Anomalî. Di heman demê de, bêguman, hejmara anomaliyan zêde dibe. Di Pêdengiya Hêzdar de divê ew hema hema qet tune bin, lê di Pêkheviya Eventual de ew dikarin her tişt bin. Pirs derdikeve holê: ger ku ew anomalî hebin çima mirov Lihevhatina Eventual hilbijêrin? Bersiv ev e ku modelên Pêdengiya Eventual sepandin in û anomalî hene, wek nimûne, di demek kurt de; mimkun e ku meriv sêrbazê bikar bîne ji bo xwendin û kêm-zêde daneyên hevgirtî bixwîne; Gelek caran gengaz e ku modelên hevgirtî yên bihêz bikar bînin. Di pratîkê de ev kar dike, û pir caran hejmara anomalî di demê de sînorkirî ye.

teorema CAP

Gava ku hûn peyvan hevgirtî, hebûna dibînin - çi tê bîra we? Rast e - teorema CAP! Niha ez dixwazim efsaneyê ji holê rakim... Ew ne ez im - ew Martin Kleppmann e, ku gotarek hêja, pirtûkek ecêb nivîsî.

HighLoad ++, Mikhail Tyulenev (MongoDB): Hevrêziya sedem: ji teoriyê berbi pratîkê

Teorema CAP prensîbek e ku di salên 2000-an de hatî formule kirin ku Tevhevî, Hebûn, Dabeşkirin: her duyan bigirin, û hûn nekarin sêyan hilbijêrin. Ew prensîbek diyar bû. Ew çend sal şûnda ji hêla Gilbert û Lynch ve wekî teorem hate îsbat kirin. Dûv re ev dest pê kir ku wekî mantra were bikar anîn - pergalên dest bi dabeşkirina CA, CP, AP û hwd kirin.

Ev teorem bi rastî ji bo rewşên jêrîn hate îsbat kirin... Yekem, Hebûn ne wekî nirxek domdar ji sifir heya sedan hate hesibandin (0 - pergal "mirî ye", 100 - zû bersivê dide; em bi vî rengî têne hesibandin) , lê wekî taybetmendiyek algorîtmê, ku garantî dike ku ji bo hemî darvekirinên xwe ew daneyan vedigerîne.

Di derbarê dema bersivdayînê de qet gotinek tune! Algorîtmek heye ku piştî 100 salan daneyan vedigerîne - algorîtmayek bêkêmasî ya berdest, ku beşek ji teorema CAP-ê ye.
Ya duyemîn: teorem ji bo guhertinên di nirxên heman keyê de hate îsbat kirin, tevî vê yekê ku ev guhertin ji nû ve mezin dibin. Ev tê vê wateyê ku di rastiyê de ew di pratîkê de nayên bikar anîn, ji ber ku modelên hevrêziya bûyerê, hevrêziya bihêz (dibe ku) cûda ne.

Ev hemû ji bo çi ye? Digel vê yekê, teorema CAP bi tam bi forma ku tê de hate îsbat kirin bi pratîkî nayê sepandin û kêm kêm tê bikar anîn. Di forma teorîk de, ew bi rengekî her tiştî sînor dike. Derket holê ku prensîbek diyarkirî ya ku bi intuitive rast e, lê bi gelemperî nehatiye îsbat kirin.

Lihevhatina sedemî modela herî xurt e

Tiştê ku niha diqewime ev e ku hûn dikarin her sê tiştan bistînin: Tevhevî, Hebûna bi karanîna Parçeyan. Bi taybetî, hevgirtina Sedemî modela hevgirtî ya herî bihêz e, ku hîn jî di hebûna Parçeyan de (şikestinên di torê de) dixebite. Ji ber vê yekê ew eleqeyek mezin e û ji ber vê yekê me dest pê kir.

HighLoad ++, Mikhail Tyulenev (MongoDB): Hevrêziya sedem: ji teoriyê berbi pratîkê

Ya yekem, ew karê pêşdebirên serîlêdanê hêsan dike. Bi taybetî, hebûna piştgirîyek mezin ji serverê: gava ku hemî tomarên ku di hundurê xerîdarek de çêdibin garantî dikin ku bi heman rêzê bigihîjin xerîdarek din. Ya duyemîn jî, ew li dijî dabeşan radiweste.

Kitchen Navxweyî MongoDB

Ji bîr mekin ku nîvro ye, em diçin mitbaxê. Ez ê di derbarê modela pergalê de ji we re bibêjim, ango, MongoDB çi ye ji bo kesên ku cara yekem li ser databasek wusa dibihîzin.

HighLoad ++, Mikhail Tyulenev (MongoDB): Hevrêziya sedem: ji teoriyê berbi pratîkê

HighLoad ++, Mikhail Tyulenev (MongoDB): Hevrêziya sedem: ji teoriyê berbi pratîkê

MongoDB (ji vir şûnde wekî "MongoDB" tê binav kirin) pergalek belavkirî ye ku pîvana horizontî piştgirî dike, ango şirînkirinê; û di nav her perçeyek de ew jî zêdebûniya daneyê piştgirî dike, ango dubarekirinê.

Parvekirin di MongoDB de (ne databasek têkildar) hevsengiya otomatîkî pêk tîne, ango, her berhevoka belgeyan (an jî "tablo" di warê daneya pêwendiyê de) li perçeyan tê dabeş kirin, û server bixweber wan di navbera perçeyan de digerîne.

Query Router, ku daxwazan belav dike, ji bo xerîdar hin xerîdar e ku ew bi navgîniya wî dixebite. Ew jixwe dizane ku li ku û kîjan daneyan tê de cih digire û hemî daxwazan berbi şiklê rast ve dibe.

Xalek din a girîng: MongoDB masterek yekane ye. Yek Seretayî heye - ew dikare tomarên ku bişkojkên ku tê de piştgirî dikin bigire. Hûn nikarin Multi-master binivîse.

Me serbestberdana 4.2 çêkir - tiştên nû yên balkêş li wir derketin. Bi taybetî, wan Lucene - lêger - ango java-ya îcrakar rasterast xistin nav Mongo, û li wir mimkun bû ku lêgerînan bi Lucene, mîna ku di Elastica de, pêk bînin.

Û wan hilberek nû çêkir - Charts, ew li ser Atlas (Ewrê xweya Mongo) jî heye. Tîrek Belaş a wan heye - hûn dikarin pê re bilîzin. Min bi rastî ji Charts hez kir - dîtbariya daneyê, pir xwerû.

Malzeme hevgirtina sedem

Min nêzîkî 230 gotarên ku li ser vê mijarê hatine weşandin - ji Leslie Lampert jimartin. Niha ji bîra xwe ez ê çend beşên van materyalan ji we re ragihînim.

HighLoad ++, Mikhail Tyulenev (MongoDB): Hevrêziya sedem: ji teoriyê berbi pratîkê

Hemî bi gotarek Leslie Lampert dest pê kir, ku di sala 1970-an de hatî nivîsandin. Wekî ku hûn dikarin bibînin, hin lêkolînên li ser vê mijarê hîn jî berdewam in. Naha domdariya Sedemî di pêwendiya bi pêşkeftina pergalên belavbûyî re eleqedar dibe.

Sînor

Çi qedexe hene? Bi rastî ev yek ji xalên sereke ye, ji ber ku sînorkirinên ku pergala hilberandinê ferz dike ji sînorkirinên ku di gotarên akademîk de hene pir cûda ne. Ew bi gelemperî pir sûnî ne.

HighLoad ++, Mikhail Tyulenev (MongoDB): Hevrêziya sedem: ji teoriyê berbi pratîkê

  • Ya yekem, "MongoDB" masterek yekane ye, wekî ku min berê jî got (ev pir hêsan dike).
  • Em di wê baweriyê de ne ku divê pergal nêzî 10 hezar şitleyan piştgirî bike. Em nikarin ti biryarên mîmarî yên ku dê bi eşkereyî vê nirxê sînordar bikin bidin.
  • Ewrek me heye, lê em texmîn dikin ku gava kesek binaryê dakêşîne, wê li ser laptopa xwe dimeşîne, divê hîn jî fersendê hebe, û her tişt baş dixebite.
  • Em tiştek difikirin ku Lêkolîn kêm kêm texmîn dike: xerîdarên derveyî dikarin her tiştê ku ew dixwazin bikin. MongoDB çavkaniya vekirî ye. Li gorî vê yekê, xerîdar dikarin ewqas jîr û hêrs bibin - ew dikarin bixwazin her tiştî bişkînin. Em texmîn dikin ku Feilorsên Bîzansî dibe ku bi eslê xwe bibin.
  • Ji bo xerîdarên derveyî yên ku li derveyî dorpêçê ne, tixûbek girîng heye: heke ev taybetmendî bêçalak be, wê hingê pêdivî ye ku kêmbûna performansê neyê dîtin.
  • Xalek din bi gelemperî antî-akademîk e: lihevhatina guhertoyên berê û yên pêşerojê. Divê ajokarên kevn piştgirî bidin nûvekirinên nû, û databas divê ajokarên kevn piştgirî bike.

Bi gelemperî, ev hemî sînoran ferz dike.

Pêkhateyên hevgirtina sedemî

Ez ê niha li ser hin pêkhateyan biaxivim. Ger em lihevhatina Sedemê bi gelemperî bifikirin, em dikarin blokan hilbijêrin. Me ji karên ku girêdayî blokek diyar in hilbijart: Şopandina girêdayîbûnê, bijartina demjimêran, ka ev demjimêr çawa dikarin bi hevûdu re bêne hevdeng kirin, û em çawa ewlehiyê peyda dikin - ev xêzek berbiçav a tiştê ku ez ê li ser biaxivim ev e:

HighLoad ++, Mikhail Tyulenev (MongoDB): Hevrêziya sedem: ji teoriyê berbi pratîkê

Şopandina Girêdana Tev

Çima hewce ye? Ji ber vê yekê dema ku dane têne dubare kirin, her tomar, her guhartina daneyê agahdarî li ser kîjan guhertinan ve girêdayî ye. Guhertina yekem û nerast ev e ku gava her peyamek ku tomarek dihewîne agahdariya li ser peyamên berê hene:

HighLoad ++, Mikhail Tyulenev (MongoDB): Hevrêziya sedem: ji teoriyê berbi pratîkê

Di vê nimûneyê de, jimareya ku di kelekên çîp de ye, hejmarên tomar e. Carinan ev tomarên bi nirxan jî bi tevahî têne veguheztin, carinan hin guherto têne veguheztin. Xeta jêrîn ev e ku her guhertinek di derheqê ya berê de agahdarî vedihewîne (bê guman van hemîyan di hundurê xwe de hildigire).

Çima me biryar da ku em vê rêbazê (şopandina tevahî) bikar neynin? Eşkere ye, ji ber ku ev nêzîkatî ne pratîkî ye: her guhertinek li tora civakî bi hemî guhertinên berê yên wê tora civakî ve girêdayî ye, di her nûvekirinê de, bêje, Facebook an VKontakte veguhezîne. Digel vê yekê, li ser Şopandina Pêwendiya Tevahî gelek lêkolîn hene - ev torên pêş-civakî ne; ji bo hin rewşan ew bi rastî dixebite.

Şopandina Pêwendiya Eşkere

Ya din bi sînortir e. Veguheztina agahdarî jî li vir tête hesibandin, lê tenê ya ku bi eşkere girêdayî ye. Ya ku bi çi ve girêdayî ye, wekî qaîdeyek, ji hêla Serlêdanê ve tê destnîşankirin. Dema ku dane têne dubare kirin, pirs tenê gava ku girêdanên berê têr bûne, ango têne xuyang kirin, bersivan vedigerîne. Ev cewhera ku çawa lihevhatina Sedemî dixebite ye.

HighLoad ++, Mikhail Tyulenev (MongoDB): Hevrêziya sedem: ji teoriyê berbi pratîkê

Ew dibîne ku tomar 5 bi tomarên 1, 2, 3, 4 ve girêdayî ye - li gorî vê yekê, ew li bendê ye berî ku xerîdar bigihîje guheztinên ku bi biryara gihîştina Penny hatine çêkirin, dema ku hemî guhertinên berê berê di databasê de derbas bûne.

Ev jî ne li gorî me ye, ji ber ku hîn jî pir agahdarî heye, û ew ê tiştan hêdî bike. Nêzîkbûneke din jî heye...

Saet Lamport

Pir pîr in. Demjimêra Lamport tê vê wateyê ku ev girêdan di nav fonksiyonek skalar de têne qewirandin, ku jê re Saet Lamport tê gotin.

Fonksiyonek scalar hin jimarek razber e. Pir caran jê re dema mentiqî tê gotin. Bi her bûyerê re ev hejmar zêde dibe. Counter, ku niha ji pêvajoyê re tê zanîn, her peyamê dişîne. Eşkere ye ku pêvajo dikarin ji hevdeng bin, ew dikarin demên bi tevahî cûda hebin. Digel vê yekê, pergal bi awayek demjimêr bi peyamên weha re hevseng dike. Di vê rewşê de çi dibe?

Min ew pişka mezin kir du du da ku ez eşkere bikim: Heval dikarin di girêkek de, ku perçeyek berhevokê vedihewîne, û Feed dikare di girêkek din de, ku perçeyek ji vê berhevokê vedihewîne, bijî. Eşkere ye ku ew çawa dikarin ji rêzê derkevin? Pêşîn Feed dê bêje: "Replicated", û paşê Heval. Ger pergal hindek garantiyek peyda neke ku Feed neyê xuyang kirin heya ku girêdayiyên Friends di berhevoka Friends de jî neyên radest kirin, wê hingê em ê tam bibin xwediyê rewşa ku min behs kir.

Hûn dibînin ka wextê dijberî li ser Feed bi mentiqî çawa zêde dibe:

HighLoad ++, Mikhail Tyulenev (MongoDB): Hevrêziya sedem: ji teoriyê berbi pratîkê

Ji ber vê yekê taybetmendiya sereke ya vê Saeta Lamport û hevahengiya Sedemî (bi Saeta Lamport ve hatî ravekirin) ev e: heke me Bûyerên A û B hebin, û Bûyera B bi Bûyera A* ve girêdayî be, wê hingê ev tê wê wateyê ku Dema Mantiqî ya Bûyera A ji kêmtirî Demê Logical ji Bûyera B.

* Carinan ew jî dibêjin ku A berî B qewimî, ango A berî B qewimî - ev têkiliyek diyar e ku bi qismî tevaya bûyerên ku bi gelemperî qewimîne ferman dide.

Berovajiyê wê ne rast e. Ev bi rastî yek ji dezawantajên sereke yên Lamport Clock - fermana qismî ye. Têgînek li ser bûyerên hevdem heye, ango bûyerên ku ne (A berî B bûye) û ne jî (A berî B bûye). Nimûneyek dê lêzêdekirina paralel a Leonard ya kesek din wekî heval be (tewra ne Leonard, lê Sheldon, mînakî).
Ev taybetmendiya ku bi gelemperî dema ku bi demjimêrên Lamport re dixebitin tê bikar anîn: ew bi taybetî li fonksiyonê dinêrin û ji vê yekê ew encam didin ku dibe ku ev bûyer girêdayî bin. Ji ber ku yek rê rast e: eger Demê LogicalTime A ji LogicalTime B kêmtir be, hingê B nikare berî A çêbibe; û heke bêtir, hingê dibe ku.

Vector Clock

Pêşkeftina mentiqî ya demjimêra Lamport Saeta Vektor e. Ew ji hev cûda dibin ku her girêkek ku li vir e demjimêra xweya cihê vedihewîne, û ew wekî vektor têne veguheztin.
Di vê rewşê de, hûn dibînin ku îndeksa sifirê ya vektorê ji bo Feed berpirsiyar e, û navnîşa yekem a vektorê ji bo Hevalan e (her yek ji van girêkan). Û naha ew ê zêde bibin: îndeksa sifir ya "Xwarinê" dema nivîsandinê zêde dibe - 1, 2, 3:

HighLoad ++, Mikhail Tyulenev (MongoDB): Hevrêziya sedem: ji teoriyê berbi pratîkê

Çima Saeta Vektor çêtir e? Ji ber ku ew dihêle hûn fêr bibin ka kîjan bûyer hevdem in û kengê ew li ser girêkên cihê diqewimin. Ev ji bo pergalek parvekirinê ya mîna MongoDB pir girîng e. Lêbelê, me ev hilbijart, her çend ew tiştek ecêb e, û ew pir baş dixebite, û dibe ku ew ê ji me re xweş be...

Ger 10 hezar şûşeyên me hebin, em nekarin 10 hezar pêkhateyan veguhezînin, tewra ku em wê tevlihev bikin an tiştek din derxin holê - barkêş dê dîsa jî çend caran ji qebareya tevahiya vê vektorê piçûktir be. Ji ber vê yekê jî me dil û diranên xwe diqeliqand, me dev ji vê nêzîkatiyê berda û derbasî aliyê din bû.

Spanner TrueTime. Saeta atomî

Min got ku dê çîrokek li ser Spanner hebe. Ev tiştek xweş e, rasterast ji sedsala XNUMX-an: demjimêrên atomî, hevdemkirina GPS.

Fikir çi ye? "Spanner" pergalek Google-ê ye ku di van demên dawî de ji mirovan re jî peyda bû (wan SQL lê zêde kir). Her danûstendina li wir hin mohra dem heye. Ji ber ku dem hevdemkirî ye *, her bûyerek dikare demek taybetî were destnîşan kirin - demjimêrên atomî demek li bendê ne, piştî ku demek cûda garantî ye ku "biqewime".

HighLoad ++, Mikhail Tyulenev (MongoDB): Hevrêziya sedem: ji teoriyê berbi pratîkê

Bi vî rengî, bi tenê bi nivîsandina databasê û li benda hin demsalan, Serialîzasyona bûyerê bixweber tê garantî kirin. Ew xwedan modela Pêdengiya herî bihêz e ku di prensîbê de dikare were xeyal kirin - ew Hevrêziya Derve ye.

* Pirsgirêka sereke ya demjimêrên Lampart ev e - ew çu carî li ser pergalên belavkirî hevdem nabin. Ew dikarin ji hev cuda bibin; Tewra bi NTP-ê re jî, ew hîn jî pir baş naxebitin. "Spanner" xwedan demjimêrek atomî ye û hevdengkirin, wusa dixuye, mîkro çirkeyan e.

Çima me hilbijart? Em nahesibînin ku bikarhênerên me demjimêrek atomî ya çêkirî heye. Gava ku ew xuya bibin, ku di her laptopê de têne çêkirin, dê celebek hevdemkirina GPS-ya super xweş hebe - wê hingê erê... Lê heya niha ya çêtirîn ku mimkun e Amazon e, Stasyonên Bingehê - ji bo fanatîkan... Ji ber vê yekê me demjimêrên din bikar anîn. .

Saeta Hybrid

Ev bi rastî ya ku di MongoDB-ê de gava ku domdariya Sedemî misoger dike dişoxilîne. Ew çawa hybrid in? Hybrid nirxek skalar e, lê du beşan hene:

HighLoad ++, Mikhail Tyulenev (MongoDB): Hevrêziya sedem: ji teoriyê berbi pratîkê

  • Ya yekem serdema Unix e (çend saniye ji "destpêka cîhana komputerê" re derbas bûne).
  • Ya duyemîn hin zêdebûnek e, di heman demê de navgînek 32-bit bê îmze ye.

Bi rastî jî ev e. Ev nêzîkatî heye: beşa ku berpirsiyariya demê ye her dem bi demjimêrê re hevdem e; her gava ku nûvekirinek çêdibe, ev beş bi demjimêrê re tê hevdem kirin û derdikeve holê ku dem her gav kêm-zêde rast e, û zêdebûn dihêle hûn bûyerên ku di heman demê de qewimîne ji hev cihê bikin.

Çima ev ji bo MongoDB girîng e? Ji ber ku ew dihêle hûn di demek diyarkirî de cûreyek xwaringehên paşverû çêbikin, ango, bûyer ji hêla demê ve tête navnîş kirin. Dema ku hin bûyer hewce ne ev girîng e; Ji bo databasek, bûyer guhertinên di databasê de ne ku di hin navberên demê de qewimîne.

Ez ê sedema herî girîng tenê ji we re bibêjim (ji kerema xwe, ji kesî re nebêje)! Me ev yek kir ji ber ku ev e ya ku daneyên organîzekirî, pêvekirî di MongoDB OpLog de xuya dike. OpLog avahiyek daneyê ye ku bi tevahî hemî guheztinên databasê vedihewîne: ew pêşî diçin OpLog, û dûv re jî di rewşek ku ew dîrokek an şûşeyek dubarekirî ye, li Storage bixwe têne sepandin.

Sedema sereke ev bû. Dîsa jî, ji bo pêşvebirina databasê hewcedariyên pratîkî jî hene, ku tê vê wateyê ku divê ew sade be - kodek piçûk, çend tiştên şikestî yên ku hewce ne ji nû ve werin nivîsandin û ceribandin. Rastiya ku oplogên me ji hêla demjimêrên hybrid ve hatine navnîş kirin gelek alîkarî kir û hişt ku em bijartina rast bikin. Ew bi rastî drav da û bi rengek sêrbaz li ser prototîpa yekem xebitî. Ew pir xweş bû!

Hevdemkirina demjimêrê

Di wêjeya zanistî de gelek rêbazên hevdemkirinê hene. Ez behsa hevdemkirinê dikim dema ku me du şûşeyên cûda hene. Ger yek kopiyek hebe, hewcedariya hevdemkirinê tune: ev "masterek yek" e; me OpLog heye, ku tê de hemî guhertin dikevin - di vê rewşê de, her tişt jixwe di "Oplog"-ê de bi rêzek rêzkirî ye. Lê heke me du şaxên cûda hebin, hevdemkirina demê li vir girîng e. Li vir demjimêra vektorê bêtir alîkarî kir! Lê em wan nînin.

HighLoad ++, Mikhail Tyulenev (MongoDB): Hevrêziya sedem: ji teoriyê berbi pratîkê

Ya duyemîn guncan e - ev "Hartbeats" e. Veguheztina hin îşaretên ku her yekîneya demê çêdibin mimkun e. Lê Lêdanên Dil pir hêdî ne, em nikarin derengiyê ji muwekîlê xwe re peyda bikin.

Wextê rast, bê guman, tiştek ecêb e. Lê, dîsa, ev belkî pêşeroj e... Her çend ew jixwe di Atlasê de dikare were kirin, jixwe senkronîzatorên demê yên bilez "Amazon" hene. Lê ew ê ji her kesî re nebe.

Gotegot dema ku hemî peyam dema xwe vedigirin. Ya ku em bikar tînin hema hema ev e. Her peyamek di navbera nokan de, ajokerek, rêwerek girê daneyê, bê guman her tişt ji bo MongoDB celebek hêmanek e, pêkhateyek databasê ye ku demjimêrek ku dimeşe vedihewîne. Wateya wan a dema hîbrîd li her derê heye, ew tê veguheztin. 64 bit? Ev destûrê dide, ev gengaz e.

Çawa hemî bi hev re dixebite?

Li vir ez li yek kopiyek dinêrim da ku wê hinekî hêsantir bikim. Seretayî û Duyemîn hene. Duyemîn dubare dike û her gav bi Seretayî re bi tevahî nayê hevdem kirin.

Bi nirxek demkî ve têketinek di "Primery" de pêk tê. Ev insert jimara navxweyî bi 11 zêde dike, heke ev herî zêde be. An jî heke nirxên demjimêrê mezintir in ew ê nirxên demjimêrê kontrol bike û bi demjimêrê re hevdeng bike. Ev dihêle hûn li gorî demê xwe birêxistin bikin.

Piştî ku ew tomar dike, demek girîng diqewime. Saet di "MongoDB" de ye û tenê di rewşa nivîsandina "Oplog" de zêde dibe. Ev bûyera ku rewşa pergalê diguherîne ye. Di hemî gotarên klasîk de, bûyerek tê hesibandin dema ku peyamek li girêkek dikeve: peyam hat, ku tê vê wateyê ku pergalê rewşa xwe guherandiye.

Ev ji ber wê yekê ye ku di dema lêkolînê de bi tevahî ne diyar e ku dê ev peyam çawa were şîrove kirin. Em bi teqez dizanin ku heke ew di "Oplog" de neyê xuyang kirin, wê hingê ew ê bi ti awayî neyê şîrove kirin, û guhertinek di rewşa pergalê de tenê têketinek di "Oplog" de ye. Ev ji me re her tiştî hêsan dike: model wê hêsan dike, û dihêle ku em wê di nav yek kopiyek de, û gelek tiştên din ên bikêr de birêxistin bikin.

Nirxa ku berê li "Oplog"ê hatî nivîsandin tê vegerandin - em dizanin ku "Oplog" jixwe vê nirxê dihewîne, û dema wê 12 ye. Naha, bêje, xwendin ji girêkek din (Dêyemîn) dest pê dike, û ew piştîClusterTime di peyam. Ew dibêje: "Ez her tiştê ku herî kêm piştî 12 an diwanzdeh de qewimîn hewce dikim" (li wêneya jorîn binêre).

Ya ku jê re Sedemek hevgirtî (CAT) tê gotin e. Di teoriyê de têgehek wusa heye ku ev perçeyek dem e, ku bi serê xwe hevgirtî ye. Di vê rewşê de, em dikarin bêjin ku ev rewşa pergala ku di dema 12 de hate dîtin.

Naha li vir hîn tiştek tune, ji ber ku bi vî rengî rewşa ku hûn hewceyê Duyemîn hewce ne ku daneya ji Seretayî dubare bikin, simule dike. Ew li bendê ye... Û naha dane hatine - ew van nirxan vedigerîne.

HighLoad ++, Mikhail Tyulenev (MongoDB): Hevrêziya sedem: ji teoriyê berbi pratîkê

Ew hema hema ew çawa dixebite. Hema hema.

Wateya "hema" çi ye? Ka em bihesibînin ku kesek heye ku xwendiye û fêm kiriye ku ev hemî çawa dixebite. Min fêm kir ku her carê ku ClusterTime çêdibe, ew demjimêra mentiqî ya hundurîn nûve dike, û dûv re têketina paşîn yek yek zêde dibe. Ev fonksiyon 20 rêzan digire. Em bibêjin ku ev kes hejmara herî mezin a 64-bit, kêm yek, radigihîne.

Çima "minus yek"? Ji ber ku demjimêra hundurîn dê di vê nirxê de were veguheztin (eşkere, ev ji dema niha ya herî gengaz û mezintir e), wê hingê têketinek dê di "Oplog" de çêbibe, û demjimêr dê ji hêla yekîneyek din ve were zêdekirin - û dê berê nirxek herî zêde be (bi tenê hemî yekîne hene, cîhek din tune ku biçe) , xalên nenas).

Eşkere ye ku piştî vê sîstemê bi temamî ji bo tiştekî bêdestûr dibe. Ew tenê dikare were rakirin û paqij kirin - gelek xebata destan. Hebûna tevahî:

HighLoad ++, Mikhail Tyulenev (MongoDB): Hevrêziya sedem: ji teoriyê berbi pratîkê

Wekî din, heke ev yek li cîhek din were dubare kirin, wê hingê tevahiya komê bi hêsanî têk diçe. Rewşek bi tevahî nayê pejirandin ku her kes dikare pir zû û bi hêsanî organîze bike! Ji ber vê yekê, me ev gav wekî yek ji girîngtirîn nirxandin. Çawa pêşî lê bigire?

Riya me îmzekirina clusterTime ye

Bi vî rengî di peyamê de (berî nivîsa şîn) tê veguheztin. Lê me di heman demê de dest bi çêkirina îmzeyek jî kir (nivîsa şîn):

HighLoad ++, Mikhail Tyulenev (MongoDB): Hevrêziya sedem: ji teoriyê berbi pratîkê

Îmze ji hêla mifteyek ku di hundurê databasê de, di hundurê perimeterek ewledar de tête hilberandin; xwe tê çêkirin û nûvekirin (bikarhêner li ser wê tiştek nabînin). Hashek çêdibe, û her peyam dema ku hatî çêkirin û pejirandin tête îmze kirin.
Dibe ku pirs di hişê mirovan de derkeve: "Ev çiqas tiştan hêdî dike?" Min ji we re got ku divê ew zû bixebite, nemaze di nebûna vê taybetmendiyê de.

Wateya wê çi ye ku meriv lihevhatina Sedemî di vê rewşê de bikar bîne? Ev e ku pîvana afterClusterTime nîşan bide. Bêyî vê, ew ê bi her awayî nirxan derbas bike. Gossiping, ji ​​guhertoya 3.6-ê dest pê dike, her gav dixebite.

Ger em dev ji nifşa domdar a îmzeyan berdin, di nebûna taybetmendiyek ku li gorî nêzîkatî û hewcedariyên me nebe jî dê pergalê hêdî bike. Îcar me çi kir?

Bi lez bikin!

Tiştek pir hêsan e, lê hîle balkêş e - ez ê parve bikim, dibe ku kesek eleqedar bibe.
Hashek me heye ku daneyên îmzekirî hilîne. Hemî data bi cache re derbas dibe. Cache ne dema taybetî, lê Rêzeyê îmze dike. Dema ku hin nirx digihîje, em Rêzek çêdikin, 16 bitên paşîn mask dikin, û em vê nirxê îmze dikin:

HighLoad ++, Mikhail Tyulenev (MongoDB): Hevrêziya sedem: ji teoriyê berbi pratîkê

Bi wergirtina îmzayek wiha, em 65 hezar carî (bi nisbetî) pergalê lez dikin. Ew pir baş dixebite: gava ku me ceribandin pêk anî, dema ku me nûvekirinek rêzdar hebû bi rastî 10 hezar carî kêm bû. Eşkere ye ku dema ew li hev bikin, ev yek bi kêr nayê. Lê di pir rewşên pratîk de ew kar dike. Kombûna îmzeya Range ligel îmzeyê pirsgirêka ewlehiyê çareser kir.

Em çi fêr bûne?

Dersên ku me ji vê yekê derxistin:

  • Divê em materyal, çîrok, gotaran bixwînin, ji ber ku gelek tiştên me yên balkêş hene. Dema ku em li ser hin taybetmendiyan dixebitin (nemaze naha, dema ku me danûstendin, hwd.), pêdivî ye ku em bixwînin û fam bikin. Ew dem digire, lê bi rastî ew pir bikêr e ji ber ku ew eşkere dike ku em li ku ne. Me tiştek nû nedît - me tenê malzemeyên xwe hilda.

    Bi gelemperî, dema ku konferansek akademîk heye (mînak Sigmon) di ramanê de cûdahiyek heye - her kes li ser ramanên nû disekine. Di derbarê algorîtmaya me de çi nû ye? Li vir bi taybetî tiştek nû tune. Nûbûn bi awayê ku me nêzîkatiyên heyî bi hev ve girêdide ye. Ji ber vê yekê, yekem tiştê ku xwendina klasîkan e, bi Lampart dest pê dike.

  • Di hilberînê de, pêdivî bi tevahî cûda ne. Ez pê bawer im ku gelek ji we di valahiyek razber de ne bi databasên "ferîkî" re rû bi rû ne, lê bi tiştên normal, rastîn ên ku bi hebûna, derengbûn û tolerasyona xeletiyê re pirsgirêkên wan hene.
  • Tişta paşîn ev e ku me neçar ma ku li ramanên cihêreng binihêrin û çend gotarên bi tevahî cihêreng di yek nêzîkatiyê de, bi hev re bikin yek. Fikra îmzekirinê, wek nimûne, bi gelemperî ji gotarek hat ku protokola Paxos dihesibîne, ku ji bo Failorsên ne-Bîzansî di hundurê protokola destûrnameyê de ye, ji bo yên Bîzansî - li derveyî protokola destûrnameyê ye... Bi gelemperî, ev tiştê ku em e. bi dawî kirin.

    Li vir bi tevahî tiştek nû tune! Lê gava ku me hemûyan bi hev re tevlihev kir... Heman tişt e ku meriv bibêje ku reçeteya seleteya Olivier pûç e, ji ber ku hêk, mayonez û xiyar berê hatine îcadkirin... Heman çîrok e.

HighLoad ++, Mikhail Tyulenev (MongoDB): Hevrêziya sedem: ji teoriyê berbi pratîkê

Ez ê bi vê biqedînim. Sipas ji were!

Pirsên

Pirsa ji temaşevanan (li vir wekî B tê binav kirin): – Spas, Mikhail, ji bo raporê! Mijara li ser demê balkêş e. Hûn Gossiping bikar tînin. Wan got ku her kes dema xwe heye, her kes dema xwe ya herêmî dizane. Li gorî ku ez jê fêm dikim, ajokarek me heye - dikare bi ajokaran re gelek xerîdar hebin, plansazkerên pirsiyariyê jî, şikestî jî... Û heke ji nişka ve cûdahiyek me çêbibe pergal wê bi çi ve biçe: kesek biryar dide ku ew ji bo deqîqeyek li pêş, kesek deqîqeyek li paş? Em ê bi kû ve bibin?

MT: - Pirsa pir mezin e! Min tenê xwest ku ez li ser şikeftan biaxivim. Ger ez pirsê rast fehm bikim, rewşa me ya jêrîn heye: şûşa 1 û 2 heye, xwendin ji van her du beşan pêk tê - nakokiyek wan heye, bi hev re nakevin têkiliyê, ji ber ku dema ku ew dizanin cûda ye. nemaze dema ku ew di oplogan de hene.
Ka em bibêjin ku şûşeya 1 mîlyonek tomar çêkir, şûşeya 2 qet tiştek nekir, û daxwaz gihîşt du şûşeyan. Û ya yekem piştî ClusterTime ji mîlyonek zêdetir heye. Di rewşek wusa de, wekî ku min diyar kir, şûşeya 2 qet carî bersiv nade.

In: - Min dixwest bizanim ka ew çawa hevdem dikin û yek dem mentiqî hilbijêrin?

MT: - Hevdengkirina pir hêsan. Shard, gava ku piştîClusterTime tê ba wî û ew di "Oplog"ê de dem nabîne, nayê pejirandin dest pê dike. Yanî bi destên xwe dema xwe bi vê nirxê bilind dike. Ev tê wê wateyê ku ti bûyerek li gorî vê daxwazê ​​tune. Ew vê bûyerê bi awayekî sûnî diafirîne û bi vî awayî dibe Sedem Lihevhatî.

In: – Ger piştî vê yekê hin bûyerên din werin serê wî ku di nav torê de winda bûne?

MT: - Shard bi vî rengî hatî sêwirandin ku ew careke din neyên, ji ber ku ew masterek yekane ye. Ger wî berê xwe îmze kiribe, wê hingê ew ê neyên, lê dê paşê werin. Ne pêkan e ku tiştek li deverekê asê bibe, dûv re ew nenivîsîne, û dûv re ev bûyer digihîjin - û hevgirtina Sedemê têk diçe. Gava ku ew nenivîse, divê ew hemî werin paş (ew ê li benda wan bimîne).

HighLoad ++, Mikhail Tyulenev (MongoDB): Hevrêziya sedem: ji teoriyê berbi pratîkê

In: - Li ser doran çend pirsên min hene. Lihevhatina sedemî destnîşan dike ku rêzek taybetî ya çalakiyan heye ku divê bêne kirin. Ger yek ji pakêtên me winda bibe çi dibe? Va ye 10, 11... 12 wenda bûye, û her kes li bendê ye ku ew rast bibe. Û ji nişka ve erebeya me mir, em nikarin tiştekî bikin. Ma dirêjahiya herî zêde ya dorê heye ku beriya darvekirinê kom dibe? Çi têkçûnek kujer çêdibe dema yek dewletek winda bibe? Wekî din, heke em binivîsin ku rewşek berê heye, wê hingê divê em bi rengekî jê dest pê bikin? Lê wan ew dûr nexist!

MT: - Her weha pirsek mezin! Em çi dikin? MongoDB xwedan têgeha quorum dinivîse, quorum dixwîne. Di kîjan rewşan de peyamek dikare winda bibe? Gava ku nivîsek ne hindik be an dema ku xwendinek ne hindik be (dibe ku hin celeb zibil jî bisekine).
Di derbarê hevgirtina Sedemê de, ceribandinek mezin a ceribandinê hate kirin, ku encama wê ew bû ku di rewşek ku nivîsandin û xwendin ne hindik be, binpêkirina hevgirtina Sedemê çêdibe. Bi rastî ya ku hûn dibêjin!

Pêşniyara me: Dema ku hevgirtina Sedem bikar bînin herî kêm xwendina quorum bikar bînin. Di vê rewşê de, tiştek winda nabe, her çend tomara quorum winda bibe jî... Ev rewşek ortogonal e: ger bikarhêner naxwaze dane winda bibin, pêdivî ye ku ew tomarek quorum bikar bîne. Pêkhatina sedemî domdariyê garantî nake. Duristbûn ji hêla dubarekirinê û makîneyên ku bi dubarekirinê ve girêdayî ne têne garantî kirin.

In: - Gava ku em mînakek ku ji me re parvekirinê çêdike (bi rêzê ne master, lê xulam), ew xwe dispêre dema Unix-ê ya makîneya xwe an jî dema "master"; Ma ew ji bo cara yekem an demkî hevdem dike?

MT: - Ez ê niha zelal bikim. Shard (ango dabeşkirina horizontal) - li wir her gav Seretayîyek heye. Û pişkek dikare "master" hebe û dibe ku replica hene. Lê şax her gav tomarkirinê piştgirî dike, ji ber ku pêdivî ye ku ew hin doman piştgirî bike (şaş xwedan Seretayî ye).

In: - Ango her tişt bi tenê bi "master" ve girêdayî ye? Ma dema masterê her dem tê bikar anîn?

MT: - Erê. Hûn dikarin bi mecazî bibêjin: dema ku têketinek di "master", "Oplog" de çêdibe, demjimêr dihejîne.

In: - Xerîdarek me heye ku bi hev ve girêdide û ne hewce ye ku di derheqê demê de tiştek bizanibe?

MT: - Ne hewce ye ku tu tiştek bizanibî! Ger em biaxivin ka ew çawa li ser xerîdar dixebite: gava ku xerîdar bixwaze hevrêziya Causal bikar bîne, ew hewce ye ku rûniştek veke. Naha her tişt li wir e: danûstandinên di danişînê de, û wergirtina mafan... Danişîn rêzkirina bûyerên mentiqî ye ku bi xerîdar re diqewimin.

Ger ew vê danişînê veke û li wir bêje ku ew hevrêziya Sedemî dixwaze (heke danişîn ji hêla xwerû ve hevgirtina Sedemê piştgirî dike), her tişt bixweber dixebite. Ajokar vê carê bi bîr tîne û dema ku peyamek nû distîne wê zêde dike. Ew bi bîr tîne ku ya berê çi bersiv ji servera ku dane vegerandiye vedigere. Daxwaza paşîn dê afterCluster ("dem ji vê mezintir") hebe.

Xerîdar ne hewce ye ku bi tevahî tiştek zanibe! Ev ji bo wî bi tevahî nezelal e. Ger mirov van taybetmendiyan bikar bînin, ew dikarin çi bikin? Pêşîn, hûn dikarin bi ewlehî rêzikên duyemîn bixwînin: hûn dikarin ji Seretayî re binivîsin û ji navînên cografî yên dubarekirî bixwînin û pê ewle bin ku ew dixebite. Di heman demê de, danişînên ku li ser Seretayî hatine tomar kirin jî dikarin ji Duyemîn re werin veguheztin, ango hûn dikarin ne yek danişînê, lê çendan bikar bînin.

In: - Qatek nû ya zanistiya Hesabkirinê - CRDT (Cûreyên Daneyên Berhevkirî yên Bê Pevçûn) - bi mijara domdariya Eventual re bi tundî ve girêdayî ye. Ma we fikir kir ku van celeb daneyan di databasê de yek bikin û hûn dikarin li ser wê çi bibêjin?

MT: - Pirsa baş! CRDT ji bo nakokiyên nivîsandinê watedar e: di MongoDB de, yek master.

In: – Pirseke min ji devokan heye. Di cîhana rastîn de, rewşên weha yên Jesuitical hene dema ku Têkçûna Bîzansê diqewime, û mirovên xerab ên di hundurê perîvaniya parastî de dest pê dikin ku protokolê bixin, bi rengek taybetî pakêtên esnafê bişînin?

HighLoad ++, Mikhail Tyulenev (MongoDB): Hevrêziya sedem: ji teoriyê berbi pratîkê

MT: – Mirovên xerab ên di hundirê derdor de mîna hespê Troya ne! Mirovên xerab ên di hundurê perimeterê de dikarin gelek tiştên xirab bikin.

In: – Eşkere ye ku derketina kunek di serverê de, ku tê de hûn dikarin zozanek fîlan têxin nav zozanan û tevahiya komê heta hetayê hilweşînin... Ji bo vegerandina bi destan wê dem lazim e... Ev, bi nermî, ev e. qelp. Ji hêla din ve, ev balkêş e: di jiyana rast de, di pratîkê de, rewş hene ku bi xwezayî êrîşên navxweyî yên wekhev çêdibin?

MT: - Ji ber ku ez kêm caran di jiyana rast de bi binpêkirinên ewlehiyê re rû bi rû ne, ez nikarim bibêjim ka ew diqewimin. Lê eger em behsa felsefeya geşepêdanê bikin, em weha dihizirin: dorhêleke me heye ku ji kesên ku ewlekarîyê dikin peyda dike - ev kelehek e, dîwarek e; û di hundurê perimeterê de hûn dikarin her tiştê ku hûn dixwazin bikin. Eşkere ye ku bikarhênerên bi kapasîteya tenê dîtinê hene, û bikarhênerên ku jêhatîbûna pelrêçê jêbirin hene.

Li gorî mafan, zirara ku bikarhêner dikarin bikin mişk be, an jî fîl be. Eşkere ye ku bikarhênerek bi tevahî mafên xwe dikare her tiştî bike. Bikarhênerek bi mafên tixûbdar dikare zirarek girîng kêm bike. Bi taybetî jî nikare sîstemê bişkîne.

In: - Di perimeterê parastî de, kesek hewl da ku protokolên neçaverêkirî ji serverê re biafirîne da ku serverê bi tevahî hilweşîne, û heke hûn bextewar bin, tevahiya komê... Ma ew qet ew "baş" dibe?

MT: "Min qet tiştên wiha nebihîstiye." Rastiya ku hûn dikarin serverek bi vî rengî têk bibin ne veşartî ye. Di hundurê de têk neçe, ji protokolê ye, bikarhênerek destûrdar e ku dikare di peyamê de tiştek wusa binivîsîne... Bi rastî, ew ne gengaz e, ji ber ku ew ê hîn jî were verast kirin. Mimkun e ku meriv vê piştrastkirinê ji bo bikarhênerên ku wê naxwazin neçalak bike - wê hingê ew pirsgirêka wan e; wan, bi qasê gotinê, dîwar bi xwe xera kirine û hûn dikarin fîlekî têxin hundurê wê, ku dê biperçiqîne... Lê bi gelemperî, hûn dikarin cil û bergên tamîrkeran li xwe bikin, werin û wî derxin!

In: - Spas ji bo raporê. Sergey (Yandex). Di Mong de domdarek heye ku jimara endamên dengdêr di Replica Set de sînordar dike, û ev domdar 7 (heft) e. Çima ev berdewam e? Çima ev ne çend pîvanek e?

MT: - Me Setên Replica yên bi 40 nod hene. Her tim piranî heye. Ez nizanim kîjan versiyon...

In: - Di Replica Set de hûn dikarin endamên bê deng bimeşînin, lê herî zêde 7 endamên dengdêr hene. Em çawa dikarin di vê rewşê de ji sekinandinê rizgar bibin ger Set Replica me li 3 navendên daneyê belav bibe? Navendek daneyê dikare bi hêsanî vebike, û makîneyek din dikare derkeve.

MT: – Ev jixwe piçekî li derveyî çarçoveya raporê ye. Ev pirsek giştî ye. Dibe ku ez ji we re li ser wê paşê bêjim.

HighLoad ++, Mikhail Tyulenev (MongoDB): Hevrêziya sedem: ji teoriyê berbi pratîkê

Hin reklam 🙂

Spas ji bo ku hûn bi me re bimînin. Ma hûn ji gotarên me hez dikin? Ma hûn dixwazin naveroka balkêştir bibînin? Piştgiriya me bikin bi danîna fermanek an pêşniyarkirina hevalan, ewr VPS ji bo pêşdebiran ji 4.99 $, analogek bêhempa ya pêşkêşkerên asta têketinê, ku ji hêla me ve ji bo we hatî vedîtin: Tevahiya rastiyê di derbarê VPS (KVM) E5-2697 v3 (6 Cores) 10 GB DDR4 480 GB SSD 1Gbps ji 19 $ an çawa serverek parve dike? (bi RAID1 û RAID10, heta 24 core û heya 40 GB DDR4 peyda dibe).

Dell R730xd 2x erzantir li navenda daneya Equinix Tier IV li Amsterdam? Tenê li vir 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV ji 199$ li Hollanda! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - ji $99! Li ser bixwînin Meriv çawa pargîdaniya binesaziyê ava dike. pola bi karanîna serverên Dell R730xd E5-2650 v4 bi nirxek 9000 euro ji bo quruşek?

Source: www.habr.com

Add a comment