NewSQL = NoSQL+ACID

NewSQL = NoSQL+ACID
Ho fihlela haufinyane tjena, Odnoklassniki e bolokile hoo e ka bang 50 TB ea data e sebetsitsoeng ka nako ea nnete ho SQL Server. Bakeng sa molumo o joalo, ho batla ho le thata ho fana ka kapele le ka tšeptjoang, esita le phihlello e sa mamelleheng ea setsi sa data ho sebelisa SQL DBMS. Ka tloaelo, maemong a joalo, e 'ngoe ea polokelo ea NoSQL e sebelisoa, empa hase ntho e' ngoe le e 'ngoe e ka fetisetsoang ho NoSQL: mekhatlo e meng e hloka litiiso tsa transaction tsa ACID.

Sena se ile sa re lebisa ts'ebelisong ea polokelo ea NewSQL, ke hore, DBMS e fanang ka mamello ea liphoso, scalability le ts'ebetso ea lits'ebetso tsa NoSQL, empa ka nako e ts'oanang ho boloka ACID ho netefatsa litsamaiso tse tloaelehileng ho litsamaiso tsa khale. Ho na le litsamaiso tse fokolang tsa indasteri tse sebetsang tsa sehlopha sena se secha, kahoo re ile ra kenya ts'ebetsong tsamaiso e joalo ka borōna 'me ra e kenya tšebetsong ea khoebo.

E sebetsa joang le se etsahetseng - bala tlas'a sehiloeng.

Kajeno, bamameli ba khoeli le khoeli ba Odnoklassniki ke baeti ba ikhethang ba fetang limilione tse 70. Rona Re ho ba bahlano ba holimo liwebsaete tse kholo ka ho fetisisa lefatšeng, le har'a libaka tse mashome a mabeli tseo basebelisi ba qetang nako e ngata ho tsona. Lisebelisoa tsa OK li sebetsana le meroalo e phahameng haholo: likopo tse fetang milione tsa HTTP / sec ka pele. Likarolo tsa sehlopha sa seva sa likotoana tse fetang 8000 li haufi le tse ling - litsing tse 'nè tsa data tsa Moscow, e leng se etsang hore ho khonehe ho netefatsa hore ho na le latency ea marang-rang e ka tlaase ho 1 ms pakeng tsa bona.

Haesale re sebelisa Cassandra ho tloha 2010, ho qala ka mofuta oa 0.6. Kajeno ho na le lihlopha tse 'maloa tse sebetsang. Sehlopha se potlakileng se sebetsa ho feta limilione tse 4 ka motsotsoana, 'me mabenkele a maholo ka ho fetisisa a 260 TB.

Leha ho le joalo, tsena kaofela ke lihlopha tse tloaelehileng tsa NoSQL tse sebelisetsoang polokelo e hokahaneng hantle data. Re ne re batla ho nkela sebaka sa polokelo e tsitsitseng, Microsoft SQL Server, e 'nileng ea sebelisoa ho tloha ha ho thehoa Odnoklassniki. Sebaka sa polokelo se ne se e-na le mechine e fetang 300 ea SQL Server Standard Edition, e nang le 50 TB ea data - mekhatlo ea khoebo. Lintlha tsena li fetotsoe e le karolo ea litšebelisano tsa ACID mme li hloka boemo bo phahameng.

Ho aba lintlha ho li-node tsa SQL Server, re sebelisitse tse otlolohileng le tse tšekaletseng karohano (ho arola). Ho tloha khale, re ne re sebelisa leano le bonolo la ho arola data: mokhatlo ka mong o ne o amahanngoa le lets'oao - ts'ebetso ea ID ea mokhatlo. Mekhatlo e nang le tokeneng e tšoanang e ile ea behoa ho seva e tšoanang ea SQL. Kamano ea lintlha-ntlha e ile ea kenngoa ts'ebetsong e le hore li-tokens tsa litlaleho tse ka sehloohong le tsa bana li lumellane kamehla 'me li behiloe ho seva se le seng. Sebakeng sa marang-rang, hoo e batlang e le lirekoto tsohle li hlahisoa molemong oa mosebelisi - ho bolelang hore data eohle ea mosebelisi ka har'a sistimi e le 'ngoe e sebetsang e bolokiloe ho seva se le seng. Ke hore, khoebo ea khoebo hoo e ka bang kamehla e ne e kenyelletsa litafole tse tsoang ho seva se le seng sa SQL, e leng se ileng sa etsa hore ho khonehe ho etsa bonnete ba ho lumellana ha data ho sebelisa lik'hamphani tsa ACID tsa lehae, ntle le tlhokahalo ea ho e sebelisa. ya liehang ebile e sa tshepehe ajoa ACID ditransekshene.

Ka lebaka la ho sharding le ho potlakisa SQL:

  • Ha re sebelise lithibelo tsa linotlolo tsa kantle ho naha, hobane ha u shard ID ea mokhatlo e kanna ea ba ho seva se seng.
  • Ha re sebelise mekhoa e bolokiloeng le lintho tse susumetsang ka lebaka la mojaro o eketsehileng ho DBMS CPU.
  • Ha re sebelise JOIN ka lebaka la tsohle tse ka holimo le tse ngata tse baloang ka tšohanyetso ho tsoa ho disk.
  • Ka ntle ho khoebo, re sebelisa boemo ba ho itšehla thajana ba Read Uncommitted ho fokotsa litšitiso.
  • Re etsa lintho tse khutšoane feela (ka kakaretso e khuts'oane ho feta 100 ms).
  • Ha re sebelise UPDATE le DELETE ea mela e mengata ka lebaka la palo e kholo ea li-deadlocks - re ntlafatsa rekoto e le 'ngoe feela ka nako.
  • Re lula re botsa ka li-index feela - potso e nang le moralo o felletseng oa sekeno sa tafole bakeng sa rona e bolela ho tlatsa database le ho etsa hore e hlolehe.

Mehato ena e re lumelletse ho pepeta ts'ebetso e batlang e le boholo ho tsoa ho li-server tsa SQL. Leha ho le joalo, mathata a ile a eketseha le ho feta. A re ba shebeng.

Mathata le SQL

  • Kaha re ne re sebelisa sharding e ngotsoeng, ho eketsa li-shards tse ncha ho ne ho etsoa ka letsoho ke batsamaisi. Ka nako ena kaofela, likopi tsa data tse scalable li ne li sa sebetse likopo.
  • Ha palo ea litlaleho tse tafoleng e ntse e hōla, lebelo la ho kenya le ho fetola le fokotseha; ha u eketsa li-index tafoleng e teng, lebelo le theoha ka ntlha e itseng; ho bōptjoa le ho tsosolosa li-index ho etsahala ka nako ea ho theoha.
  • Ho ba le palo e nyane ea Windows bakeng sa SQL Server tlhahisong ho etsa hore taolo ea meaho e be thata

Empa bothata bo boholo ke

mamello ea liphoso

Seva ea khale ea SQL e na le mamello e mpe ea liphoso. Ha re re u na le seva se le seng sa database, 'me se hloleha hang ka mor'a lilemo tse tharo. Nakong ena setša se theohile ka metsotso e 20, e amohelehang. Haeba u na le li-server tse 64, sebaka sa marang-rang se theoha hang ka mor'a libeke tse ling le tse ling tse tharo. 'Me haeba u na le li-server tse 200, joale sebaka sa marang-rang ha se sebetse beke e' ngoe le e 'ngoe. Sena ke bothata.

Ho ka etsoa eng ho ntlafatsa ho mamella liphoso tsa seva sa SQL? Wikipedia e re memela ho haha sehlopha se fumanehang haholo: moo haeba ho hloleha ha karolo efe kapa efe ho na le bekapo.

Sena se hloka sehlopha sa lisebelisoa tse theko e boima: likopi tse ngata, fiber ea optical, polokelo e arolelanoang, 'me ho kenyelletsoa ha polokelo ha ho sebetse ka botšepehi: hoo e ka bang 10% ea li-switches e fela ka ho hlōleha ha node ea "backup" joaloka terene ka morao ho node e kholo.

Empa bothata bo ka sehloohong ba sehlopha se joalo se fumanehang haholo ke ho fumaneha ha zero haeba setsi sa data seo se leng ho sona se hlōleha. Odnoklassniki e na le litsi tse 'ne tsa data,' me re hloka ho netefatsa ts'ebetso haeba ho na le ho hloleha ho felletseng ho e 'ngoe ea tsona.

Bakeng sa sena re ka sebelisa Multi-Master replication e hahiloeng ho SQL Server. Tharollo ena e theko e boima haholo ka lebaka la litšenyehelo tsa software mme e na le mathata a tsebahalang ka ho pheta-pheta - ho lieha ho sa lebelloang ha transaction ka ho pheta-pheta ka mokhoa o lumellanang le ho lieha ho sebelisa lipehelo ('me, ka lebaka leo, ho lahleheloa ke liphetoho) ka ho pheta-pheta ha asynchronous. E boletsoeng tharollo ea likhohlano ka letsoho e etsa hore khetho ena e se ke ea sebetsa ho rona ka botlalo.

Mathata ana kaofela a ne a hloka tharollo e matla, ’me re ile ra qala ho a hlahlobisisa ka botlalo. Mona re hloka ho tloaelana le seo SQL Server e se etsang haholo - litšebelisano.

Ts'ebetso e bonolo

Ha re nahaneng ka ts'ebetso e bonolo ka ho fetisisa, ho tloha ponong ea moqapi oa SQL ea sebelisitsoeng: ho eketsa foto ho albamo. Lialbamo le linepe li bolokiloe ka lipoleiti tse fapaneng. Alebamo e na le khaontara ea lifoto tsa sechaba. Ebe transaction e joalo e arotsoe ka mehato e latelang:

  1. Re thibela albamo ka senotlolo.
  2. Etsa sekeno tafoleng ea linepe.
  3. Haeba foto e na le boemo ba sechaba, joale eketsa k'haontara ea lifoto tsa sechaba ho albamo, nchafatsa rekoto 'me u etse transaction.

Kapa ka pseudocode:

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

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

TX.commit();

Rea bona hore boemo bo atileng haholo bakeng sa khoebo ea khoebo ke ho bala data ho tsoa ho database ho ea mohopolong oa seva sa kopo, ho fetola ho hong le ho boloka boleng bo bocha ho database. Hangata ts'ebetsong e joalo re ntlafatsa mekhatlo e mengata, litafole tse 'maloa.

Ha o etsa transaction, phetoho e tšoanang ea data e ts'oanang ho tsoa ho sistimi e 'ngoe e ka etsahala. Ka mohlala, Antispam e ka 'na ea etsa qeto ea hore mosebedisi o belaella ka tsela e itseng' me ka hona linepe tsohle tsa mosebedisi ha li sa lokela ho ba tsa sechaba, li lokela ho romelloa bakeng sa ho lekanyetsoa, ​​e leng ho bolelang ho fetola photo.boemo ho boleng bo bong le ho tima li-counters tse tsamaellanang. Ho hlakile hore haeba ts'ebetso ena e etsahala ntle le tiiso ea atomicity ea kopo le ho itšehla thajana ea liphetoho tse hlolisang, joalo ka ACID, joale sephetho se ke ke sa e-ba se hlokahalang - ebang setšoantšo sa setšoantšo se tla bontša boleng bo fosahetseng, kapa hase lifoto tsohle tse tla romelloa bakeng sa tekanyo.

Likhoutu tse ngata tse ts'oanang, tse laolang likhoebo tse fapaneng ka har'a khoebo e le 'ngoe, li ngotsoe nakong eohle ea Odnoklassniki. Ho ipapisitsoe le boiphihlelo ba ho falla ho ea ho NoSQL ho tloha Qetello e tsitsitseng Rea tseba hore phephetso e kholo (le matsete a nako) e tsoa ho nts'etsopele ea khoutu ho boloka botsitso ba data. Ka hona, re ile ra nka tlhokahalo ea mantlha ea polokelo e ncha e le tokisetso ea litšebelisano tsa 'nete tsa ACID bakeng sa logic ea kopo.

Litlhoko tse ling, tse seng bohlokoa hakaalo, e ne e le:

  • Haeba setsi sa data se hlōleha, ho bala le ho ngolla polokelong e ncha ho tlameha ho ba teng.
  • Ho boloka lebelo la nts'etsopele ea hajoale. Ka mantsoe a mang, ha u sebetsa le polokelo e ncha, palo ea khoutu e lokela ho batla e lekana; ha hoa lokela ho ba le tlhoko ea ho eketsa letho polokelong, ho nts'etsapele li-algorithms tsa ho rarolla likhohlano, ho boloka li-index tsa bobeli, jj.
  • Lebelo la polokelo e ncha e ne e lokela ho ba holimo haholo, ha u bala lintlha le ha u sebetsana le litšebelisano, e leng se neng se bolela hore litharollo tse thata tsa thuto, tsa bokahohle, empa tse liehang, tse kang, mohlala, li ne li sa sebetse. boitlamo ba mekhahlelo e 'meli.
  • Ho sekala ka tsela e iketsang hang-hang.
  • Ho sebelisa li-server tse theko e tlaase, ntle le tlhokahalo ea ho reka lisebelisoa tse sa tloaelehang.
  • Monyetla oa ntlafatso ea polokelo ke baetsi ba khampani. Ka mantsoe a mang, ho ne ho etelletsoe pele litharollo tsa beng kapa tse bulehileng, haholo Java.

Liqeto, liqeto

Ha re sekaseka litharollo tse ka khonehang, re fihletse likhetho tse peli tse ka khonehang tsa meralo:

Ea pele ke ho nka seva efe kapa efe ea SQL le ho kenya ts'ebetsong ts'ebetso e hlokahalang ea ho mamellana ha phoso, mokhoa oa ho lekanya, sehlopha sa failover, ho rarolla likhohlano le ho ajoa, ho tšeptjoa le ho potlaka ha litšebelisano tsa ACID. Re ile ra beha khetho ena e le e sa reng letho ebile e hloka mosebetsi o boima.

Khetho ea bobeli ke ho nka polokelo ea NoSQL e lokiselitsoeng ka sekhahla se kentsoeng tšebetsong, sehlopha sa failover, tharollo ea likhohlano, le ho kenya tšebetsong litšebelisano le SQL ka bouena. Ha u sheba ka lekhetlo la pele, esita le mosebetsi oa ho kenya ts'ebetsong SQL, re sa bue ka litšebelisano tsa ACID, o shebahala joaloka mosebetsi o tla nka lilemo. Empa joale re ile ra hlokomela hore sebopeho sa SQL seo re se sebelisang ts'ebetsong se hole le ANSI SQL joalo ka Cassandra CQL hole le ANSI SQL. Ha re shebisisa CQL le ho feta, re ile ra hlokomela hore e ne e le haufi haholo le seo re se hlokang.

Cassandra le CQL

Joale, ke eng e khahlisang ka Cassandra, e na le bokhoni bofe?

Taba ea pele, mona o ka etsa litafole tse tšehetsang mefuta e fapaneng ea data; o ka etsa KHETHA kapa HO HLAHALA ka konopo ea mantlha.

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

Ho etsa bonnete ba hore replica data e lumellana, Cassandra o sebelisa katamelo ea quorum. Boemong bo bonolo, sena se bolela hore ha likopi tse tharo tsa mola o le mong li behiloe lihlopheng tse fapaneng tsa sehlopha, mongolo o nkoa o atlehile haeba boholo ba li-node (ke hore, tse peli ho tse tharo) li netefalitse katleho ea ts'ebetso ena ea ho ngola. . Lintlha tsa mola li nkuoa li ts'oana haeba, ha ho baloa, boholo ba li-node li ile tsa hlahlojoa le ho li tiisa. Ka hona, ka likopi tse tharo, ho lumellana ho feletseng le hang-hang ha data ho tiisetsoa haeba node e le 'ngoe e hlōleha. Mokhoa ona o ile oa re lumella ho kenya ts'ebetsong morero o ka tšeptjoang le ho feta: kamehla ho romela likopo ho li-replicas tse tharo, re emetse karabo ho tse peli tse potlakileng. Karabo ea morao-rao ea setšoantšo sa boraro e lahliloe tabeng ena. Node e liehang ho arabela e ka 'na ea e-ba le mathata a tebileng - mariki, pokello ea lithōle ho JVM, ho khutlisa mohopolo o tobileng ho Linux kernel, ho hlōleha ha hardware, ho khaola marang-rang. Leha ho le joalo, sena ha se ame ts'ebetso ea moreki kapa data ka tsela efe kapa efe.

Mokhoa oa ha re ikopanya le li-node tse tharo mme re fumana karabo ho tsoa ho tse peli o bitsoa monahano: kopo ea replicas e eketsehileng e romelloa le pele "e oela".

Molemo o mong oa Cassandra ke Batchlog, mochini o netefatsang hore liphetoho tse ngata tseo u li etsang li sebelisoa ka botlalo kapa ha li sebelisoe ho hang. Sena se re lumella ho rarolla A ho ACID - atomicity ka ntle ho lebokose.

Ntho e haufi haholo le litšebelisano tsa Cassandra ke tse bitsoang "ditransekshene tse bobebe". Empa li hole le litšebelisano tsa "sebele" tsa ACID: ha e le hantle, ona ke monyetla oa ho o etsa CAS ho data ho tsoa rekotong e le 'ngoe feela, ho sebelisa tumellano ho sebelisa protocol ea Paxos e boima. Ka hona, lebelo la litšebelisano tse joalo le tlaase.

Re ne re haelloa ke eng Cassandra

Kahoo, re ile ra tlameha ho kenya tšebetsong litšebelisano tsa 'nete tsa ACID ho Cassandra. Ka ho sebelisa tseo re ka li sebelisang habonolo likarolo tse ling tse peli tse bonolo tsa DBMS ea khale: li-index tse potlakileng, tse ka re lumellang ho etsa khetho ea data eseng feela ka senotlolo sa mantlha, le jenereithara e tloaelehileng ea li-ID tsa monotonic auto-incrementing.

C* E 'ngoe

Kahoo DBMS e ncha e ile ea tsoaloa C* E 'ngoe, e nang le mefuta e meraro ea li-server node:

  • Polokelo - (hoo e batlang e le) li-server tse tloaelehileng tsa Cassandra tse ikarabellang bakeng sa ho boloka data ho li-disk tsa lehae. Ha mojaro le boholo ba data li ntse li hola, bongata ba tsona bo ka fokotsoa habonolo ho isa ho mashome le makholo.
  • Bahokahanyi ba transaction - netefatsa ts'ebetsong ea litšebelisano.
  • Bareki ke li-server tsa kopo tse kenyang tšebetso ea khoebo le ho qala litšebelisano. Ho ka ba le likete tsa bareki ba joalo.

NewSQL = NoSQL+ACID

Li-server tsa mefuta eohle ke karolo ea sehlopha se tloaelehileng, sebelisa protocol ea ka hare ea Cassandra ho buisana le ho buisana. lesebo bakeng sa ho fapanyetsana litaba tsa sehlopha. Ka Heartbeat, li-server li ithuta ka ho hloleha ho kopaneng, ho boloka schema e le 'ngoe ea data - litafole, sebopeho sa tsona le phetisetso; sekema sa karohano, topology ea lihlopha, joalo-joalo.

Batsoali

NewSQL = NoSQL+ACID

Sebakeng sa bakhanni ba tloaelehileng, ho sebelisoa mokhoa oa Fat Client. Node e joalo ha e boloke data, empa e ka sebetsa e le mohokahanyi bakeng sa ts'ebetsong ea kopo, ke hore, Client ka boeona e sebetsa e le mohokahanyi oa likōpo tsa eona: e botsa likopi tsa polokelo le ho rarolla likhohlano. Sena hase feela se ka tšeptjoang le se potlakileng ho feta mokhanni ea tloaelehileng, e hlokang puisano le mohokahanyi oa hole, empa hape e u lumella ho laola phetiso ea likōpo. Ka ntle ho transaction e bulehileng ho moreki, likopo li romelloa polokelong ea polokelo. Haeba mofani a buletse transaction, joale likōpo tsohle tse ka hare ho transaction li romeloa ho mohokahanyi oa transaction.
NewSQL = NoSQL+ACID

C*Mohokahanyi oa Ts'ebetso e le 'ngoe

Mohokahanyi ke ntho eo re e sebelisitseng bakeng sa C * One ho tloha qalong. E na le boikarabello ba ho laola transaction, liloko, le tatellano eo li-transaction li sebelisoang ka eona.

Bakeng sa thekiso e 'ngoe le e 'ngoe ea litšebeletso, mohokahanyi o etsa setempe sa nako: ntho e 'ngoe le e 'ngoe e latelang e kholo ho feta ea pele. Kaha tsamaiso ea Cassandra ea ho rarolla liqabang e thehiloe holim'a litempe tsa linako (tsa lirekoto tse peli tse hanyetsanang, e nang le setempe sa morao-rao se nkoa e le sa morao-rao), khohlano e tla lula e rarolloa molemong oa thekisetsano e latelang. Kahoo re ile ra kenya tshebetsong Oache ea Lamport - mokhoa o theko e tlaase oa ho rarolla likhohlano tsamaisong e ajoang.

Linotlolo

Ho netefatsa ho itšehla thajana, re ile ra etsa qeto ea ho sebelisa mokhoa o bonolo ka ho fetisisa - liloko tse se nang tšepo tse thehiloeng ho senotlolo sa mantlha sa rekoto. Ka mantsoe a mang, khoebong, rekoto e tlameha ho notleloa pele, ka mor'a moo e baloe, e lokisoe, ebe e bolokoa. Ke feela ka mor'a boitlamo bo atlehileng moo rekoto e ka buloang e le hore litšebelisano tse hlolisanang li ka e sebelisa.

Ho kenya ts'ebetsong ho notlela joalo ho bonolo sebakeng se sa abuoang. Tsamaisong e ajoang, ho na le likhetho tse peli tse ka sehloohong: ebang ke ho kenya ts'ebetso ea ho notlela ka har'a sehlopha, kapa ho aba litšebelisano e le hore litšebelisano tse amanang le rekoto e le 'ngoe li sebeletsoe ke mohokahanyi a le mong.

Kaha tabeng ea rona ya data e se e ajoa har'a lihlopha tsa ditransekshene sebakeng SQL, ho ile ha etsoa qeto ea ho abela lihlopha tsa ditransekshene sebakeng seo ho bahokahanyi: mohokahanyi a le mong o etsa ditransekshene tsohle ka tokens ho tloha 0 ho 9, ea bobeli - ka tokens ho tloha 10 ho 19, joalo joalo. Ka lebaka leo, ketsahalo e 'ngoe le e 'ngoe ea mohokahanyi e fetoha mookameli oa sehlopha sa thekiso.

Ebe liloko li ka sebelisoa ka mokhoa oa banal HashMap mohopolong oa mohokahanyi.

Ho hloleha ha mohokahanyi

Kaha mohokahanyi a le mong o sebeletsa sehlopha sa litšebelisano feela, ke habohlokoa haholo ho potlakela ho tseba hore na ho hloleha ha eona ke eng e le hore boiteko ba bobeli ba ho phethahatsa khoebo bo tla fela. Ho etsa sena ka potlako le ho ts'epahala, re sebelisitse protocol e hokahaneng ka botlalo ea quorum heartbeat:

Setsi se seng le se seng sa data se na le bonyane li-node tse peli tsa mohokahanyi. Nako le nako, mohokahanyi e mong le e mong o romela molaetsa oa ho otla ha pelo ho bahokahanyi ba bang le ho ba tsebisa ka ts'ebetso ea eona, hammoho le melaetsa efe ea ho otla ha pelo eo e e fumaneng ho tsoa ho bahokahanyi ba sehlopha sa ho qetela.

NewSQL = NoSQL+ACID

Ha ba fumana boitsebiso bo tšoanang ho tsoa ho ba bang e le karolo ea melaetsa ea ho otla ha pelo ea bona, mohokahanyi e mong le e mong o iketsetsa qeto ea hore na ke li-node life tse sebetsang le tse sa sebetseng, a tataisoa ke molao-motheo oa quorum: haeba node X e fumane boitsebiso bo tsoang ho bongata ba li-node sehlopheng ka se tloaelehileng. ho fumana melaetsa e tsoang ho node Y, ebe , Y ea sebetsa. 'Me ka tsela e fapaneng, hang ha bongata bo tlaleha melaetsa e sieo ho tloha node Y, joale Y e hanne. Hoa makatsa hore ebe haeba quorum e tsebisa node X hore ha e sa amohela melaetsa e tsoang ho eona, node X ka boeona e tla inka e hlōlehile.

Melaetsa ea ho otla ha pelo e romeloa ka makhetlo a mangata, hoo e ka bang makhetlo a 20 ka motsotsoana, ka nako ea 50 ms. Java, ho thata ho netefatsa karabo ea kopo ka har'a 50 ms ka lebaka la bolelele bo lekanang ba khefu e bakiloeng ke moqokeleli oa lithōle. Re khonne ho fihlela nako ena ea karabelo ka ho sebelisa pokello ea lithōle ea G1, e re lumellang ho hlakisa sepheo sa nako ea khefu ea GC. Leha ho le joalo, ka linako tse ling, ka seoelo, mokelli o emisa ho feta 50 ms, e leng se ka lebisang ho fumanoeng phoso ea bohata. E le ho thibela sena hore se se ke sa etsahala, mohokahanyi ha a tlalehe ho hlōleha ha node e hōle ha molaetsa oa pele oa ho otla ha pelo o tsoang ho oona o nyamela, feela haeba ba 'maloa ba nyametse ka tatellano.Ke kamoo re khonneng ho lemoha ho hlōleha ha node ea mohokahanyi ka 200. Mof.

Empa ha hoa lekana ho utloisisa kapele hore na ke node efe e emisitseng ho sebetsa. Re hloka ho etsa ho hong ka taba ena.

Peeletso

Sekema sa khale se kenyelletsa, ha ho ka ba le ho hloleha ho hoholo, ho qala likhetho tse ncha ho sebelisa e 'ngoe ea fesheneng bokahohle algorithms. Leha ho le joalo, li-algorithms tse joalo li na le mathata a tsebahalang ka ho kopana ha nako le bolelele ba khetho ea likhetho ka boeona. Re khonne ho qoba tieho e joalo ka ho sebelisa sekema sa mohokahanyi sebakeng sa marang-rang se hokahaneng ka botlalo:

NewSQL = NoSQL+ACID

A re re re batla ho etsa transaction sehlopheng sa 50. A re ke re tsebe esale pele morero oa ho nkela sebaka, ke hore, ke li-node life tse tla phethahatsa litšebelisano sehlopheng sa 50 ha ho e-na le ho hlōleha ha mohokahanyi ea ka sehloohong. Sepheo sa rona ke ho boloka ts'ebetso ea tsamaiso ha ho ka etsahala hore setsi sa data se hlolehe. Ha re etse qeto ea hore sebaka sa pele sa polokelo e tla ba node e tsoang setsing se seng sa data, 'me sebaka sa bobeli se tla ba node ho tloha ho karolo ea boraro. Morero ona o khethiloe hanngoe 'me ha o fetohe ho fihlela topology ea lihlopha e fetoha, ke hore, ho fihlela li-node tse ncha li kena ho eona (e leng se etsahalang ka seoelo). Mokhoa oa ho khetha monghali e mocha ea sebetsang haeba oa khale o hloleha o tla lula o le ka tsela e latelang: polokelo ea pele e tla fetoha monghali ea sebetsang, 'me haeba e emisitse ho sebetsa, sebaka sa bobeli e tla ba monghali ea sebetsang.

Morero ona o ka tšeptjoa ho feta algorithm ea bokahohle, kaha ho etsa hore mong'a e mocha a sebetse ho lekane ho tseba ho hlōleha ha khale.

Empa bareki ba tla utloisisa joang hore na ke mang ea sebetsang hona joale? Ha ho khonehe ho romella tlhahisoleseling ho bareki ba likete ka 50 ms. Boemo bo ka khoneha ha moreki a romella kopo ea ho bula transaction, a e-so tsebe hore monghali enoa ha a sa sebetsa, mme kopo e tla fela. E le ho thibela sena hore se se ke sa etsahala, bareki ka mokhoa o nahanang ba romela kopo ea ho bula khoebo ho mong'a sehlopha le mehloli ea hae ka bobeli ka nako e le 'ngoe, empa ke eena feela eo e leng monghali ea mafolofolo hona joale ea tla arabela kopo ena. Moreki o tla etsa puisano eohle e latelang ka har'a transaction feela le monghali ea sebetsang.

Li-backup masters li beha likopo tse amohetseng bakeng sa transactions tseo e seng tsa bona moleng oa lipehelo tse e-s'o tsoaloe, moo li bolokiloeng nako e itseng. Haeba monghali ea sebetsang a e-shoa, mong'a e mocha o sebetsa likopo tsa ho bula litšebelisano ho tloha moleng oa hae mme o arabela moreki. Haeba mofani a se a ntse a buletse khoebo le mong'a khale, joale karabo ea bobeli e hlokomolohuoa ('me, ho hlakile, transaction e joalo e ke ke ea phethoa 'me e tla phetoa ke mofani).

Mokhoa oo khoebo e sebetsang ka oona

Ha re re moreki o rometse kopo ho mohokahanyi hore a bule khoebo bakeng sa batho ba joalo le ba joalo ka senotlolo sa mantlha. Mohokahanyi o notlela setheo sena ebe o se beha ka har'a tafole ea ho notlela mohopolong. Haeba ho hlokahala, mohokahanyi o bala setsi sena polokelong mme o boloka lintlha tse hlahisoang sebakeng sa transaction mohopolong oa mohokahanyi.

NewSQL = NoSQL+ACID

Ha moreki a batla ho fetola data ho transaction, e romela kopo ho mohokahanyi ho fetola setheo, mme mohokahanyi o beha data e ncha tafoleng ea maemo a transaction mohopolong. Sena se phethela ho rekota - ha ho rekoto e etsoang polokelong.

NewSQL = NoSQL+ACID

Ha moreki a kopa data ea hae e fetotsoeng e le karolo ea transaction e sebetsang, mohokahanyi o sebetsa ka tsela e latelang:

  • haeba ID e se e ntse e le ts'ebetsong, joale data e nkiloe mohopolong;
  • haeba ho se na ID mohopolong, joale data e sieo e baloa ho tloha libakeng tsa polokelo, e kopantsoe le tse seng li ntse li le mohopolong, 'me sephetho se fuoa mofani.

Kahoo, moreki a ka ipalla liphetoho tsa hae, empa bareki ba bang ha ba bone liphetoho tsena, hobane li bolokiloe mohopolong oa mohokahanyi feela, ha li e-so be li-node tsa Cassandra.

NewSQL = NoSQL+ACID

Ha moreki a romela boitlamo, boemo bo neng bo le mohopolong oa ts'ebeletso bo bolokoa ke mohokahanyi ka har'a betch e kentsoeng, 'me e romelloa e le sehlopha se kentsoeng polokelong ea Cassandra. Mabenkele a etsa ntho e 'ngoe le e' ngoe e hlokahalang ho netefatsa hore sephutheloana sena se sebelisoa ka atomically (ka ho feletseng), 'me se khutlisetsa karabo ho mohokahanyi, ea lokollang liloko le ho tiisa katleho ea ts'ebetso ho mofani.

NewSQL = NoSQL+ACID

'Me ho khutlisa, mohokahanyi o hloka feela ho lokolla mohopolo o tšoaretsoeng ke boemo ba transaction.

Ka lebaka la lintlafatso tse ka holimo, re sebelisitse melao-motheo ea ACID:

  • Atomicity. Ena ke tiisetso ea hore ha ho transaction e tla tlalehoa ka mokhoa o sa fellang tsamaisong; ebang litšebelisano tsohle tsa eona li tla phethoa, kapa ha ho le e 'ngoe e tla phethoa. Re latela molao-motheo ona ka sehlopha se rekiloeng Cassandra.
  • Ho lumellana. Ts'ebetso e 'ngoe le e' ngoe e atlehileng, ka tlhaloso, e tlaleha liphetho tse nepahetseng feela. Haeba, ka mor'a ho bula transaction le ho etsa karolo ea ts'ebetso, ho fumanoa hore sephetho ha sea nepahala, ho etsoa rollback.
  • Ho behwa ka thoko. Ha khoebo e etsoa, ​​​​chelete ea nako e le 'ngoe ha ea lokela ho ama sephetho sa eona. Litšebelisano tse hlolisanoang li arotsoe ka liloko tse se nang tšepo ho mohokahanyi. Bakeng sa tse baloang kantle ho thekisetsano, molao-motheo oa ho itšehla thajana o bonoa maemong a Read Committed.
  • Khokahano. Ho sa tsotelehe mathata a maemong a tlase-ho tima tsamaiso, ho hloleha ha hardware-liphetoho tse entsoeng ke transaction e phethiloeng ka katleho li lokela ho lula li bolokiloe ha ts'ebetso e qala hape.

Ho bala ka li-index

Ha re nke tafole e bonolo:

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

E na le ID (senotlolo sa mantlha), mong'a lona le letsatsi la tokiso. U hloka ho etsa kopo e bonolo haholo - khetha data ho mong'a eona ka letsatsi la phetoho "letsatsi la ho qetela".

SELECT *
WHERE owner=?
AND modified>?

E le hore potso e joalo e sebetsanoe ka potlako, ka SQL DBMS ea khale u hloka ho haha ​​index ka litšiea (mong'a, ea fetotsoeng). Re ka etsa sena habonolo, kaha joale re na le litiisetso tsa ACID!

Li-index ho C* One

Ho na le tafole ea mohloli e nang le linepe moo ID ea rekoto e leng senotlolo sa mantlha.

NewSQL = NoSQL+ACID

Bakeng sa index, C*One e theha tafole e ncha eo e leng kopi ea ea mantlha. Senotlolo se tšoana le polelo ea index, hape e kenyelletsa senotlolo sa mantlha sa rekoto ho tsoa tafoleng ea mohloli:

NewSQL = NoSQL+ACID

Joale potso ea "mong'a letsatsi la ho qetela" e ka ngoloa hape e le khetho ho tsoa tafoleng e 'ngoe:

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

Ho tsitsa ha data ho lifoto tsa tafole ea mohloli le tafole ea index i1 e bolokoa ka bo eona ke mohokahanyi. Ho itšetlehile ka schema ea data feela, ha phetoho e amoheloa, mohokahanyi o hlahisa le ho boloka phetoho eseng feela tafoleng e kholo, empa hape le ka likopi. Ha ho na liketso tse eketsehileng tse etsoang tafoleng ea index, li-log ha li baloe, 'me ha ho liloko tse sebelisoang. Ka mantsoe a mang, ho eketsa li-index ho ja lisebelisoa tse batlang li se na letho 'me ha ho na phello ho lebelo la ho sebelisa liphetoho.

Re sebelisa ACID, re khonne ho kenya ts'ebetsong li-index tse kang SQL. Lia tsitsa, lia qhekelloa, li potlakile, lia khonahala, 'me li hahiloe ka puo ea lipotso tsa CQL. Ha ho liphetoho ho khoutu ea ts'ebeliso e hlokahalang ho ts'ehetsa li-index. Tsohle li bonolo joalo ka SQL. Habohlokoa le ho feta, li-index ha li ame lebelo la ts'ebetso ea liphetoho tafoleng ea pele ea transaction.

Ho etsahetse eng

Re thehile C * One lilemong tse tharo tse fetileng mme ra e qala ts'ebetsong ea khoebo.

Re ile ra fumana eng qetellong? Ha re hlahlobeng sena re sebelisa mohlala oa ts'ebetso ea ts'ebetso le polokelo ea lifoto, e 'ngoe ea mefuta ea bohlokoahali ea data marang-rang a sechaba. Ha re bue ka 'mele oa lifoto ka botsona, empa ka mefuta eohle ea tlhahisoleseling. Hona joale Odnoklassniki e na le litlaleho tse joalo tse ka bang limilione tse likete tse 20, tsamaiso e sebetsana le likopo tse likete tse 80 tse baloang motsotsoana, ho fihlela ho lik'hamphani tse likete tse 8 tsa ACID ka motsotsoana tse amanang le phetoho ea data.

Ha re sebelisa SQL ka replication factor = 1 (empa ho RAID 10), metainformation ea lifoto e ne e bolokiloe sehlopheng se fumanehang haholo sa mechine e 32 e tsamaisang Microsoft SQL Server (hammoho le li-backups tse 11). Li-server tse 10 li boetse li abetsoe ho boloka li-backups. Kakaretso ea likoloi tse 50 tse turang. Ka nako e ts'oanang, sistimi e ne e sebetsa ka lebelo le lekantsoeng, ntle le polokelo.

Ka mor'a ho fallela tsamaisong e ncha, re fumane replication factor = 3 - kopi setsing se seng le se seng sa data. Sistimi e na le li-node tse 63 tsa polokelo ea Cassandra le mechini ea mohokahanyi ea 6, bakeng sa kakaretso ea li-server tse 69. Empa mechine ena e theko e tlaase haholo, litšenyehelo tsa bona kaofela li ka bang 30% ea litšenyehelo tsa tsamaiso ea SQL. Ka nako e ts'oanang, mojaro o bolokiloe ho 30%.

Ka kenyelletso ea C * One, latency e boetse e fokotsehile: ho SQL, ts'ebetso ea ho ngola e nkile hoo e ka bang 4,5 ms. Ho C * One - hoo e ka bang 1,6 ms. Nako ea transaction ka karolelano e ka tlase ho 40 ms, boitlamo bo phetheloa ka 2 ms, nako ea ho bala le ho ngola ke ka karolelano 2 ms. 99th percentile - ke 3-3,1 ms feela, palo ea nako e fokotsehile ka makhetlo a 100 - kaofela ka lebaka la tšebeliso e pharaletseng ea likhopolo-taba.

Hajoale, boholo ba li-node tsa SQL Server li felisitsoe; lihlahisoa tse ncha li ntse li ntlafatsoa ho sebelisoa C * One. Re fetotse C* One hore e sebetse marung a rona leru le le leng, e entseng hore ho khonehe ho potlakisa ho tsamaisoa ha lihlopha tse ncha, ho nolofatsa tlhophiso le ts'ebetso ea boiketsetso. Ntle le khoutu ea mohloli, ho etsa sena ho ka ba thata le ho feta.

Hona joale re sebetsa ho fetisetsa lisebelisoa tsa rona tse ling tsa polokelo marung - empa eo ke pale e fapaneng ka ho feletseng.

Source: www.habr.com

Eketsa ka tlhaloso