I-NewSQL = NoSQL+ACID

I-NewSQL = NoSQL+ACID
Kuze kube muva nje, i-Odnoklassniki igcine cishe u-50 TB wedatha ecutshungulwe ngesikhathi sangempela ku-SQL Server. Ngomthamo onjalo, cishe akunakwenzeka ukunikeza ukufinyelela okusheshayo nokuthembekile, ngisho nokubekezelela ukwehluleka kwesikhungo sedatha usebenzisa i-SQL DBMS. Ngokuvamile, ezimweni ezinjalo, enye ye-NoSQL storages isetshenziswa, kodwa akuyona yonke into engadluliselwa ku-NoSQL: ezinye izinhlangano zidinga iziqinisekiso zokwenziwa kwe-ACID.

Lokhu kwasiholela ekusetshenzisweni kwesitoreji se-NewSQL, okungukuthi, i-DBMS enikeza ukubekezelelana kwamaphutha, ukulinganisa nokusebenza kwezinhlelo ze-NoSQL, kodwa ngesikhathi esifanayo ukugcina i-ACID iqinisekisa ukuthi ijwayele izinhlelo zakudala. Zimbalwa izinhlelo zezimboni ezisebenzayo zalesi sigaba esisha, ngakho-ke sisebenzise uhlelo olunjalo ngokwethu futhi salufaka emsebenzini wokuhweba.

Isebenza kanjani nokuthi kwenzekeni - funda ngaphansi kokusika.

Namuhla, izethameli zenyanga ze-Odnoklassniki zingaphezu kwezigidi ezingu-70 zezivakashi ezihlukile. Thina Sibalwa kwabahlanu abahamba phambili amanethiwekhi omphakathi amakhulu kunawo wonke emhlabeni, naphakathi kwamasayithi angamashumi amabili abasebenzisi abachitha kuwo isikhathi esiningi. Ingqalasizinda ye-OK ithwala imithwalo ephezulu kakhulu: izicelo ze-HTTP ezingaphezu kwesigidi/isekhondi ngalinye. Izingxenye zemikhumbi yeseva yezingcezu ezingaphezu kuka-8000 ziseduze komunye nomunye - ezikhungweni ezine zedatha yaseMoscow, okuvumela ukubambezeleka kwenethiwekhi okungaphansi kuka-1 ms phakathi kwabo.

Besilokhu sisebenzisa i-Cassandra kusukela ngo-2010, siqala ngenguqulo 0.6. Namuhla kunamaqoqo amaningana asebenzayo. Iqoqo elishesha kakhulu liqhuba ukusebenza okungaphezu kwezigidi ezi-4 ngomzuzwana, kanti izitolo ezinkulu kakhulu zingu-260 TB.

Kodwa-ke, lawa wonke amaqoqo ajwayelekile e-NoSQL asetshenziselwa ukugcinwa kuhlanganiswe ngobuthaka idatha. Besifuna ukufaka esikhundleni sesitoreji esingaguquki esiyinhloko, i-Microsoft SQL Server, esisetshenziswe kusukela kwasungulwa i-Odnoklassniki. Isitoreji sasihlanganisa imishini engaphezu kuka-300 ye-SQL Server Standard Edition, eyayiqukethe u-50 TB wedatha - izinhlangano zebhizinisi. Le datha ishintshiwe njengengxenye yemisebenzi ye-ACID futhi idinga ukungaguquguquki okuphezulu.

Ukuze sisabalalise idatha kuwo wonke ama-node e-SQL Server, sisebenzise kokubili okuqondile nokuvundlile ukwahlukanisa (ukuhlukanisa). Ngokomlando, sasebenzisa uhlelo olulula lokuhlukanisa idatha: ibhizinisi ngalinye lalihlotshaniswa nethokheni - umsebenzi we-ID yebhizinisi. Amabhizinisi anethokheni efanayo abekwe kuseva ye-SQL efanayo. I-master-detail relationship yasetshenziswa ukuze amathokheni amarekhodi amakhulu kanye nengane ahlale ehambisana futhi atholakala kuseva efanayo. Engosini yokuxhumana nabantu, cishe wonke amarekhodi akhiqizwa egameni lomsebenzisi - okusho ukuthi yonke idatha yomsebenzisi ngaphakathi kwesistimu engaphansi eyodwa esebenzayo igcinwa kuseva eyodwa. Okusho ukuthi, ukuthengiselana kwebhizinisi cishe njalo kuhilela amatafula avela kuseva eyodwa ye-SQL, okwenza kwaba nokwenzeka ukuqinisekisa ukuhambisana kwedatha usebenzisa ukuthengiselana kwe-ACID yendawo, ngaphandle kwesidingo sokusebenzisa. kancane futhi engathembekile ukuthengiselana okusabalalisiwe kwe-ACID.

Siyabonga ngokwabelana kanye nokusheshisa i-SQL:

  • Asizisebenzisi izithiyo zokhiye bakwamanye amazwe, njengoba lapho sabiwa i-ID yebhizinisi ingase ibekwe kwenye iseva.
  • Asizisebenzisi izinqubo ezigciniwe nezibangeli ngenxa yomthwalo owengeziwe ku-DBMS CPU.
  • Asikusebenzisi JOIN ngenxa yakho konke okungenhla kanye nokufundwa okungahleliwe okuningi kudiski.
  • Ngaphandle komsebenzi, sisebenzisa ileveli yokuzihlukanisa ethi Funda Ukungazibophezeli ukuze sinciphise izikhawu.
  • Senza imisebenzi emifushane kuphela (ngokwesilinganiso emifushane kuno-100 ms).
  • Asisebenzisi i-UPDATE kanye ne-SUSA yemigqa eminingi ngenxa yenani elikhulu le-deadlocks - sibuyekeza irekhodi elilodwa kuphela ngesikhathi.
  • Sihlala senza imibuzo kuma-index kuphela - umbuzo onohlelo oluphelele lokuskena ithebula lethu kusho ukulayisha ngokweqile isizindalwazi nokwenza ukuthi yehluleke.

Lezi zinyathelo zisivumele ukuthi sicindezele cishe ukusebenza okuphezulu kumaseva e-SQL. Nokho, izinkinga zaba ziningi kakhulu. Ake sibheke kubo.

Izinkinga nge-SQL

  • Njengoba sisebenzisa i-sharding yokuzibhalela, ukungeza ama-shards amasha kwenziwa abalawuli mathupha. Sonke lesi sikhathi, izifaniso zedatha ezingakala bezingasebenzisi izicelo.
  • Njengoba inani lamarekhodi kuthebula likhula, isivinini sokufaka nokuguqulwa siyehla; lapho wengeza izinkomba kuthebula elikhona, isivinini sehla ngento ethile; ukudalwa nokudalwa kabusha kwezinkomba kwenzeka ngesikhathi sokuphumula.
  • Ukuba nenani elincane le-Windows ye-SQL Server ekukhiqizeni kwenza ukuphathwa kwengqalasizinda kube nzima

Kodwa inkinga enkulu

ukubekezelelana kwamaphutha

Iseva ye-SQL yakudala inokubekezelelwa okungalungile kwamaphutha. Ake sithi uneseva yedatha eyodwa kuphela, futhi yehluleka kanye njalo eminyakeni emithathu. Ngalesi sikhathi isayithi liphansi imizuzu engu-20, okwamukelekayo. Uma unamaseva angama-64, isiza siphansi kanye njalo emavikini amathathu. Futhi uma unamaseva angama-200, isayithi alisebenzi masonto onke. Lokhu kuyinkinga.

Yini engenziwa ukuze kuthuthukiswe ukubekezelelana kwamaphutha kweseva ye-SQL? I-Wikipedia isimema ukuthi sakhe iqoqo elitholakala kakhulu: lapho uma kwenzeka ukwehluleka kwanoma yiziphi izingxenye kukhona eyisipele.

Lokhu kudinga inqwaba yemishini ebizayo: ukuphindaphinda okuningi, i-fiber optical, isitoreji esabiwe, kanye nokufakwa kwendawo yokugcina akusebenzi ngokuthembekile: cishe u-10% wokushintsha uphela ngokuhluleka kwe-node yokusekelayo njengesitimela ngemuva kwe-node eyinhloko.

Kodwa okubi okuyinhloko kwaleli qoqo elitholakala kakhulu ukutholakala kwe-zero uma isikhungo sedatha esikuso sihluleka. I-Odnoklassniki inezikhungo ezine zedatha, futhi sidinga ukuqinisekisa ukusebenza uma kwenzeka ukwehluleka okuphelele kwesinye sazo.

Ukuze lokhu singasebenzisa I-Multi-Master ukuphindaphinda eyakhelwe ku-SQL Server. Lesi sixazululo sibiza kakhulu ngenxa yezindleko zesoftware futhi sibhekene nezinkinga ezaziwayo ngokuphindaphinda - ukubambezeleka kokuthengiselana okungalindelekile ngokuphindaphinda okuvumelanayo kanye nokulibaziseka ekusebenziseni ukuphindaphinda (futhi, ngenxa yalokho, ukuguqulwa okulahlekile) ngokuphindaphinda okungavumelaniyo. Okucatshangelwayo ukuxazulula ukungqubuzana okwenziwa ngesandla kwenza le nketho ingasebenzi ngokuphelele kithi.

Zonke lezi zinkinga zazidinga ikhambi eliqinile, futhi saqala ukuzihlaziya ngokuningiliziwe. Lapha sidinga ukujwayelana nalokho okwenziwa yi-SQL Server ikakhulukazi - ukuthengiselana.

Ukuthenga okulula

Ake sicabangele okwenziwayo okulula kakhulu, ukusuka endaweni yokubuka yomhleli we-SQL osetshenzisiwe: ukwengeza isithombe ku-albhamu. Ama-albhamu nezithombe zigcinwa kumapuleti ahlukene. I-albhamu inekhawunta yezithombe zomphakathi. Khona-ke ukuthengiselana okunjalo kuhlukaniswa ngezinyathelo ezilandelayo:

  1. Sikhiya i-albhamu ngokhiye.
  2. Dala okufakiwe kuthebula lesithombe.
  3. Uma isithombe sinesimo esisesidlangalaleni, bese wengeza isibali sesithombe esisesidlangalaleni ku-albhamu, buyekeza irekhodi bese wenza okwenziwayo.

Noma nge-pseudocode:

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

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

TX.commit();

Siyabona ukuthi isimo esivame kakhulu sokushintshana kwebhizinisi ukufunda idatha kusuka kusizindalwazi kuya kumemori yeseva yohlelo lokusebenza, ushintshe okuthile futhi ugcine amanani amasha kusizindalwazi. Ngokuvamile ekwenzeni okunjalo sibuyekeza izinhlangano ezimbalwa, amathebula amaningana.

Lapho wenza umsebenzi, ukuguqulwa ngesikhathi esisodwa kwedatha efanayo kusuka kwenye isistimu kungenzeka. Isibonelo, i-Antispam ingase inqume ukuthi umsebenzisi ngandlela thize uyasolisa ngakho-ke zonke izithombe zomsebenzisi akufanele zisaba sesidlangalaleni, kudingeka zithunyelwe ukuze zihlolwe, okusho ukushintsha isimo sesithombe sibe elinye inani nokuvala izinto zokubala ezihambisanayo. Ngokusobala, uma lokhu kusebenza kwenzeka ngaphandle kweziqinisekiso ze-atomicity yohlelo lokusebenza kanye nokuhlukaniswa kwezinguquko ezincintisanayo, njengaku. I-ACID, khona-ke umphumela ngeke ube yilokho okudingekayo - noma i-counter counter izobonisa inani elingalungile, noma akuzona zonke izithombe ezizothunyelwa ukuze zilinganiswe.

Ikhodi eminingi efanayo, ekhohlisa amabhizinisi ahlukahlukene ngaphakathi kokuthengiselana okukodwa, ibhalwe kukho konke ukubakhona kwe-Odnoklassniki. Ngokusekelwe kokuhlangenwe nakho kokuthuthela ku-NoSQL kusuka Ukuvumelana Kokugcina Siyazi ukuthi inselele enkulu (kanye nokutshalwa kwezimali kwesikhathi) kuvela ekuthuthukiseni ikhodi ukuze kugcinwe ukuvumelana kwedatha. Ngakho-ke, sicabangele imfuneko eyinhloko yesitoreji esisha njengelungiselelo lemisebenzi ye-ACID yangempela yohlelo lokusebenza.

Okunye, okungabalulekile kangako, izimfuneko kwakuyizi:

  • Uma isikhungo sedatha sihluleka, kokubili ukufunda nokubhalela endaweni yokugcina entsha kufanele kutholakale.
  • Ukugcina isivinini sokuthuthukiswa samanje. Okusho ukuthi, lapho usebenza nenqolobane entsha, inani lekhodi kufanele licishe lifane; akumele kube nesidingo sokwengeza noma yini endaweni yokugcina, ukuthuthukisa ama-algorithms okuxazulula izingxabano, ukugcina izinkomba zesibili, njll.
  • Ijubane lesitoreji esisha bekufanele libe phezulu kakhulu, lapho kufundwa idatha nalapho kucutshungulwa ukuthengiselana, okwakusho ukuthi izixazululo eziqinile ezifundweni, zomhlaba wonke, kodwa ezihamba kancane, njengokuthi, ngokwesibonelo, bezingasebenzi. izibophezelo zezigaba ezimbili.
  • Ukukala okuzenzakalelayo lapho undiza.
  • Ukusebenzisa amaseva ashibhile avamile, ngaphandle kwesidingo sokuthenga i-hardware engavamile.
  • Amathuba okuthuthukiswa kwesitoreji ngabathuthukisi benkampani. Ngamanye amazwi, kwanikezwa kuqala izixazululo zobunikazi noma zomthombo ovulekile, okungcono kakhulu ku-Java.

Izinqumo, izinqumo

Ukuhlaziya izixazululo ezingaba khona, sifike ezinqumweni ezimbili ezingaba zezakhiwo:

Okokuqala ukuthatha noma iyiphi iseva ye-SQL futhi isebenzise ukubekezelelana kwamaphutha okudingekayo, indlela yokukala, iqoqo le-failover, ukuxazululwa kwezingxabano nokusatshalaliswa, okuthembekile nokusheshayo kwe-ACID. Silinganise le nketho njengengeyona into encane futhi ecindezela abasebenzi.

Inketho yesibili ukuthatha isitoreji esenziwe ngomumo se-NoSQL nesikali esifakiwe, iqoqo le-failover, ukuxazulula izingxabano, nokusebenzisa ukuthengiselana kanye ne-SQL ngokwakho. Uma uthi nhlá, ngisho nomsebenzi wokusebenzisa i-SQL, ingasaphathwa eye-ACID, ubukeka njengomsebenzi ozothatha iminyaka. Kodwa-ke sabona ukuthi isici se-SQL esisisebenzisayo siqhelelene ne-ANSI SQL njengoba UCassandra CQL kude ne-ANSI SQL. Uma sibhekisisa i-CQL, sabona ukuthi isondele kakhulu kulokho ebesikudinga.

I-Cassandra kanye ne-CQL

Ngakho-ke, yini ethokozisayo ngoCassandra, yimaphi amakhono enawo?

Okokuqala, lapha ungakha amathebula asekela izinhlobo ezihlukahlukene zedatha, ungenza KHETHA noma UBUYEKEZE kukhiye oyinhloko.

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

Ukuqinisekisa ukufana kwedatha, i-Cassandra isebenzisa indlela yekhoramu. Esimweni esilula, lokhu kusho ukuthi lapho izifaniso ezintathu zomugqa ofanayo zibekwe ezindaweni ezihlukene zeqoqo, ukubhala kuthathwa njengempumelelo uma iningi lamanodi (okungukuthi, amabili kwamathathu) aqinisekisa impumelelo yalo msebenzi wokubhala. . Idatha yomugqa ibhekwa njengefanayo uma, lapho kufundwa, iningi lamanodi liphonsiwe futhi lawaqinisekisa. Ngakho-ke, ngama-replicas amathathu, ukuvumelana okuphelele nokusheshayo kwedatha kuqinisekisiwe uma inodi eyodwa yehluleka. Le ndlela yasivumela ukuba sisebenzise uhlelo oluthembeke nakakhulu: hlala sithumela izicelo kuzo zontathu izifaniso, silindele impendulo evela kwezimbili ezishesha kakhulu. Impendulo yakamuva ye-replica yesithathu iyalahlwa kuleli cala. I-node ephuzile ukuphendula ingase ibe nezinkinga ezinkulu - amabhuleki, ukuqoqwa kukadoti ku-JVM, ukubuyiswa kwememori eqondile ku-kernel ye-Linux, ukwehluleka kwehadiwe, ukunqanyulwa kunethiwekhi. Nokho, lokhu akuthinti ukusebenza kweklayenti noma idatha nganoma iyiphi indlela.

Indlela lapho sithinta ama-node amathathu futhi sithola impendulo evela kwamabili ibizwa ukuqagela: isicelo sezifaniso ezengeziwe sithunyelwa ngisho nangaphambi kokuthi "siwe".

Enye inzuzo ye-Cassandra i-Batchlog, indlela eqinisekisa ukuthi iqoqo lezinguquko ozenzayo lisetshenziswa ngokugcwele noma alisetshenziswa nhlobo. Lokhu kusivumela ukuthi sixazulule i-A ku-ACID - i-athomu ngaphandle kwebhokisi.

Okusondele kakhulu ekuthengiseni eCassandra yilokho okubizwa ngokuthi “ukuthengiselana okulula". Kodwa zikude nokuthengiswa "kwangempela" kwe-ACID: empeleni, leli yithuba lokwenza CAS kudatha evela kwirekhodi elilodwa kuphela, kusetshenziswa ukuvumelana kusetshenziswa i-heavyweight Paxos protocol. Ngakho-ke, isivinini sokuthengiselana okunjalo siphansi.

Yini esasishoda ngayo eCassandra

Ngakho-ke, bekufanele senze ukuthengiselana kwangempela kwe-ACID eCassandra. Ngokusebenzisa esingasebenzisa kalula ezinye izici ezimbili ezikahle ze-DBMS yakudala: izinkomba ezisheshayo ezingaguquki, ezingasivumela ukuthi senze ukukhetha kwedatha hhayi ngokhiye oyinhloko, kanye nejeneretha evamile yama-ID akhulisa ngokuzenzakalela e-monotonic.

C*Eyodwa

Ngakho kwazalwa i-DBMS entsha C*Eyodwa, ehlanganisa izinhlobo ezintathu zamanodi eseva:

  • Isitoreji - (cishe) amaseva ajwayelekile e-Cassandra anesibopho sokugcina idatha kumadiski endawo. Njengoba umthwalo nevolumu yedatha ikhula, ubuningi bayo bungalinganiswa kalula kumashumi namakhulu.
  • Abaxhumanisi bokwenziwe - qinisekisa ukwenziwa kwemisebenzi.
  • Amaklayenti amaseva ezicelo asebenzisa imisebenzi yebhizinisi futhi aqalise ukuthengiselana. Kungaba nezinkulungwane zamaklayenti anjalo.

I-NewSQL = NoSQL+ACID

Amaseva azo zonke izinhlobo ayingxenye yeqoqo elivamile, sebenzisa umthetho olandelwayo we-Cassandra wangaphakathi ukuze uxhumane inhlebo ngokushintshisana ngolwazi lweqoqo. Nge-Heartbeat, amaseva afunda mayelana nokwehluleka okufanayo, alondoloze i-schema yedatha eyodwa - amathebula, ukwakheka kwawo nokuphindaphinda; isikimu sokuhlukanisa, i-cluster topology, njll.

Amakhasimende

I-NewSQL = NoSQL+ACID

Esikhundleni sabashayeli abajwayelekile, kusetshenziswa imodi ye-Fat Client. I-node enjalo ayigcini idatha, kodwa ingasebenza njengomxhumanisi wokwenziwa kwesicelo, okungukuthi, Iklayenti ngokwalo lisebenza njengomxhumanisi wezicelo zalo: libuza izifanekiso zesitoreji futhi lixazulule izingxabano. Lokhu akukona nje kuphela okunokwethenjelwa futhi okusheshayo kunomshayeli ojwayelekile, okudinga ukuxhumana nomxhumanisi oqhelile, kodwa futhi ikuvumela ukuba ulawule ukudluliswa kwezicelo. Ngaphandle komsebenzi ovuliwe eklayenti, izicelo zithunyelwa kumakhosombe. Uma iklayenti livule umsebenzi, zonke izicelo ezingaphakathi kokwenziwe zithunyelwa kumxhumanisi wokwenziwe.
I-NewSQL = NoSQL+ACID

C*One Transaction Coordinator

Umxhumanisi yinto esiyisebenzisele i-C*One kusukela ekuqaleni. Inesibopho sokuphatha okwenziwayo, izikhiya, kanye ne-oda okwenziwa ngalo okwenziwayo.

Ngokwenziwe ngakunye okunesevisi, umxhumanisi ukhiqiza isitembu sesikhathi: okwenziwayo ngakunye okulandelayo kukhulu kunokwenziwe kwangaphambilini. Njengoba uhlelo luka-Cassandra lokuxazulula izingxabano lusekelwe ezitembuni zesikhathi (zamarekhodi amabili angqubuzanayo, leso esinesitembu sesikhathi sakamuva sithathwa njengesamanje), ukungqubuzana kuzohlala kuxazululwa ngokuvuna okwenziwayo okulandelayo. Kanjalo saqalisa Iwashi le-Lamport - indlela eshibhile yokuxazulula izingxabano ohlelweni olusabalalisiwe.

Amalokhi

Ukuqinisekisa ukuhlukaniswa, sinqume ukusebenzisa indlela elula - izingidi ezingenathemba ngokusekelwe kukhiye oyinhloko werekhodi. Ngamanye amazwi, emsebenzini, irekhodi kufanele liqale likhiywe, bese lifundwa, lilungiswe, futhi lilondolozwe. Kuphela ngemva kokuzibophezela okuphumelelayo lapho irekhodi lingavulwa khona ukuze okwenziwayo okuqhudelanayo kukwazi ukulisebenzisa.

Ukusebenzisa ukukhiya okunjalo kulula endaweni engasatshalaliswa. Kusistimu esabalalisiwe, kunezinketho ezimbili eziyinhloko: noma sebenzisa ukukhiya okusabalalisiwe kuqoqo, noma ukusabalalisa okwenziwayo ukuze imisebenzi ehilela irekhodi elifanayo njalo isevisiwe ngumxhumanisi ofanayo.

Njengoba esimweni sethu idatha isivele yasakazwa phakathi kwamaqembu okuthengiselana kwendawo ku-SQL, kwanqunywa ukuthi kwabelwe amaqembu okuthengiselana wendawo kubaxhumanisi: umxhumanisi oyedwa wenza konke ukuthengiselana ngamathokheni kusuka ku-0 kuya ku-9, okwesibili - ngamathokheni kusuka ku-10 kuya ku-19, njalo njalo. Njengomphumela, isenzakalo ngasinye somxhumanisi siba umphathi weqembu lomsebenzi.

Khona-ke izingidi zingasetshenziswa ngendlela ye-banal HashMap enkumbulweni yomxhumanisi.

Ukwehluleka komxhumanisi

Njengoba umxhumanisi oyedwa esebenzela kuphela iqembu lemisebenzi, kubaluleke kakhulu ukunquma ngokushesha iqiniso lokwehluleka kwakho ukuze umzamo wesibili wokwenza umsebenzi uzophela. Ukwenza lokhu kusheshe futhi kuthembeke, sisebenzise umthetho olandelwayo oxhumeke ngokugcwele wekhoramu yesibetho senhliziyo:

Isikhungo sedatha ngasinye sibamba okungenani amanodi womxhumanisi amabili. Ngezikhathi ezithile, umxhumanisi ngamunye uthumela umlayezo wokushaya kwenhliziyo kwabanye abaxhumanisi futhi ebazisa ngokusebenza kwayo, kanye nokuthi yimiphi imilayezo yokushaya kwenhliziyo ayithole ivela kubaxhumanisi beqoqo okokugcina.

I-NewSQL = NoSQL+ACID

Ukuthola ulwazi olufanayo oluvela kwabanye njengengxenye yemilayezo yabo yokushaya kwenhliziyo, umxhumanisi ngamunye uzinqumela ukuthi yimaphi ama-cluster node asebenzayo nokuthi yimaphi angasebenzi, eqondiswa isimiso sekhoramu: uma i-node X ithole ulwazi oluvela kuningi lama-node kuqoqo mayelana nokujwayelekile. ukwamukela imilayezo evela endaweni engu-Y, bese , u-Y esebenza. Futhi okuphambene nalokho, ngokushesha nje lapho iningi libika imilayezo engekho evela endaweni engu-Y, khona-ke u-Y wenqabile. Kuyathakazelisa ukuthi uma ikhoramu yazisa i-node X ukuthi ayisatholi imilayezo evela kuyo, khona-ke i-node X ngokwayo izozibheka njengehlulekile.

Imilayezo yokushaya kwenhliziyo ithunyelwa ngokuvama okuphezulu, izikhathi ezingaba ngu-20 ngomzuzwana, nenkathi engu-50 ms. E-Java, kunzima ukuqinisekisa impendulo yohlelo lokusebenza phakathi kuka-50 ms ngenxa yobude obuqhathanisekayo bekhefu elibangelwa umqoqi kadoti. Sikwazile ukufeza lesi sikhathi sokuphendula sisebenzisa isiqoqi sikadoti se-G1, esisivumela ukuthi sicacise okuqondisiwe ngesikhathi sokumiswa kwe-GC. Kodwa-ke, ngezinye izikhathi, kuyaqabukela, umqoqi ukuma kancane kudlula i-50 ms, okungaholela ekutholweni kwephutha okungamanga. Ukuvimbela lokhu ukuthi kungenzeki, umxhumanisi akabiki ukwehluleka kwe-node eyihlane lapho umlayezo wokuqala wokushaya kwenhliziyo ovela kuwo unyamalala, kuphela uma abaningi benyamalala ngokulandelana.Yile ndlela esikwazi ngayo ukubona ukwehluleka kwe-node yomxhumanisi ngo-200. ms.

Kodwa akwanele ukuqonda ngokushesha ukuthi iyiphi i-node eyekile ukusebenza. Kudingeka senze okuthile ngalokhu.

Ukubhuka

Uhlelo lwakudala lubandakanya, uma kwenzeka ukwehluleka okuyinhloko, ukuqala ukhetho olusha kusetshenziswa okukodwa kwe imfashini indawo yonke ama-algorithms. Nokho, ama-algorithms anjalo anezinkinga ezaziwayo ngokuhlangana kwesikhathi kanye nobude benqubo yokhetho ngokwalo. Sikwazile ukugwema ukubambezeleka okunjalo okwengeziwe sisebenzisa isikimu sokubuyisela umxhumanisi kunethiwekhi exhunywe ngokugcwele:

I-NewSQL = NoSQL+ACID

Ake sithi sifuna ukwenza ukuthengiselana eqenjini 50. Ake sinqume kusengaphambili uhlelo lokubuyisela, okungukuthi, yiziphi izindawo ezizokwenza ukuthengiselana eqenjini 50 uma kwenzeka ukwehluleka komxhumanisi oyinhloko. Umgomo wethu uwukugcina ukusebenza kwesistimu uma kwenzeka kwehluleka isikhungo sedatha. Ake sinqume ukuthi ukugcinwa kokuqala kuzoba yi-node evela kwesinye isikhungo sedatha, futhi indawo yesibili izoba yi-node esuka kwesithathu. Lolu hlelo lukhethwa kanye futhi alushintshi kuze kube yilapho i-topology yeqoqo ishintsha, okungukuthi, kuze kube yilapho ama-node amasha engena kulo (okwenzeka ngokungajwayelekile). Inqubo yokukhetha inkosi entsha esebenzayo uma endala ihluleka izohlale injengoba ilandelayo: i-reserve yokuqala izoba inkosi esebenzayo, futhi uma iyekile ukusebenza, i-reserve yesibili izoba inkosi esebenzayo.

Lolu hlelo luthembeke kakhulu kune-algorithm yendawo yonke, ngoba ukwenza kusebenze inkosi entsha kwanele ukucacisa ukwehluleka kwendala.

Kodwa amaklayenti azoqonda kanjani ukuthi iyiphi inkosi esebenzayo manje? Akunakwenzeka ukuthumela ulwazi ezinkulungwaneni zamaklayenti ngo-50 ms. Isimo singenzeka lapho iklayenti lithumela isicelo sokuvula umsebenzi, lingazi ukuthi le master ayisasebenzi, futhi isicelo sizophela. Ukuvimbela lokhu ukuthi kungenzeki, amaklayenti athumela ngokuqagela isicelo sokuvula ukuthengiselana kumphathi weqembu kanye nakho kokubili okugciniwe kwakhe ngesikhathi esisodwa, kodwa yilowo oyinkosi esebenzayo okwamanje ozophendula lesi sicelo. Iklayenti lizokwenza konke ukuxhumana okulandelayo ngaphakathi kokuthengiselana kuphela nenkosi esebenzayo.

Ikhophi yasenqolobaneni eyinhloko zibeka izicelo ezitholiwe zemisebenzi okungezona ezabo emgqeni wokwenza okungakazalwa, lapho zigcinwa khona isikhathi esithile. Uma oyinhloko esebenzayo efa, uchwepheshe omusha ucubungula izicelo zokuvula ukuthengiselana emgqeni wayo futhi aphendule iklayenti. Uma iklayenti selivele livule ukuthengiselana nenkosi endala, khona-ke impendulo yesibili ayinakwa (futhi, ngokusobala, ukuthengiselana okunjalo ngeke kuqede futhi kuzophindwa yiklayenti).

Indlela okwenziwa ngayo umsebenzi

Ake sithi iklayenti lithumele isicelo kumxhumanisi sokuvula umsebenzi webhizinisi elinjalo nokhiye oyinhloko. Umxhumanisi ukhiya leli bhizinisi futhi alibeke etafuleni lokukhiya ngenkumbulo. Uma kudingekile, umxhumanisi ufunda leli bhizinisi endaweni yokugcina futhi agcine idatha ewumphumela esimweni somsebenzi kunkumbulo yomxhumanisi.

I-NewSQL = NoSQL+ACID

Uma iklayenti lifuna ukushintsha idatha kumsebenzi, lithumela isicelo kumxhumanisi ukuze alungise ibhizinisi, futhi umxhumanisi ubeka idatha entsha kuthebula lesimo sokwenziwe kumemori. Lokhu kuqeda ukurekhoda - akukho okurekhodiwe okwenziwa endaweni yokubeka.

I-NewSQL = NoSQL+ACID

Uma iklayenti licela idatha yalo eshintshiwe njengengxenye yomsebenzi osebenzayo, umxhumanisi wenza ngale ndlela elandelayo:

  • uma i-ID isivele iku-transaction, khona-ke idatha ithathwa kumemori;
  • uma ingekho i-ID enkumbulweni, khona-ke idatha elahlekile ifundwa ezindaweni zokugcina, kuhlanganiswe nalezo esezivele zisenkumbulweni, futhi umphumela unikezwa iklayenti.

Ngakho-ke, iklayenti lingakwazi ukufunda izinguquko zalo, kodwa amanye amaklayenti awaboni lezi zinguquko, ngoba zigcinwe kuphela enkumbulweni yomxhumanisi; azikabi ku-Cassandra nodes.

I-NewSQL = NoSQL+ACID

Lapho iklayenti lithumela isithembiso, isimo esasisenkumbulweni yesevisi silondolozwa umxhumanisi eqoqweni elilothiwe, futhi sithunyelwa njengenqwaba engeniwe kusitoreji se-Cassandra. Izitolo zenza konke okudingekayo ukuqinisekisa ukuthi le phakheji isetshenziswa nge-athomu (ngokuphelele), futhi ibuyisela impendulo kumxhumanisi, okhulula izingidi futhi aqinisekise impumelelo yokuthengiselana kuklayenti.

I-NewSQL = NoSQL+ACID

Futhi ukuze ubuyisele emuva, umxhumanisi udinga kuphela ukukhulula inkumbulo ehlala isimo sokwenziwe.

Njengomphumela walokhu kuthuthukiswa okungenhla, sisebenzise imigomo ye-ACID:

  • I-Atomicity. Lesi isiqinisekiso sokuthi akukho okwenziwayo okuzorekhodwa ngokwengxenye ohlelweni; kungenzeka konke ukusebenza kwayo okungaphansi kuzoqedwa, noma akukho okuzoqedwa. Sinamathela kulo mgomo ngeqoqo elingene eCassandra.
  • Ukuvumelana. Ukwenziwa ngakunye okuyimpumelelo, ngokwencazelo, kuqopha imiphumela evumelekile kuphela. Uma, ngemva kokuvula umsebenzi nokwenza ingxenye yemisebenzi, kutholakala ukuthi umphumela awuvumelekile, ukubuyisela emuva kuyenziwa.
  • Ukuzihlukanisa. Uma okwenziwayo kwenziwa, okwenziwa ngasikhathi sinye akufanele kuthinte umphumela wako. Imisebenzi eqhudelanayo ihlukaniswa kusetshenziswa izingidi ezingenathemba kumxhumanisi. Okufundwayo ngaphandle kokwenziwe, umgomo wokuzihlukanisa ubonwa ezingeni Elizibophezele Lokufunda.
  • Ukusimama. Kungakhathaliseki ukuthi kunezinkinga emazingeni aphansi—ukuvalwa kwesistimu, ukwehluleka kwehadiwe—izinguquko ezenziwe ukuthengiselana okuqedwe ngempumelelo kufanele zihlale zilondolozwe lapho imisebenzi iqala kabusha.

Ukufunda ngezinkomba

Ake sithathe ithebula elilula:

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

Ine-ID (ukhiye oyinhloko), umnikazi kanye nedethi yokulungiswa. Udinga ukwenza isicelo esilula kakhulu - khetha idatha kumnikazi enedethi yoshintsho "yosuku lokugcina".

SELECT *
WHERE owner=?
AND modified>?

Ukuze lowo mbuzo ucutshungulwe ngokushesha, ku-SQL DBMS yakudala udinga ukwakha inkomba ngamakholomu (umnikazi, ulungisiwe). Lokhu singakwenza kalula, njengoba manje sineziqinisekiso ze-ACID!

Izinkomba ku-C*One

Kukhona ithebula lomthombo elinezithombe lapho i-ID yerekhodi ingukhiye oyinhloko.

I-NewSQL = NoSQL+ACID

Ukuze uthole inkomba, i-C*One idala ithebula elisha eliyikhophi yoqobo. Ukhiye uyafana nenkulumo yenkomba, futhi uhlanganisa nokhiye oyinhloko werekhodi ovela kuthebula lomthombo:

I-NewSQL = NoSQL+ACID

Manje umbuzo othi “umnikazi wosuku lokugcina” ungabhalwa kabusha njengokukhethiwe kwelinye ithebula:

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

Ukuvumelana kwedatha ezithombeni zethebula lomthombo kanye nethebula lenkomba i1 kugcinwa ngokuzenzakalelayo umxhumanisi. Ngokusekelwe ku-schema yedatha kuphela, lapho ushintsho lwamukelwe, umxhumanisi udala futhi agcine ushintsho hhayi kuphela etafuleni eliyinhloko, kodwa futhi namakhophi. Azikho izenzo ezengeziwe ezenziwa etafuleni lenkomba, izingodo azifundiwe, futhi awekho amalokhi asetshenziswayo. Okusho ukuthi, ukwengeza izinkomba kudla cishe akukho zinsiza futhi akunawo umthelela esivinini sokusebenzisa ukuguqulwa.

Ngokusebenzisa i-ACID, sikwazile ukusebenzisa izinkomba ezifana ne-SQL. Ayashintshashintsha, ayakala, ayashesha, ayahlanganiseka, futhi akhelwe olimini lwemibuzo lwe-CQL. Azikho izinguquko kwikhodi yohlelo lokusebenza ezidingekayo ukuze kusekelwe izinkomba. Konke kulula njengaku-SQL. Futhi okubaluleke kakhulu, izinkomba aziphazamisi isivinini sokwenza sokuguqulwa kuthebula lokwenziwe langempela.

Kwenzenjani

Sakha i-C*One eminyakeni emithathu edlule futhi sayethula ekusebenzeni kwezentengiso.

Sitholeni ekugcineni? Ake sihlole lokhu sisebenzisa isibonelo sokucutshungulwa kwesithombe nokugcinwa kwesistimu engaphansi, enye yezinhlobo ezibaluleke kakhulu zedatha kunethiwekhi yokuxhumana nomphakathi. Asikhulumi ngemizimba yezithombe ngokwazo, kodwa ngazo zonke izinhlobo zolwazi lwe-meta. Manje i-Odnoklassniki inamarekhodi anjalo angaba yizigidi eziyizinkulungwane ezingu-20, uhlelo lucubungula izicelo ezifundwayo eziyizinkulungwane ezingu-80 ngomzuzwana, kuze kufike ku-8 XNUMX ukuthengiswa kwe-ACID ngomzuzwana okuhlotshaniswa nokuguqulwa kwedatha.

Lapho sisebenzisa i-SQL ene-replication factor = 1 (kodwa ku-RAID 10), imininingwane yesithombe yayigcinwe kuqoqo elitholakala kakhulu lemishini engu-32 esebenzisa i-Microsoft SQL Server (kanye nezipele eziyi-11). Amaseva ayi-10 nawo abelwe ukugcina izipele. Izimoto ezibizayo ezingu-50 sezizonke. Ngesikhathi esifanayo, isistimu yayisebenza ngomthwalo olinganiselwe, ngaphandle kokugodla.

Ngemva kokuthuthela ohlelweni olusha, sithole i-replication factor = 3 - ikhophi kusikhungo ngasinye sedatha. Uhlelo luqukethe izindawo zokugcina ze-Cassandra ezingu-63 kanye nemishini yokuxhumanisa engu-6, isamba samaseva angu-69. Kodwa le mishini ishibhile kakhulu, izindleko zayo sezizonke zingama-30% wezindleko zohlelo lwe-SQL. Ngesikhathi esifanayo, umthwalo ugcinwa ku-30%.

Ngokwethulwa kwe-C*One, ukubambezeleka kubuye kwehlile: ku-SQL, umsebenzi wokubhala uthathe cishe u-4,5 ms. Ku-C*One - cishe ngo-1,6 ms. Ubude bomsebenzi ngokwesilinganiso bungaphansi kwama-40 ms, ukuzibophezela kuqedwa ngo-2 ms, ubude besikhathi sokufunda nokubhala buyisilinganiso esingu-2 ms. 99th percentile - 3-3,1 ms kuphela, inani lezikhathi zokuvala lehle izikhathi eziyi-100 - konke lokhu kungenxa yokusetshenziswa okubanzi kokuqagela.

Njengamanje, iningi lama-node e-SQL Server acishiwe; imikhiqizo emisha yenziwa kusetshenziswa i-C*One kuphela. Siguqule i-C*One ukuze isebenze emafini ethu ifu elilodwa, okwenze kwaba nokwenzeka ukusheshisa ukuthunyelwa kwamaqoqo amasha, ukwenza kube lula ukumisa nokusebenza ngokuzenzakalelayo. Ngaphandle kwekhodi yomthombo, ukwenza lokhu kungaba nzima kakhulu futhi kube nzima.

Manje sisebenzela ukudlulisela ezinye izindawo zethu zokugcina emafini - kodwa leyo indaba ehluke ngokuphelele.

Source: www.habr.com

Engeza amazwana