NewSQL = NoSQL+ACID

NewSQL = NoSQL+ACID
Kuze kube kutshanje kwi-Odnoklassniki, malunga ne-50 TB yedatha eqhutywe ngexesha langempela igcinwe kwi-SQL Server. Ngomthamo onjalo, phantse akunakwenzeka ukubonelela ngokukhawuleza nangokuthembekileyo, kunye nokufikelela kwiziko ledatha elinokunyamezela iimpazamo usebenzisa i-SQL DBMS. Ngokuqhelekileyo kwiimeko ezinjalo enye yeevenkile ze-NoSQL isetyenziswa, kodwa akusiyo yonke into enokuthi idluliselwe kwi-NoSQL: amanye amaqumrhu afuna iziqinisekiso ze-ACID.

Oku kwasikhokelela ekusebenziseni ukugcinwa kweNewSQL, oko kukuthi, i-DBMS enikezela ukunyamezela impazamo, ukulinganisa kunye nokusebenza kweenkqubo ze-NoSQL, kodwa ngexesha elifanayo ligcina iziqinisekiso ze-ACID eziqhelekileyo kwiinkqubo ze-classical. Zimbalwa iinkqubo zemizi-mveliso ezisebenzayo zolu didi lutsha, ngoko ke siphumeze inkqubo enjalo ngokwethu kwaye siyifake kumsebenzi worhwebo.

Indlela esebenza ngayo kwaye kwenzekani - funda phantsi kokusikwa.

Namhlanje, abaphulaphuli benyanga be-Odnoklassniki bangaphezu kwezigidi ezingama-70 zeendwendwe ezizodwa. Thina ngena kwabahlanu abaphezulu iinethiwekhi ezinkulu zentlalo emhlabeni, kwaye kwiindawo ezingamashumi amabini eziphezulu apho abasebenzisi bachitha ixesha elininzi. I-infrastructure "KULUNGILE" iphatha imithwalo ephezulu kakhulu: ngaphezu kwesigidi sezicelo ze-HTTP / isekhondi nganye ngaphambili. Amacandelo epaki yomncedisi kwisixa esingaphezu kwama-8000 amaqhekeza ahlala kufuphi nomnye - kumaziko amane edatha yaseMoscow, okwenza kube lula ukubonelela ukulibaziseka kwenethiwekhi ngaphantsi kwe-1 ms phakathi kwabo.

Besisoloko sisebenzisa iCassandra ukusukela ngo-2010, ukuqala ngenguqulo 0.6. Namhlanje, amaqela aliqela asebenzayo. Elona qela likhawulezayo liqhuba imisebenzi engaphezu kwezigidi ezi-4 ngomzuzwana, ngelixa elona likhulu ligcina i-260 TB.

Nangona kunjalo, ezi zonke ngamaqela e-NoSQL aqhelekileyo asetyenziselwa ukugcina ilungelelaniswa ngobuthathaka idatha. Sikwafuna ukutshintshela indawo yokugcina engaguqukiyo, iMicrosoft SQL Server, ebisetyenziswa ukusukela ekusekweni kwe-Odnoklassniki. Ukugcinwa kuqulethwe ngaphezu kwe-300 SQL Server Standard Edition oomatshini, equlethe i-50 TB yedatha - amaqumrhu oshishino. Le datha iguqulwe njengenxalenye yeentengiselwano ze-ACID kwaye ifuna ukuhambelana okuphezulu.

Ukusasaza idatha kuzo zonke iindawo ze-SQL Server, sisebenzise zombini ezithe nkqo nezithe tye ukwahlulahlula (ukwahlula). Ngokomlando, sasebenzisa i-data sharding scheme elula: iqumrhu ngalinye lidibene nomqondiso - umsebenzi we-ID yequmrhu. Amaziko anophawu olufanayo abekwe kwiseva efanayo yeSQL. I-master-detail relationship yaphunyezwa ngendlela yokuba iimpawu zenkosi kunye neerekhodi zomntwana zihlala zihambelana kwaye zifumaneka kumncedisi ofanayo. Kwinethiwekhi yoluntu, phantse zonke iirekhodi zenziwe egameni lomsebenzisi, oku kuthetha ukuba yonke idatha yomsebenzisi ngaphakathi kwenkqubo enye esebenzayo igcinwa kwiseva enye. Oko kukuthi, intengiselwano yeshishini phantse isoloko ibandakanya iitafile zomncedisi omnye we-SQL, okwenze ukuba kuqinisekiswe ukuhambelana kwedatha usebenzisa iintengiselwano ze-ACID zasekhaya, ngaphandle kwesidingo sokusebenzisa. uyacotha kwaye akathembekanga ukuhanjiswa kwe-ACID.

Enkosi ngokwabelana kunye nokukhawulezisa iSQL:

  • Asisebenzisi izithintelo zesitshixo zakwamanye amazwe, kuba xa ushadi, i-ID yequmrhu inokufumaneka kwenye iseva.
  • Asisebenzisi iinkqubo ezigciniweyo kunye nezibangela ngenxa yomthwalo owongezelelweyo kwi-CPU ye-DBMS.
  • Asisebenzisi JOIN ngenxa yako konke okungasentla kunye nokuninzi kokufundeka okungahleliwe kwidiski.
  • Ngaphandle kwentengiselwano, sisebenzisa inqanaba le-Read Uncommitted solation level ukunciphisa ukuvalwa.
  • Senza kuphela iitransekshini ezimfutshane (ngaphantsi kwe-100ms kumndilili).
  • Asisebenzisi i-multi-row UPDATE kunye ne- DELETE ngenxa yenani elikhulu le-deadlocks - sihlaziya irekhodi enye kuphela ngexesha.
  • Imibuzo isoloko isenziwa kuphela ngezalathisi-umbuzo onesicwangciso esipheleleyo sokuskena itafile ithetha kuthi ukulayisha ngaphezulu kwesiseko sedata kunye nokusilela kwayo.

La manyathelo asivumele ukuba sicudise phantse owona msebenzi uphezulu kwiiseva zeSQL. Noko ke, zaya zisanda iingxaki. Makhe sijonge kubo.

Iingxaki ngeSQL

  • Ekubeni sisebenzise i-sharding ebhaliweyo, ukongeza i-shards entsha kwenziwa ngesandla ngabalawuli. Ngalo lonke eli xesha, ii-replicas zedatha ezikhawulezayo azikhange zinikezele izicelo.
  • Njengoko inani leerekhodi kwitheyibhile likhula, isantya sokufakwa kunye nokuguqulwa siyancipha, xa ukongeza i-indexes kwitheyibhile ekhoyo, isantya sihla nge-multiple, ukudala kunye nokudalwa kwakhona kwee-indexes kuthatha ixesha lokunciphisa.
  • Ukuba nexabiso elincinci leWindows ye-SQL Server kwimveliso yenza ulawulo lweziseko zophuhliso lube nzima

Kodwa eyona ngxaki inkulu

ukunyamezela iimpazamo

Iseva ye-SQL ye-Classic inokunyamezela iimpazamo ezimbi. Masithi uneseva enye kuphela yedatha kwaye iyasilela yonke iminyaka emithathu. Ngeli xesha, isayithi iphantsi kwemizuzu engama-20, oku kwamkelekile. Ukuba unamaseva angama-64, ke isiza siphantsi kanye kwiiveki ezintathu. Kwaye ukuba unamaseva angama-200, ke indawo ayisebenzi veki nganye. Le yingxaki.

Yintoni enokwenziwa ukuphucula ukunyamezela impazamo kwiseva yeSQL? I-Wikipedia isimema ukuba sakhe iqela elifumanekayo kakhulu: apho kwimeko yokusilela kuwo nawaphi na amacandelo kukho ugcino.

Oku kufuna izixhobo ezibiza kakhulu: ukuphindaphinda okuninzi, i-fiber optics, ukugcinwa okwabelwanayo, kunye nokufakwa kwendawo yokugcina akusebenzi ngokuthembekileyo: malunga ne-10% ye-inclusions ekupheleni kokungaphumeleli kwe-backup node kunye nesitimela emva kwe-node enkulu.

Kodwa eyona nto ingalunganga yeqela elifumanekayo kakhulu kukufumaneka kwe-zero kwimeko yokusilela kwiziko ledatha apho ikhoyo. I-Odnoklassniki inamaziko amane edatha, kwaye kufuneka siqinisekise umsebenzi kwenye yazo xa kukho ukungaphumeleli ngokupheleleyo.

Kuba oku umntu angasebenzisa Iinkosi ezininzi uphindaphindo olwakhelwe kwi-SQL Server. Esi sisombululo sibiza kakhulu ngenxa yeendleko zesoftware kwaye sinengxaki eyaziwayo yokuphindaphinda - ukulibaziseka kokuthengiselana okungalindelekanga kunye nokuphindaphinda okuhambelanayo kunye nokulibaziseka ekusebenziseni ukuphindaphinda (kwaye, ngenxa yoko, ukuguqulwa okulahlekileyo) kunye ne-asynchronous. echaziweyo ukusombulula impixano ngesandla yenza olu khetho lungasebenzi ngokupheleleyo kuthi.

Zonke ezi ngxaki zazifuna isisombululo esikhulu kwaye saqhubeka nohlalutyo lwazo oluneenkcukacha. Apha kufuneka siqhelane nento eyenziwa ngu-SQL Server ngokwesiseko-intengiselwano.

Intengiselwano elula

Cinga ngeyona ntengiselwano ilula ukusuka kwindawo yokujonga umdwelisi we-SQL osetyenzisiweyo: ukongeza ifoto kwi-albhamu. Iialbham kunye neefoto zigcinwa kwiipleyiti ezahlukeneyo. Icwecwe linekhawuntara yeefoto zikawonke-wonke. Ke intengiselwano enjalo yahlulwe ngokwala manyathelo alandelayo:

  1. Sivala icwecwe ngesitshixo.
  2. Yenza ingeniso kwitafile yeefoto.
  3. Ukuba ifoto inesimo sikawonke-wonke, ngoko sigqibezela ikhawuntara yeefoto zikawonke-wonke kwi-albhamu, sihlaziye irekhodi kwaye senze intengiselwano.

Okanye kwipseudocode:

TX.start("Albums", id);
Album album = albums.lock(id);
Photo photo = photos.create(…);

if (photo.status == PUBLIC ) {
    album.incPublicPhotosCount();
}
album.update();

TX.commit();

Siyabona ukuba eyona meko ixhaphakileyo yentengiselwano yeshishini kukufunda idatha kwisiseko sedatha kwimemori yeseva yesicelo, utshintshe into kwaye ugcine amaxabiso amatsha kwisiseko sedatha. Ngokwesiqhelo kwintengiselwano enjalo sihlaziya amaziko amaninzi, iitafile ezininzi.

Xa intengiselwano yenziwe, ukuguqulwa kwangaxeshanye kwedatha efanayo ukusuka kwenye inkqubo inokwenzeka. Ngokomzekelo, i-Antispam inokugqiba isigqibo sokuba umsebenzisi ngandlela-thile ukrokre kwaye ngoko ke zonke iifoto zomsebenzisi akufanele zibe sesidlangalaleni, kufuneka zithunyelwe ukumodareyitha, oku kuthetha ukutshintsha i-photo.status kwelinye ixabiso kunye nokucima izinto zokubala ezihambelanayo. Ngokucacileyo, ukuba lo msebenzi uya kwenzeka ngaphandle kweziqinisekiso ze-atomicity yesicelo kunye nokwahlukaniswa kohlengahlengiso olukhuphisanayo, njengaku. I-ACID, ngoko umphumo awuyi kuba yinto oyifunayo - mhlawumbi i-counter counter iya kubonisa ixabiso elingalunganga, okanye kungekhona zonke iifoto eziza kuthunyelwa ukumodareyitha.

Uninzi lwekhowudi enjalo elawula amashishini ahlukeneyo ngaphakathi kwentengiselwano enye ibhaliwe kubo bonke ubukho be-Odnoklassniki. Ngokutsho amava yokufudukela NoSQL nge Ukuhambelana kwesiganeko siyazi ukuba umngeni omkhulu (kunye nexesha elide) yimfuno yokuphuhlisa ikhowudi yokugcina idatha. Ke ngoko, sithathele ingqalelo eyona mfuno iphambili yogcino olutsha ukuba lube lulungiselelo lwengqiqo yesicelo sentengiselwano ye-ACID yangempela.

Ezinye iimfuno ezibaluleke ngokulinganayo zazi:

  • Kwimeko yokungaphumeleli kweziko ledatha, kokubili ukufunda nokubhala kwisitoreji esitsha kufuneka kufumaneke.
  • Ukugcina isantya sangoku sophuhliso. Oko kukuthi, xa usebenza kunye ne-repository entsha, inani lekhowudi kufuneka libe malunga nokulingana, akufanele kubekho imfuneko yokongeza into kwindawo yokugcina, ukuphuhlisa i-algorithms yokusombulula iingxabano, ukugcina i-indexes yesibini, njl.
  • Isantya sogcino olutsha kufuneka sikhawuleze ngokwaneleyo, kokubini xa kufundwa idatha naxa kusetyenzwa iintengiselwano, nto leyo ethetha ukuba ingqongqo ngokwezemfundo, injongo jikelele, kodwa izisombululo ezicothayo, ezifana izibophelelo zesigaba ezibini.
  • Ukukala okuzenzekelayo kubhabho.
  • Ukusebenzisa iiseva ezinexabiso eliphantsi, ngaphandle kwesidingo sokuthenga amaqhekeza entsimbi angaqhelekanga.
  • Ithuba lokuphuhliswa kokugcinwa ngabaphuhlisi benkampani. Ngamanye amazwi, okuphambili kwanikwa izisombululo zemithombo yomnini okanye evulekileyo, ngokukhethekileyo kwiJava.

Izigqibo, izigqibo

Ukuhlalutya izisombululo ezinokwenzeka, size nokhetho olunokubakho lwezakhiwo ezimbini:

Eyokuqala kukuthatha nayiphi na iseva ye-SQL kwaye izalisekise ukunyamezela kwempazamo efunekayo, indlela yokulinganisa, i-failover clustering, isisombululo sengxabano, kunye nokusabalalisa, okuthembekileyo, kunye nokukhawuleza kweentengiselwano ze-ACID. Sivavanye olu khetho njengento engenamsebenzi kwaye ichitha ixesha.

Inketho yesibini kukuthatha i-NoSQL yokugcina esele yenziwe nge-scaling ephunyeziweyo, i-failover clustering, isisombululo sengxabano kunye nokuphumeza ukuthengiselana kunye ne-SQL ngokwakho. Ekuboneni kokuqala, kwanomsebenzi wokuphumeza i-SQL, ungakhankanyi ukuthengiselana kwe-ACID, kubonakala ngathi ngumsebenzi weminyaka. Kodwa ke siye saqaphela ukuba iseti yeempawu zeSQL esizisebenzisayo xa siqhuba zikude kwi-ANSI SQL njengoko Cassandra CQL kude ANSI SQL. Ukujonga ngakumbi kwi-CQL, safumanisa ukuba isondele ngokwaneleyo kwinto esiyidingayo.

Cassandra kunye neCQL

Ke, yintoni enika umdla ngeCassandra, zeziphi iimpawu enazo?

Okokuqala, apha ungenza iitafile ngenkxaso yeentlobo ezahlukeneyo zedatha, ungenza KHETHA okanye UHLAZIYA ngesitshixo sokuqala.

CREATE TABLE photos (id bigint KEY, owner bigint,…);
SELECT * FROM photos WHERE id=?;
UPDATE photos SET … WHERE id=?;

Ukuqinisekisa ukuhambelana kwedatha ye-replica, uCassandra usebenzisa indlela ikhoram. Kwimeko elula, oku kuthetha ukuba xa ubeka ii-replicas ezintathu zomqolo ofanayo kwiindawo ezahlukeneyo zeqela, ukubhala kuthathwa njengempumelelo ukuba uninzi lweenodi (okt ezimbini kwabathathu) ziqinisekisile impumelelo yalo msebenzi wokubhala. Idatha yochungechunge ithathwa njengento ehambelanayo ukuba, xa kufundwa, uninzi lweenodi zaphononongwa kwaye zaqinisekisa. Ke, ukuba kukho ii-replicas ezintathu, ukuhambelana kwedatha okugcweleyo kunye nangoko kuqinisekiswa ukuba indawo enye iyasilela. Le ndlela yasivumela ukuba siphumeze iskimu esithembeke ngakumbi: soloko uthumela izicelo kuzo zonke ii-replicas ezintathu, ulindele impendulo kwiimbini ezikhawulezayo. Impendulo kade yomfanekiso wesithathu iyalahlwa. Ngelo xesha, i-node esemva kwexesha ngempendulo ingaba neengxaki ezinzulu - iibhuleki, ukuqokelela inkunkuma kwi-JVM, ukubuyiswa kwememori ngokuthe ngqo kwi-linux kernel, ukungaphumeleli kwe-hardware, ukuqhawulwa kwinethiwekhi. Nangona kunjalo, imisebenzi yabathengi kunye nedatha ayichaphazeleki nangayiphi na indlela.

Indlela yokufikelela xa sifikelela kwiindawo ezintathu kwaye sifumana impendulo kwezimbini ibizwa ngokuba intelekelelo: isicelo se-replicas eyongezelelweyo sithunyelwa ngaphambi kokuba "iwe".

Olunye uncedo lweCassandra yiBatchlog, isixhobo esiqinisekisa ukuba utshintsho olwenzayo lusetyenziswa ngokupheleleyo okanye alusetyenziswanga ngokupheleleyo kwiphakheji. Oku kusivumela ukuba sisombulule i-A kwi-ACID - i-atomicity ngaphandle kwebhokisi.

Eyona nto ikufutshane kwintengiselwano eCassandra yinto ebizwa ngokuba "iintengiselwano ezilula". Kodwa zikude "zokwenene" iintengiselwano ze-ACID: enyanisweni, eli lithuba lokwenza CAS kwidatha yerekhodi enye kuphela, usebenzisa i-Paxos heavyweight protocol consensus. Ngoko ke, isantya sokuthengiselana okunjalo siphantsi.

Oko sikuphosileyo eCassandra

Ke, kuye kwafuneka ukuba siphumeze iintengiselwano zokwenyani ze-ACID eCassandra. Ngoncedo esinokuthi siphumeze ngokulula ezinye izinto ezimbini ezifanelekileyo ze-DBMS yakudala: izalathisi ezikhawulezayo ezingaguqukiyo, eziya kusivumela ukuba sikhethe idatha kungekuphela nje ngesitshixo esiphambili, kunye nejenereyitha eqhelekileyo yee-ID zokunyusa okuzenzekelayo.

C*Nye

Ngoko i-DBMS entsha yazalwa C*Nye, ebandakanya iindidi ezintathu zeendawo zeseva:

  • Iindawo zokugcina zi (phantse) iiseva eziqhelekileyo zeCassandra ezinoxanduva lokugcina idatha kwiidrive zendawo. Njengoko umthwalo kunye nomthamo wedatha ukhula, inani labo linokunyuswa ngokulula ukuya kumashumi kunye namakhulu.
  • Abaququzeleli bentengiselwano - qinisekisa ukwenziwa kweentengiselwano.
  • Abathengi bangabancedisi bezicelo abasebenzisa imisebenzi yezoshishino kwaye baqalise ukuthengiselana. Kusenokubakho amawakawaka abaxumi abanjalo.

NewSQL = NoSQL+ACID

Abancedisi bazo zonke iindidi bakwiqela eliqhelekileyo, sebenzisa iprotocol yomyalezo wangaphakathi weCassandra ukunxibelelana kunye kwaye intlebendwane kutshintshiselwano ngolwazi lweqela. Ngoncedo lwe-Heartbeat, abancedisi bafunda malunga nokungaphumeleli okufanayo, bagcine iskimu esisodwa sedatha - iitafile, isakhiwo sabo kunye nokuphindaphinda; iskim sokwahlulahlula, i-cluster topology, njl.

Abaxhasi

NewSQL = NoSQL+ACID

Endaweni yabaqhubi abaqhelekileyo, imowudi yeFat Client isetyenziswa. I-node enjalo ayigcini idatha, kodwa inokusebenza njengomququzeleli wokwenziwa kwesicelo, oko kukuthi, uMthengi ngokwawo usebenza njengomququzeleli wezicelo zakhe: i-polls replicas yokugcina kwaye isombulule iingxabano. Oku akukona nje ukuthembeka kwaye ngokukhawuleza kunomqhubi oqhelekileyo, ofuna unxibelelwano kunye nomququzeleli ode, kodwa kwakhona ikuvumela ukuba ulawule ukuhanjiswa kwezicelo. Ngaphandle kwentengiselwano evulekileyo kumxhasi, izicelo zithunyelwa kwiindawo zokugcina. Ukuba umxhasi uvule ukuthengiselana, ke zonke izicelo ngaphakathi kwentengiselwano zithunyelwa kumququzeleli wentengiselwano.
NewSQL = NoSQL+ACID

C * One Transaction Coordinator

Umnxibelelanisi yinto esiyiphumezileyo kwi-C*One ukusuka ekuqaleni. Inoxanduva lokulawula iitransekshini, izitshixo, kunye nomyalelo wokwenziwa kweentengiselwano.

Kwitransekshini nganye yenkonzo, umnxibelelanisi uvelisa isitampu sexesha: nganye elandelayo inkulu kuneyo yentengiselwano yangaphambili. Kuba inkqubo yokusombulula impixano eCassandra isekwe kwizitampu zexesha (zeerekhodi ezimbini eziphikisanayo, isitampu sexesha samva nje sibonwa sifanelekile), impixano iya kuhlala isonjululwa ngokuxhasa intengiselwano elandelayo. Ngaloo ndlela siye sazalisekisa iwotshi ye-lamport yindlela ephantsi yokusombulula iingxabano kwinkqubo esasazwayo.

Izitshixo

Ukuqinisekisa ukubekwa wedwa, sigqibe kwelokuba sisebenzise eyona ndlela ilula - izitshixo ezingenathemba kwisitshixo esiphambili serekhodi. Ngamanye amazwi, kwintengiselwano, irekhodi kufuneka itshixiwe kuqala, emva koko ifundwe, ilungiswe, kwaye igcinwe. Kuphela kusemva kokuzibophelela okuyimpumelelo apho irekhodi inokuvulwa khona ukuze iintengiselwano ezikhuphisanayo zikwazi ukuyisebenzisa.

Ukuphumeza isitshixo esinjalo kulula kwindawo engasasazwanga. Kwinkqubo esasazwayo, kukho iindlela ezimbini eziphambili: nokuba kuphunyezwe ukutshixa okusasaziweyo kwi-cluster, okanye ukuhanjiswa kweentengiselwano ukwenzela ukuba iitransekshini ezibandakanya irekhodi efanayo zihlala zisenzwa ngumququzeleli ofanayo.

Ekubeni kwimeko yethu idatha sele isasazwe phakathi kwamaqela eentengiselwano zendawo kwi-SQL, kwagqitywa ukuba kwabelwe amaqela eentengiselwano zendawo kubaququzeleli: umququzeleli omnye wenza zonke iintengiselwano kunye nomqondiso ukusuka ku-0 ukuya ku-9, okwesibini - kunye nomqondiso ovela 10 ukuya kwi-19, njalo njalo. Ngenxa yoko, nganye yeemeko zomququzeleli uba yinkosi yeqela lentengiselwano.

Emva koko izitshixo zinokuphunyezwa njenge-banal HashMap kwinkumbulo yomququzeleli.

Ukwaliwa kwabaququzeleli

Ekubeni umnxibelelanisi omnye ekhonza kuphela iqela leentengiselwano, kubaluleke kakhulu ukukhawuleza ukugqiba inyaniso yokusilela kwayo ukuze umzamo ophindaphindiweyo wokuphumeza intengiselwano ungaphakathi kwexesha. Ukwenza oku kukhawuleze kwaye kuthembeke, sisebenzise iprothokholi yekhoram enemeshed ngokupheleleyo:

Iziko ngalinye ledatha libamba ubuncinci iindawo ezimbini zomnxibelelanisi. Ngamaxesha athile, umnxibelelanisi ngamnye uthumela umyalezo wokubetha kwentliziyo kwabanye abaququzeleli aze abaxelele ngokusebenza kwawo, kunye nangexesha lokugqibela efumana imiyalezo yokubetha kwentliziyo apho abaququzeleli kwiqela.

NewSQL = NoSQL+ACID

Ukufumana ulwazi olufanayo kwabanye njengenxalenye yemiyalezo yabo yokubetha kwentliziyo, umnxibelelanisi ngamnye uzigqibela ngokwakhe ukuba zeziphi iindawo zeqela ezisebenzayo nezingasebenziyo, ekhokelwa ngumgaqo wekhoram: ukuba i-node X ifumene ulwazi kuninzi lweenodi kwiqela malunga. ulwamkelo oluqhelekileyo lwemiyalezo esuka kwindawo engu-Y, emva koko, uY uyasebenza. Ngokwahlukileyo, kamsinya nje ukuba uninzi luxela imiyalezo elahlekileyo ukusuka kwindawo engu-Y, emva koko u-Y akaphumelelanga. Okumangalisayo kukuba, ukuba ikhoram ixelela i-node X ukuba ayifumani eminye imiyalezo esuka kuyo, i-node engu-X ngokwayo iya kuzithatha ukuba ayiphumelelanga.

Imiyalezo ye-heartbeat ithunyelwa kwi-frequency ephezulu, malunga namaxesha angama-20 ngesibini, kunye nexesha le-50 ms. KwiJava, kunzima ukuqinisekisa impendulo yesicelo ngaphakathi kwe-50ms ngenxa yamaxesha okumisa okuthelekisa okubangelwa ngumqokeleli wenkunkuma. Siye sakwazi ukufezekisa eli xesha lokuphendula ngokusebenzisa umqokeleli wenkunkuma ye-G1, ekuvumela ukuba uchaze injongo yexesha lokumisa i-GC. Nangona kunjalo, ngamanye amaxesha, kunqabile, umqokeleli uyeka ukuya ngaphaya kwe-50 ms, nto leyo inokukhokelela ekubhaqweni kokusilela kobuxoki. Ukuze ugweme oku, umququzeleli akayi ngxelo yokungaphumeleli kwe-node ekude xa umyalezo wokuqala we-heartbeat evela kuyo ulahlekile, kuphela ukuba ezininzi ngokulandelelana zilahlekile.Ngoko sikwazile ukufumanisa ukungaphumeleli kwe-node yomququzeleli kwi-200 ms.

Kodwa akwanelanga ukuqonda ngokukhawuleza ukuba yeyiphi i-node eyekile ukusebenza. Kukho into ekufuneka yenziwe ngayo.

Ugcino

Iskimu seklasiki sithatha ukuba kwimeko yokusilela kwenkosi ukusungula unyulo lwentsha isebenzisa enye esefashonini kwindalo iphela algorithms. Nangona kunjalo, i-algorithms enjalo ineengxaki ezaziwa kakuhle kunye nokudibanisa ngexesha kunye nobude benkqubo yonyulo ngokwayo. Sikwazile ukunqanda ulibaziseko olongezelelekileyo sisebenzisa iskimu sokubuyisela umnxibelelanisi kuthungelwano oluqhagamshelwe ngokupheleleyo:

NewSQL = NoSQL+ACID

Masithi sifuna ukwenza intengiselwano kwiqela lama-50. Masichaze iskimu sokutshintsha kwangaphambili, oko kukuthi, iinodi eziya kuqhuba iintengiselwano zeqela le-50 kwimeko yokusilela komnxibelelanisi oyintloko. Injongo yethu kukugcina inkqubo kwaye isebenza kwimeko yokungaphumeleli kweziko ledatha. Masichaze ukuba ukugcinwa kokuqala kuya kuba yi-node evela kwelinye iziko ledatha, kwaye i-reserve yesibini iya kuba yi-node esuka kwisithathu. Olu dweliso lukhethwe kanye kwaye alutshintshi de i-topology ye-cluster itshintshe, oko kukuthi, de i-nodes entsha ingene kuyo (okwenzeka kunqabile kakhulu). Umyalelo wokukhetha inkosi entsha esebenzayo kwimeko yokungaphumeleli kwendala iya kuhlala inje: ugcino lokuqala luya kuba yinkosi esebenzayo, kwaye ukuba uyekile ukusebenza, ukugcinwa kwesibini kuya kuba.

Iskimu esinjalo sithembeke ngakumbi kune-algorithm yendalo yonke, ekubeni kusebenze inkosi entsha, kwanele ukugqiba inyaniso yokungaphumeleli komdala.

Kodwa abathengi baya kuqonda njani ukuba yeyiphi iinkosi ezisebenzayo ngoku? Akunakwenzeka ukuthumela ulwazi kumawaka abathengi kwi-50 ms. Kungenzeka ukuba umxhasi athumele isicelo sokuvula i-transaction, engazi ukuba le nkosi ayisasebenzi, kwaye isicelo siya kuxhoma ngexesha. Ukuthintela oku kungenzeki, abathengi bathumela isicelo sokuvula ukuthengiselana kwinkosi yeqela kunye nokugcinwa kwayo zombini ngexesha elinye, kodwa kuphela lowo uyinkosi esebenzayo okwangoku uya kuphendula kwesi sicelo. Lonke unxibelelwano olulandelayo ngaphakathi kwentengiselwano luya kwenziwa ngumthengi kuphela ngenkosi esebenzayo.

Iinkosi ezilindileyo zibeka izicelo ezifunyenweyo zeetransekshini ezingezizo ezazo kumgca wentengiselwano engekazalwa, apho zigcinwa khona ixesha elithile. Ukuba inkosi esebenzayo iyafa, inkqubo entsha ye-master icela ukuvula ukuthengiselana ukusuka kumgca wayo kwaye iphendule kumxhasi. Ukuba umxhasi sele ekwazi ukuvula ukuthengiselana kunye nenkosi endala, ke impendulo yesibini ayinakwa (kwaye, ngokucacileyo, ukuthengiselana okunjalo akuyi kugqiba kwaye kuya kuphinda kuphindwe ngumxhasi).

Isebenza njani intengiselwano

Masithi umxhasi uthumele isicelo kumququzeleli ukuba avule intengiselwano yelo kunye nequmrhu elinesitshixo esinjalo nesingundoqo. Umnxibelelanisi utshixa eli qumrhu kwaye alibeke kwitafile yokutshixa kwinkumbulo. Ukuba kuyimfuneko, umququzeleli ufunda eli qumrhu kwivenkile kwaye ugcina idatha efunyenweyo kwisimo sokuthengiselana kwimemori yomququzeleli.

NewSQL = NoSQL+ACID

Xa umxhasi efuna ukutshintsha idatha kwi-transaction, ithumela isicelo kumququzeleli ukuba aguqule iqumrhu, kwaye umququzeleli ubeka idatha entsha kwitheyibhile yesimo sokuthengiselana kwimemori. Oku kugqiba ukurekhoda - indawo yokugcina ayibhalwanga.

NewSQL = NoSQL+ACID

Xa umxhasi ecela eyakhe idatha elungisiweyo njengenxalenye yentengiselwano esebenzayo, umnxibelelanisi wenza ngolu hlobo:

  • ukuba i-ID sele ikhona kwintengiselwano, ngoko idatha ithathwa kwimemori;
  • ukuba akukho-ID kwimemori, ke idatha elahlekileyo ifundwa kwiindawo zokugcina, ezidityaniswe nezo sele zisememori, kwaye umphumo ubuyiselwa kumxhasi.

Ngaloo ndlela, umxhasi unokufunda utshintsho lwakhe, kwaye abanye abathengi ababoni olu tshintsho, kuba zigcinwe kuphela kwimemori yomququzeleli, azikabikho kwi-Cassandra nodes.

NewSQL = NoSQL+ACID

Xa umxhasi ethumela isibophelelo, urhulumente owawusesikhumbuzweni senkonzo ugcinwa ngumnxibelelanisi kwibhetshi engenisiweyo, kwaye ithunyelwe kwiivenkile zeCassandra njengebhetshi engenisiweyo. I-repositories yenza yonke into efunekayo ukuze le phakheji isetyenziswe kwi-atom (ngokupheleleyo), kwaye ibuyisele impendulo kumququzeleli, okhupha izitshixo kwaye uqinisekisa impumelelo yentengiselwano kumxhasi.

NewSQL = NoSQL+ACID

Kwaye ukubuyisela umva, umnxibelelanisi ufuna kuphela ukukhulula imemori egcinwe yimeko yentengiselwano.

Ngenxa yolu phuculo luchazwe ngasentla, siphumeze imigaqo ye-ACID:

  • Iatomicity. Esi sisiqinisekiso sokuba akukho ntengiselwano iya kulungiswa ngokuyinxenye kwisistim, nokuba yonke imisetyenzana yayo iya kwenziwa, okanye akukho nanye kuzo eya kwenziwa. Kwimeko yethu, lo mgaqo ubonwa ngenxa yebhetshi efakiweyo eCassandra.
  • Ukungqinelana. Intengiselwano nganye eyimpumelelo, ngokwenkcazo, yenza iziphumo ezisebenzayo kuphela. Ukuba, emva kokuvula ukuthengiselana kunye nokwenza ezinye zemisebenzi, kufunyenwe ukuba umphumo awuvumelekile, i-rollback yenziwa.
  • ukubekwa wedwa. Xa intengiselwano yenziwe, ukuthengiselana okuhambelanayo akufanele kuchaphazele umphumo wayo. Iintengiselwano ezifanayo zibekwe zodwa kunye nezitshixo ezingenathemba kumnxibelelanisi. Ukufundwa ngaphandle kwentengiselwano, umgaqo wokuzibekela bucala kwinqanaba elizibophelele ngokuFunda uyahlonitshwa.
  • Ukuzinza. Kungakhathaliseki ukuba zeziphi iingxaki kumanqanaba aphantsi - ukucima kwenkqubo, ukungaphumeleli kwe-hardware - utshintsho olwenziwa ngokugqitywa ngempumelelo kufuneka lugcinwe emva kokuqaliswa kokusebenza.

Ukufunda ngokwezalathisi

Masithathe itafile elula:

CREATE TABLE photos (
id bigint primary key,
owner bigint,
modified timestamp,
…)

Ine-ID (isitshixo sokuqala), umnini, kunye nomhla wohlengahlengiso. Kufuneka wenze isicelo esilula kakhulu - khetha idatha kumnini kunye nomhla wokutshintsha "ngomhla wokugqibela".

SELECT *
WHERE owner=?
AND modified>?

Ukuze uphendule umbuzo onjalo ngokukhawuleza, kwi-SQL DBMS yakudala, kufuneka wakhe isalathisi kwiikholomu (umnini, ulungisiwe). Singakwenza ngokulula oku, kuba ngoku sineziqinisekiso ze-ACID!

Izalathisi kwi-C*Enye

Kukho itafile yokuqala eneefoto apho i-ID yerekhodi isitshixo esiphambili.

NewSQL = NoSQL+ACID

Kwisalathiso, C*Enye yenza itafile entsha eyikopi yetafile yoqobo. Isitshixo siyafana nesalathiso senkcazo, kodwa ikwabandakanya isitshixo esiphambili serekhodi ukusuka kwitheyibhile yomthombo:

NewSQL = NoSQL+ACID

Ngoku umbuzo othi "umnini kwiiyure ezingama-XNUMX zokugqibela" unokuphinda ubhalwe njengokukhethiweyo kwenye itafile:

SELECT * FROM i1_test
WHERE owner=?
AND modified>?

Ukuhambelana kwedatha phakathi kweefoto zetafile yomthombo kunye nesalathisi i1 sigcinwa ngokuzenzekelayo ngumququzeleli. Ngokusekelwe kwi-schema yedatha yodwa, xa utshintsho lufunyenwe, umququzeleli uvelisa kwaye ukhumbule utshintsho kungekhona nje kwitheyibhile eyintloko, kodwa kunye noshintsho lweekopi. Akukho zenzo ezongezelelweyo ezenziwa ngetafile yesalathisi, iilogi azifundwanga, izitshixo azisetyenziswanga. Oko kukuthi, ukongeza izalathisi phantse akutyi izixhobo kwaye akuchaphazeli isantya sokusebenzisa uhlengahlengiso.

Ngoncedo lwe-ACID, sikwazile ukuphumeza izalathisi "njenge-SQL". Ziyahambelana, ziyakaleka, ziyakhawuleza, ziyahlanganiswa, kwaye zakhelwe kulwimi lombuzo lweCQL. Inkxaso yesalathisi ayifuni naluphi na utshintsho kwikhowudi yesicelo. Yonke into ilula, njengakwiSQL. Kwaye okona kubaluleke kakhulu, izalathisi azichaphazeli isantya sokwenziwa kohlengahlengiso kwitafile yentengiselwano yokuqala.

Kwenzekentoni

Siphuhlise i-C * One kwiminyaka emithathu edlulileyo kwaye sayifaka kumsebenzi worhwebo.

Sigqibele ngantoni? Makhe sivavanye oku kumzekelo wenkqubo engaphantsi yokucubungula nokugcina iifoto, enye yezona ntlobo zibalulekileyo zedatha kwinethiwekhi yoluntu. Oku akukho malunga nemizimba yeefoto ngokwazo, kodwa malunga nazo zonke iintlobo zolwazi lwemeta. Ngoku kwi-Odnoklassniki kukho malunga neebhiliyoni ezingama-20 zeerekhodi ezinjalo, inkqubo iqhuba i-80 lamawaka ezicelo zokufunda ngomzuzwana, ukuya kwi-8 amawaka eentengiselwano ze-ACID ngesekhondi ehambelana nokuguqulwa kwedatha.

Xa sisebenzisa i-SQL kunye ne-replication factor = 1 (kodwa kwi-RAID 10), i-photo meta-information yagcinwa kwi-cluster ekhoyo kakhulu ye-32 ye-Microsoft SQL Server machines (kunye ne-11 spares). Kwakhona, iiseva ezili-10 zabelwe ukugcina ii-backups. Iimoto ezixabisa kakhulu ezingama-50. Ngexesha elifanayo, inkqubo yasebenza kumthwalo olinganisiweyo, ngaphandle komda.

Emva kokufudukela kwinkqubo entsha, sifumene i-replication factor = 3 - ikopi kwiziko ngalinye ledatha. Inkqubo iqulethe i-63 yokugcina i-Cassandra nodes kunye noomatshini abaququzeleli be-6, kwiiseva ze-69 zizonke. Kodwa aba matshini bangabizi kakhulu, bebonke malunga ne-30% yeendleko zenkqubo yeSQL. Kule meko, umthwalo ugcinwa kwinqanaba le-30%.

Ngokusungulwa kwe-C * Enye, i-latency nayo yehla: kwi-SQL, umsebenzi wokubhala uthatha malunga ne-4,5 ms. Kwi-C * Enye - malunga ne-1,6 ms. Ubude bentengiselwano buyi-avareji engaphantsi kwe-40 ms, ukuzinikela kugqitywe nge-2 ms, ubude bokufunda nokubhala yi-2 ms ngokomndilili. Ipesenti ye-99 kuphela yi-3-3,1 ms, inani lexesha lokuyeka liye lehla ngamaxesha angama-100 - konke ngenxa yokusetyenziswa ngokubanzi kweengcamango.

Ukuza kuthi ga ngoku, uninzi lweenodi ze-SQL Server ziye zarhoxiswa, iimveliso ezintsha ziphuhliswa kuphela kusetyenziswa i-C * One. Silungelelanise iC*One ukuba isebenze kwilifu lethu ilifu elinye, okwenze ukuba kube lula ukukhawulezisa ukuthunyelwa kwamaqela amatsha, ukwenza lula uqwalaselo kunye nokusebenza ngokuzenzekelayo. Ngaphandle kwekhowudi yomthombo, oku kuya kuba nzima kakhulu kwaye kuqhekezwe.

Ngoku sisebenzela ukuhambisa ezinye iindawo zokugcina efini - kodwa libali elahluke ngokupheleleyo elo.

umthombo: www.habr.com

Yongeza izimvo