NewSQL = NoSQL+AIGID

NewSQL = NoSQL+AIGID
Go dtí le déanaí, stóráil Odnoklassniki thart ar 50 TB sonraí a phróiseáil i bhfíor-am i SQL Server. I gcás toirt den sórt sin, tá sé beagnach dodhéanta rochtain thapa agus iontaofa, fiú amháin, ar lárionad sonraí a fhulaingt go teip a sholáthar ag baint úsáide as SQL DBMS. De ghnáth, i gcásanna den sórt sin, úsáidtear ceann de na stóráil NoSQL, ach ní féidir gach rud a aistriú chuig NoSQL: éilíonn roinnt eintiteas ráthaíochtaí idirbhirt ACID.

Mar thoradh air seo baineadh úsáid as stóráil NewSQL, is é sin, DBMS a sholáthraíonn lamháltas locht, scalability agus feidhmíocht na gcóras NoSQL, ach ag an am céanna a chothabháil na ráthaíochtaí ACID atá eolach ar chórais chlasaiceacha. Is beag córas tionsclaíochta oibre den aicme nua seo, agus mar sin chuireamar a leithéid de chóras i bhfeidhm sinn féin agus chuireamar i bhfeidhm tráchtála é.

Conas a oibríonn sé agus cad a tharla - léigh faoin gearrtha.

Sa lá atá inniu, tá an lucht féachana míosúil de Odnoklassniki níos mó ná 70 milliún cuairteoir uathúil. muid Táimid sna cúig cinn is fearr líonraí sóisialta is mó ar domhan, agus i measc na fiche suíomh ar a chaitheann úsáideoirí an t-am is mó. Láimhseálann an bonneagar OK ualaí an-ard: níos mó ná milliún iarratas HTTP/soicind in aghaidh an tosaigh. Tá codanna de chabhlach freastalaí de níos mó ná 8000 píosa suite gar dá chéile - i gceithre ionad sonraí Moscó, rud a cheadaíonn latency líonra níos lú ná 1 ms eatarthu.

Táimid ag baint úsáide as Cassandra ó 2010, ag tosú le leagan 0.6. Sa lá atá inniu ann tá roinnt dosaen braislí i bhfeidhm. Próiseálann an braisle is tapúla níos mó ná 4 mhilliún oibríocht in aghaidh an tsoicind, agus na siopaí is mó 260 TB.

Mar sin féin, is gnáthchnuasaigh NoSQL iad seo a úsáidtear le haghaidh stórála lag chomhordaithe sonraí. Theastaigh uainn an príomhstóráil chomhsheasmhach, Microsoft SQL Server, a bhí in úsáid ó bunaíodh Odnoklassniki a athsholáthar. Bhí níos mó ná 300 meaisín Eagrán Caighdeánach SQL Server sa stóráil, ina raibh 50 TB de shonraí - aonáin ghnó. Déantar na sonraí seo a mhodhnú mar chuid d'idirbhearta ACID agus éilíonn siad comhsheasmhacht ard.

Chun sonraí a dháileadh thar nóid Freastalaí SQL, úsáideamar ingearach agus cothrománach araon deighilt (scairteadh). Go stairiúil, d'úsáideamar scéim shimplí um chomhroinnt sonraí: bhain gach aonán le comhartha - feidhm de chuid aitheantais an eintitis. Cuireadh aonáin leis an comhartha céanna ar an bhfreastalaí SQL céanna. Cuireadh an caidreamh máistir-mhionsonraithe i bhfeidhm ionas go raibh comharthaí na bpríomhthaifead agus na dtaifead leanaí ag teacht le chéile i gcónaí agus go raibh siad suite ar an bhfreastalaí céanna. I líonra sóisialta, gintear beagnach gach taifead thar ceann an úsáideora - rud a chiallaíonn go bhfuil na sonraí úsáideora go léir laistigh d'fhochóras feidhme amháin stóráilte ar fhreastalaí amháin. Is é sin, bhí táblaí ó fhreastalaí SQL amháin i gceist le hidirbheart gnó beagnach i gcónaí, rud a d'fhág gur féidir comhsheasmhacht sonraí a chinntiú ag baint úsáide as idirbhearta ACID áitiúla, gan aon ghá le húsáid mall agus neamhiontaofa idirbhearta ACID dáilte.

Buíochas le roinnt agus chun SQL a bhrostú:

  • Ní bhainimid úsáid as eochairshrianta Eachtracha, mar nuair a bhíonn an t-aitheantas aonáin á chomhroinnt is féidir é a bheith suite ar fhreastalaí eile.
  • Ní úsáidimid nósanna imeachta stóráilte agus truicear mar gheall ar an ualach breise ar an LAP DBMS.
  • Ní úsáidimid JOINs mar gheall ar an méid thuas go léir agus go leor léamh randamach ón diosca.
  • Lasmuigh d’idirbheart, úsáidimid an leibhéal leithlisithe Read Uncommitted chun stop a chur leis an teorainn ama a laghdú.
  • Ní dhéanaimid ach idirbhearta gearra (ar an meán níos giorra ná 100 ms).
  • Ní bhainimid úsáid as il-hae UpDATE and DELETE mar gheall ar an líon mór glas dúnta - ní nuashonraímid ach taifead amháin ag an am.
  • Ní dhéanaimid i gcónaí fiosrúcháin ach ar innéacsanna - ciallaíonn fiosrúchán le plean scanta tábla iomlán dúinn an bunachar sonraí a ró-ualú agus go dteipeann air.

Cheadaigh na céimeanna seo dúinn feidhmíocht beagnach uasta a bhaint as freastalaithe SQL. Mar sin féin, d'éirigh na fadhbanna níos mó agus níos mó. Breathnaímid orthu.

Fadhbanna le SQL

  • Ós rud é gur úsáideamar bearrtha féinscríofa, rinne riarthóirí mínithe nua a chur leis de láimh. An t-am seo ar fad, ní raibh macasamhla sonraí inscálaithe ag freastal ar iarratais.
  • De réir mar a thagann méadú ar líon na dtaifead sa tábla, laghdaítear luas an ionsáite agus an mhodhnaithe; nuair a chuirtear innéacsanna le tábla atá ann cheana féin, laghdaítear an luas de réir fachtóir; tarlaíonn cruthú agus athchruthú innéacsanna le ham neamhfhónaimh.
  • Bíonn sé deacair bainistíocht bonneagair a bheith agat má tá méid beag Windows le haghaidh SQL Server i dtáirgeadh

Ach tá an fhadhb is mó

lamháltas locht

Tá lamháltas locht lag ag an bhfreastalaí SQL clasaiceach. Ligean le rá nach bhfuil agat ach freastalaí bunachar sonraí amháin, agus go mainneoidh sé uair amháin gach trí bliana. Le linn an ama seo tá an suíomh síos ar feadh 20 nóiméad, rud atá inghlactha. Má tá 64 freastalaí agat, ansin tá an suíomh síos uair amháin gach trí seachtaine. Agus má tá 200 freastalaí agat, ansin ní oibríonn an suíomh gach seachtain. Is fadhb é seo.

Cad is féidir a dhéanamh chun lamháltas lochtanna freastalaí SQL a fheabhsú? Tugann Vicipéid cuireadh dúinn tógáil braisle ar fáil go mór: i gcás ina bhfuil ceann cúltaca ann i gcás teipe ar aon cheann de na comhpháirteanna.

Éilíonn sé seo cabhlach de threalamh costasach: ní oibríonn dúbailtí iomadúla, snáithíní optúla, stóráil roinnte, agus cuimsiú cúlchiste go hiontaofa: críochnaíonn thart ar 10% de na lasca nuair a theipeann ar an nód cúltaca cosúil le traein taobh thiar den phríomhnód.

Ach is é an míbhuntáiste is mó a bhaineann le braisle den sórt sin atá ar fáil go mór ná infhaighteacht nialasach má theipeann ar an ionad sonraí ina bhfuil sé suite. Tá ceithre ionad sonraí ag Odnoklassniki, agus ní mór dúinn oibriú a chinntiú i gcás teip iomlán i gceann acu.

Chun seo a d'fhéadfadh muid a úsáid Il-Máistir macasamhlú ionsuite i SQL Server. Tá an réiteach seo i bhfad níos costasaí mar gheall ar chostas bogearraí agus tá fadhbanna aitheanta aige maidir le macasamhlú - moilleanna dothuartha idirbhirt le macasamhlú sioncronach agus moilleanna ar mhacasamhlacha a chur i bhfeidhm (agus, mar thoradh air sin, modhnuithe caillte) le macasamhlú asincrónach. An intuigthe réiteach coinbhleachta láimhe a dhéanann an rogha seo go hiomlán neamh-infheidhme dúinn.

Bhí réiteach radacach de dhíth ar na fadhbanna seo go léir, agus thosaíomar ar anailís mhionsonraithe a dhéanamh orthu. Anseo ní mór dúinn eolas a fháil ar cad a dhéanann Freastalaí SQL go príomha - idirbhearta.

Idirbheart simplí

Déanaimis machnamh ar an idirbheart is simplí, ó thaobh ríomhchláraitheoir SQL feidhmeach de: grianghraf a chur le halbam. Stóráiltear albam agus grianghraif i bplátaí éagsúla. Tá cuntar poiblí grianghraf ar an albam. Ansin roinntear idirbheart den sórt sin sna céimeanna seo a leanas:

  1. Táimid glas ar an albam le eochair.
  2. Cruthaigh iontráil sa tábla grianghraf.
  3. Má tá stádas poiblí ag an ngrianghraf, cuir cuntar grianghraf poiblí leis an albam, nuashonraigh an taifead agus déan an t-idirbheart.

Nó i pseudocode:

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

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

TX.commit();

Feicimid gurb é an cás is coitianta le haghaidh idirbheart gnó ná sonraí ón mbunachar sonraí a léamh i gcuimhne an fhreastalaí iarratais, rud éigin a athrú agus na luachanna nua a shábháil ar ais go dtí an bunachar sonraí. De ghnáth in idirbheart den sórt sin déanaimid nuashonrú ar roinnt eintiteas, roinnt táblaí.

Agus idirbheart á chur i gcrích, féadfar na sonraí céanna ó chóras eile a mhodhnú go comhthráthach. Mar shampla, féadfaidh Antispam a chinneadh go bhfuil an t-úsáideoir amhrasach ar bhealach éigin agus dá bhrí sin níor cheart go mbeadh grianghraif an úsáideora go léir poiblí a thuilleadh, ní mór iad a sheoladh le haghaidh measarthachta, rud a chiallaíonn go n-athraítear an grianghraf.status go luach éigin eile agus na cuntair chomhfhreagracha a mhúchadh. Ar ndóigh, má tharlaíonn an oibríocht seo gan ráthaíochtaí adamhach an iarratais agus aonrú modhnuithe iomaíocha, mar atá i Aigéad, ansin ní bheidh an toradh mar is gá - léireoidh an gcuntar grianghraf an luach mícheart, nó ní sheolfar gach grianghraf le haghaidh measarthachta.

Scríobhadh go leor cód den chineál céanna, ag ionramháil aonáin ghnó éagsúla laistigh de idirbheart amháin, ar fud Odnoklassniki a bheith ann ar fad. Bunaithe ar thaithí na n-aistrithe chuig NoSQL ó Comhsheasmhacht Deiridh Tá a fhios againn go dtagann an dúshlán is mó (agus infheistíocht ama) as cód a fhorbairt chun comhsheasmhacht sonraí a choinneáil. Mar sin, mheasamar gurb é an príomhriachtanas don stóráil nua soláthar d’idirbhearta fíor-AICID le haghaidh loighic iarratais.

Riachtanais eile nach lú tábhacht ná:

  • Má theipeann ar an ionad sonraí, ní mór léitheoireacht agus scríobh chuig an stóras nua a bheith ar fáil.
  • Luas forbartha reatha a chothabháil. Is é sin, nuair a bhíonn tú ag obair le stór nua, ba cheart go mbeadh méid an chóid thart ar an gcéanna; níor cheart go mbeadh gá le haon rud a chur leis an stór, halgartaim a fhorbairt chun coinbhleachtaí a réiteach, innéacsanna tánaisteacha a choinneáil, etc.
  • B’éigean do luas na stórála nua a bheith sách ard, nuair a bhí sonraí á léamh agus nuair a bhí idirbhearta á bpróiseáil, rud a chiallaigh go héifeachtach nach raibh réitigh atá dian go hacadúil, uilíoch ach mall, ar nós, mar shampla, infheidhme. gealltanas dhá chéim.
  • Scálú uathoibríoch ar an eitilt.
  • Ag baint úsáide as freastalaithe saor rialta, gan aon ghá le crua-earraí coimhthíocha a cheannach.
  • Féidearthacht forbartha stórála ag forbróirí cuideachtaí. I bhfocail eile, tugadh tosaíocht do réitigh dílseánaigh nó foinse oscailte, i Java de rogha.

Cinntí, cinntí

Agus anailís á déanamh againn ar réitigh fhéideartha, thángamar ar dhá rogha ailtireachta féideartha:

Is é an chéad cheann ná aon fhreastalaí SQL a ghlacadh agus an lamháltas locht riachtanach, meicníocht scálaithe, braisle teip, réiteach coinbhleachta agus idirbhearta ACID dáilte, iontaofa agus tapa a chur i bhfeidhm. Rinneamar rátáil ar an rogha seo mar rogha an-neamhfhánach agus an-dian ar shaothar.

Is é an dara rogha ná stóras NoSQL réamhdhéanta a ghlacadh le scálú curtha i bhfeidhm, braisle teip, réiteach coinbhleachta, agus idirbhearta a chur i bhfeidhm agus SQL féin. Ar an gcéad amharc, fiú an tasc a bhaineann le SQL a chur i bhfeidhm, gan trácht ar idirbhearta ACID, is cosúil le tasc a thógfaidh blianta. Ach ansin thuig muid go bhfuil an tacar gné SQL a úsáidimid go praiticiúil chomh fada ó ANSI SQL mar Cassandra CQL i bhfad ó ANSI SQL. Ag breathnú níos dlúithe fós ar CQL, thuig muid go raibh sé gar go leor don méid a bhí ag teastáil uainn.

Cassandra agus CQL

Mar sin, cad atá suimiúil faoi Cassandra, cad iad na cumais atá aige?

Ar an gcéad dul síos, anseo is féidir leat táblaí a chruthú a thacaíonn le cineálacha éagsúla sonraí; is féidir leat ROGHNÚ nó Nuashonrú a dhéanamh ar an bpríomheochair.

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

Chun comhsheasmhacht sonraí macasamhail a chinntiú, úsáideann Cassandra cur chuige córam. Sa chás is simplí, ciallaíonn sé seo nuair a chuirtear trí mhacasamhail den tsraith chéanna ar nóid éagsúla den bhraisle, meastar go n-éiríonn leis an scríobh má dheimhnigh formhór na nóid (is é sin dhá cheann as gach triúr) rathúlacht na hoibríochta seo. . Meastar go bhfuil sonraí na rónna comhsheasmhach más rud é, agus iad á léamh, gur polladh agus gur dheimhnigh formhór na nóid iad. Mar sin, le trí mhacasamhail, ráthaítear comhsheasmhacht sonraí iomlána agus toirt má theipeann ar nód amháin. Cheadaigh an cur chuige seo dúinn scéim níos iontaofa fós a chur i bhfeidhm: cuir iarratais chuig na trí mhacasamhail i gcónaí, ag fanacht le freagra ón dá cheann is tapúla. Fágtar freagra déanach an tríú macasamhail i leataobh sa chás seo. D'fhéadfadh fadhbanna tromchúiseacha a bheith ag nód atá déanach le freagairt - coscáin, bailiú truflais sa JVM, aisghairm chuimhne díreach san eithne Linux, teip crua-earraí, dícheangal ón líonra. Mar sin féin, ní chuireann sé seo isteach ar oibríochtaí nó sonraí an chliaint ar bhealach ar bith.

Tugtar an cur chuige nuair a dhéanaimid teagmháil le trí nód agus nuair a fhaighimid freagra ó bheirt tuairimíocht: seoltar iarratas ar mhacasamhla breise fiú sula dtiteann sé as.

Buntáiste eile a bhaineann le Cassandra is ea Batchlog, meicníocht a chinntíonn go gcuirtear baisc athruithe a dhéanann tú i bhfeidhm go hiomlán nó nach gcuirtear i bhfeidhm iad ar chor ar bith. Ligeann sé seo dúinn réiteach A in ACID - adamhach as an mbosca.

Is é an rud is gaire d’idirbhearta i Cassandra na cinn ar a dtugtar “idirbhearta éadroma“. Ach tá siad i bhfad ó "fíor" idirbhearta ACID: i ndáiríre, tá sé seo deis a dhéanamh CAS ar shonraí ó thaifead amháin, ag baint úsáide as comhdhearcadh agus úsáid á baint as prótacal trom-mheáchain Paxos. Dá bhrí sin, tá luas na n-idirbheart den sórt sin íseal.

Cad a bhí ar iarraidh orainn i Cassandra

Mar sin, bhí orainn idirbhearta ACID fíor a chur i bhfeidhm i Cassandra. Ag baint úsáide as a bhféadfaimis dhá ghné áisiúil eile de DBMS clasaiceach a chur i bhfeidhm go héasca: innéacsanna tapa comhsheasmhacha, a chuirfeadh ar ár gcumas roghnúcháin sonraí a dhéanamh ní hamháin de réir an eochair phríomha, agus gineadóir rialta aitheantais uath-mhéadaithe monotonach.

C*Aon

Mar sin rugadh DBMS nua C*Aon, comhdhéanta de thrí chineál nóid fhreastalaí:

  • Stóráil – (beagnach) freastalaithe caighdeánacha Cassandra atá freagrach as sonraí a stóráil ar dhioscaí áitiúla. De réir mar a mhéadaíonn ualach agus méid na sonraí, is furasta a gcainníocht a scála go dtí na mílte agus na céadta.
  • Comhordaitheoirí Idirbheart - deimhin a dhéanamh de chur i gcrích na n-idirbheart.
  • Is freastalaithe feidhmchláir iad cliaint a chuireann oibríochtaí gnó i bhfeidhm agus a thionscnaíonn idirbhearta. Is féidir na mílte cliant den sórt sin a bheith ann.

NewSQL = NoSQL+AIGID

Tá freastalaithe de gach cineál mar chuid de bhraisle coiteann, bain úsáid as prótacal teachtaireacht Cassandra inmheánach chun cumarsáid a dhéanamh lena chéile agus gossip chun faisnéis bhraisle a mhalartú. Le Heartbeat, foghlaimíonn freastalaithe faoi theipeanna frithpháirteacha, scéimre sonraí amháin a chothabháil - táblaí, a struchtúr agus a macasamhlú; scéim deighilte, topology braisle, etc.

Cliaint

NewSQL = NoSQL+AIGID

In ionad tiománaithe caighdeánach, úsáidtear modh Saill Cliant. Ní stórálann nód den sórt sin sonraí, ach féadann sé gníomhú mar chomhordaitheoir chun iarratais a fhorghníomhú, is é sin, gníomhaíonn an Cliant féin mar chomhordaitheoir ar a iarrataí: ceistíonn sé macasamhla stórála agus réitíonn sé coinbhleachtaí. Ní hamháin go bhfuil sé seo níos iontaofa agus níos tapúla ná an tiománaí caighdeánach, a éilíonn cumarsáid le comhordaitheoir iargúlta, ach freisin ligeann duit tarchur iarratais a rialú. Lasmuigh d’idirbheart atá oscailte don chliant, seoltar iarratais chuig stórtha. Má tá idirbheart oscailte ag an gcliant, seoltar gach iarratas laistigh den idirbheart chuig an gcomhordaitheoir idirbheart.
NewSQL = NoSQL+AIGID

C* Comhordaitheoir Idirbhirt amháin

Is rud é an comhordaitheoir a chuireamar i bhfeidhm do C*One ón tús. Tá sé freagrach as idirbhearta a bhainistiú, glais, agus an t-ord ina gcuirtear idirbhearta i bhfeidhm.

I gcás gach idirbhirt seirbhísithe, gineann an comhordaitheoir stampa ama: tá gach idirbheart ina dhiaidh sin níos mó ná an t-idirbheart roimhe sin. Ós rud é go bhfuil córas réitigh coinbhleachta Cassandra bunaithe ar stampaí ama (de dhá thaifead choinbhleachta, meastar gurb é an ceann a bhfuil an stampa ama is déanaí leis mar atá), réiteofar an choinbhleacht i gcónaí i bhfabhar an idirbhirt ina dhiaidh sin. Dá bhrí sin i bhfeidhm againn Uaireadóir Lamport - bealach saor chun coinbhleachtaí a réiteach i gcóras dáilte.

Glais

Chun aonrú a chinntiú, shocraigh muid an modh is simplí a úsáid - glais dhoirbh bunaithe ar phríomheochair an taifid. I bhfocail eile, in idirbheart, ní mór taifead a ghlasáil ar dtús, agus ansin é a léamh, a mhodhnú agus a shábháil. Ní féidir taifead a dhíghlasáil ach amháin tar éis gealltanas rathúil ionas gur féidir le hidirbhearta iomaíocha é a úsáid.

Tá sé simplí glasáil den sórt sin a chur i bhfeidhm i dtimpeallacht neamhdháilte. I gcóras dáilte, tá dhá phríomhrogha ann: glasáil dáilte a chur i bhfeidhm ar an mbraisle, nó idirbhearta a dháileadh ionas go ndéanann an comhordaitheoir céanna seirbhísiú i gcónaí ar idirbhearta a bhaineann leis an taifead céanna.

Ós rud é inár gcás go bhfuil na sonraí scaipthe cheana féin i measc grúpaí idirbhearta áitiúla i SQL, socraíodh grúpaí idirbheart áitiúla a shannadh do chomhordaitheoirí: déanann comhordaitheoir amháin gach idirbheart le comharthaí ó 0 go 9, an dara ceann - le comharthaí ó 10 go 19, agus mar sin de. Mar thoradh air sin, déantar máistir an ghrúpa idirbheart de gach ceann de na cásanna comhordaitheora.

Ansin is féidir glais a chur i bhfeidhm i bhfoirm HashMap banal i gcuimhne an chomhordaitheora.

Teipeanna comhordaitheora

Ós rud é go bhfreastalaíonn comhordaitheoir amháin ar ghrúpa idirbheart go heisiach, tá sé thar a bheith tábhachtach a chinneadh go tapa go bhfuil teipthe ann ionas go mbeidh an t-am istigh sa dara iarracht an t-idirbheart a chur i gcrích. Chun é seo a dhéanamh tapa agus iontaofa, d’úsáideamar prótacal buille cloiste córam lánnasctha:

Tá ar a laghad dhá nód chomhordaitheora i ngach ionad sonraí. Ó am go chéile, cuireann gach comhordaitheoir teachtaireacht chroí chuig na comhordaitheoirí eile agus cuireann sé in iúl dóibh faoina fheidhmiú, chomh maith leis na teachtaireachtaí croí a fuair sé ó na comhordaitheoirí sa bhraisle an uair dheireanach.

NewSQL = NoSQL+AIGID

Agus faisnéis chomhchosúil á fáil aige ó dhaoine eile mar chuid dá dteachtaireachtaí buille croí, cinneann gach comhordaitheoir dó féin cé na nóid bhraisle atá ag feidhmiú agus cé na nóid nach bhfuil, faoi threoir phrionsabal an chóram: má tá faisnéis faighte ag nód X ó fhormhór na nóid sa bhraisle maidir leis an ngnáthnós. teachtaireachtaí a fháil ó nód Y, ansin , oibríonn Y. Agus vice versa, chomh luath agus a thuairiscíonn an tromlach teachtaireachtaí ar iarraidh ó nód Y, ansin dhiúltaigh Y. Tá sé aisteach, má chuireann an córam in iúl do nód X nach bhfuil sé ag fáil teachtaireachtaí uaidh a thuilleadh, go measfaidh nód X féin gur theip air.

Seoltar teachtaireachtaí buille croí le minicíocht ard, thart ar 20 uair in aghaidh an tsoicind, le tréimhse de 50 ms. I Java, tá sé deacair freagra iarratais a ráthú laistigh de 50 ms mar gheall ar fhad inchomparáide na sosanna de bharr an bhailitheora truflais. Bhíomar in ann an t-am freagartha seo a bhaint amach trí úsáid a bhaint as an mbailitheoir truflais G1, a ligeann dúinn sprioc a shonrú ar feadh ré na sosanna GC. Uaireanta, áfach, go hannamh go leor, bíonn sosanna an bhailitheora níos mó ná 50 ms, rud a d’fhéadfadh a bheith ina chúis le locht bréagach a bhrath. Chun é seo a chosc, ní thuairiscíonn an comhordaitheoir teip ar nód cianda nuair a imíonn an chéad teachtaireacht croí uaidh, ach amháin má tá roinnt acu imithe i ndiaidh a chéile. ms.

Ach ní leor a thuiscint go tapa cén nód a stop feidhmiú. Caithfimid rud éigin a dhéanamh faoi seo.

Áirithint

Is éard atá i gceist leis an scéim clasaiceach, i gcás máistreacht, toghchán nua a thosú ag baint úsáide as ceann de na faiseanta uilíoch halgartaim. Mar sin féin, tá fadhbanna aitheanta ag algartaim den sórt sin maidir le cóineasú ama agus fad an phróisis toghcháin féin. Bhíomar in ann moill bhreise den sórt sin a sheachaint trí úsáid a bhaint as scéim athsholáthair comhordaitheora i líonra lánnasctha:

NewSQL = NoSQL+AIGID

Ligean le rá gur mhaith linn idirbheart a dhéanamh i ngrúpa 50. Déanaimis an scéim athsholáthair a chinneadh roimh ré, is é sin, cé na nóid a dhéanfaidh idirbhearta i ngrúpa 50 i gcás teip ar an bpríomhchomhordaitheoir. Is é an sprioc atá againn feidhmiúlacht an chórais a choinneáil i gcás teipe san ionad sonraí. Déanaimis a chinneadh go mbeidh an chéad chúlchiste ina nód ó ionad sonraí eile, agus beidh an dara cúlchiste ina nód ón tríú cuid. Roghnaítear an scéim seo uair amháin agus ní athraíonn sé go dtí go n-athraíonn topology an bhraisle, is é sin, go dtí go dtéann nóid nua isteach ann (rud a tharlaíonn go han-annamh). Beidh an nós imeachta maidir le máistir gníomhach nua a roghnú má theipeann ar an seancheann mar seo a leanas i gcónaí: beidh an chéad chúlchiste ina mháistir gníomhach, agus má stop sé ag feidhmiú, beidh an dara cúlchiste ina mháistir gníomhach.

Tá an scéim seo níos iontaofa ná an algartam uilíoch, ós rud é chun máistir nua a ghníomhachtú tá sé go leor chun a chinneadh an teip ar an sean.

Ach conas a thuigfidh cliaint cén máistir atá ag obair anois? Tá sé dodhéanta faisnéis a sheoladh chuig na mílte cliant i 50 ms. Is féidir cás a dhéanamh nuair a sheolann cliant iarratas chun idirbheart a oscailt, gan a fhios go fóill nach bhfuil an máistir seo ag feidhmiú a thuilleadh, agus beidh an t-am istigh leis an iarratas. Chun é seo a chosc, cuireann cliaint iarratas go tuairimeach ar idirbheart a oscailt chuig an máistir grúpa agus an dá chúlchiste aige ag an am céanna, ach ní fhreagróidh ach an té atá ina mháistir gníomhach faoi láthair ar an iarratas seo. Ní dhéanfaidh an cliant gach cumarsáid ina dhiaidh sin laistigh den idirbheart ach amháin leis an máistir gníomhach.

Cuireann máistrí cúltaca iarratais a fuarthas ar idirbhearta nach leo féin isteach i scuaine na n-idirbheart gan bhreith, áit a stóráiltear iad ar feadh tamaill. Má fhaigheann an máistir gníomhach bás, déanann an máistir nua iarratais ar idirbhearta a oscailt óna scuaine agus freagraíonn sé don chliant. Má tá idirbheart oscailte ag an gcliant leis an sean-mháistir cheana féin, ansin déantar neamhaird ar an dara freagra (agus, ar ndóigh, ní chríochnóidh idirbheart den sórt sin agus déanfaidh an cliant é arís).

Conas a oibríonn an t-idirbheart

Ligean le rá gur chuir cliant iarratas chuig an gcomhordaitheoir chun idirbheart a oscailt le haghaidh eintiteas den sórt sin agus eintiteas den sórt sin le heochair phríomha den sórt sin agus den sórt sin. Glasálann an comhordaitheoir an t-aonán seo agus cuireann sé sa tábla glas é i gcuimhne. Más gá, léann an comhordaitheoir an t-eintiteas seo ón stóráil agus stórálann sé na sonraí a thagann as i riocht idirbhirt i gcuimhne an chomhordaitheora.

NewSQL = NoSQL+AIGID

Nuair is mian le cliant sonraí a athrú in idirbheart, cuireann sé iarratas chuig an gcomhordaitheoir an t-eintiteas a mhodhnú, agus cuireann an comhordaitheoir na sonraí nua sa tábla stádais idirbhirt i gcuimhne. Críochnaíonn sé seo an taifeadadh - ní dhéantar aon taifeadadh chuig an stór.

NewSQL = NoSQL+AIGID

Nuair a iarrann cliant a shonraí athraithe féin mar chuid d’idirbheart gníomhach, gníomhaíonn an comhordaitheoir mar a leanas:

  • má tá an ID san idirbheart cheana féin, ansin tógtar na sonraí ó chuimhne;
  • mura bhfuil aon ID sa chuimhne, ansin léitear na sonraí atá ar iarraidh ó na nóid stórála, in éineacht leo siúd atá i gcuimhne cheana féin, agus tugtar an toradh don chliant.

Mar sin, is féidir leis an gcliant a chuid athruithe féin a léamh, ach ní fheiceann cliaint eile na hathruithe seo, toisc go stóráiltear iad i gcuimhne an chomhordaitheora amháin; níl siad fós i nóid Cassandra.

NewSQL = NoSQL+AIGID

Nuair a sheolann an cliant gealltanas, sábhálann an comhordaitheoir an stát a bhí i gcuimhne na seirbhíse i mbaisc logáilte, agus seoltar é mar bhaisc logáilte chuig stóras Cassandra. Déanann na siopaí gach rud is gá chun a chinntiú go gcuirtear an pacáiste seo i bhfeidhm go atomically (go hiomlán), agus cuireann siad freagra ar ais chuig an gcomhordaitheoir, a scaoileann na glais agus a dhearbhaíonn rath an idirbhirt don chliant.

NewSQL = NoSQL+AIGID

Agus le dul ar ais, ní gá don chomhordaitheoir ach an chuimhne atá á áitiú ag stát an idirbhirt a shaoradh.

Mar thoradh ar na feabhsuithe thuas, chuireamar na prionsabail ACID i bhfeidhm:

  • Atomity. Is ráthaíocht é seo nach ndéanfar aon idirbheart a thaifeadadh go páirteach sa chóras; cuirfear a chuid fo-oibríochtaí go léir i gcrích, nó nach gcríochnófar aon idirbheart. Cloíimid leis an bprionsabal seo trí bhaisc logáilte i Cassandra.
  • Comhsheasmhacht. Ní dhéanann gach idirbheart rathúil, de réir sainmhínithe, ach torthaí bailí a thaifeadadh. Más rud é, tar éis idirbheart a oscailt agus cuid de na hoibríochtaí a dhéanamh, go bhfaightear amach go bhfuil an toradh neamhbhailí, déanfar ais-rolladh.
  • Leithlis. Nuair a dhéantar idirbheart, níor cheart go ndéanfadh idirbhearta comhthráthacha difear dá thoradh. Déantar idirbhearta iomaíocha a aonrú trí úsáid a bhaint as glais dhoirbh ar an gcomhordaitheoir. Maidir le léamha lasmuigh d’idirbheart, breathnaítear prionsabal an leithlisithe ar an leibhéal Léamh Tiomanta.
  • Inbhuanaitheacht. Beag beann ar na fadhbanna ag leibhéil níos ísle - blackout córais, cliseadh crua-earraí - ba cheart go bhfanfadh athruithe arna ndéanamh ag idirbheart a cuireadh i gcrích go rathúil nuair a thosaíonn oibríochtaí arís.

Léamh de réir innéacsanna

Tógaimis tábla simplí:

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

Tá ID (príomheochair), úinéir agus dáta modhnaithe aige. Ní mór duit iarratas an-simplí a dhéanamh - roghnaigh sonraí ar an úinéir leis an dáta athraithe “don lá deiridh”.

SELECT *
WHERE owner=?
AND modified>?

Chun ceist den sórt sin a phróiseáil go tapa, i SQL DBMS clasaiceach ní mór duit innéacs a thógáil de réir colúin (úinéir, modhnaithe). Is féidir linn é seo a dhéanamh go héasca, ós rud é go bhfuil ráthaíochtaí ACID againn anois!

Innéacsanna i C* One

Tá tábla foinse ann le grianghraif ina bhfuil aitheantas an taifid mar phríomheochair.

NewSQL = NoSQL+AIGID

Le haghaidh innéacs, cruthaíonn C*One tábla nua ar cóip é den bhuntábla. Tá an eochair mar an gcéanna leis an slonn innéacs, agus folaíonn sé freisin eochair phríomhúil an taifid ón tábla foinse:

NewSQL = NoSQL+AIGID

Anois is féidir an cheist maidir le “úinéir don lá deiridh” a athscríobh mar rogha ó thábla eile:

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

Coinníonn an comhordaitheoir comhsheasmhacht na sonraí sna grianghraif tábla foinse agus sa tábla innéacs i1 go huathoibríoch. Bunaithe ar an scéimre sonraí amháin, nuair a fhaightear athrú, gineann agus stórálann an comhordaitheoir athrú, ní hamháin sa phríomhthábla, ach freisin i gcóipeanna. Ní dhéantar aon ghníomhartha breise ar an tábla innéacs, ní léitear logaí, agus ní úsáidtear glais. Is é sin le rá, ní ídíonn cur innéacsanna beagnach aon acmhainní agus is beag tionchar atá aige ar luas chur i bhfeidhm na modhnuithe.

Ag baint úsáide as ACID, bhíomar in ann innéacsanna cosúil le SQL a chur i bhfeidhm. Tá siad comhsheasmhach, inscálaithe, tapa, in-chomhdhéanta, agus ionsuite i dteanga cheist CQL. Ní gá aon athruithe ar chód an fheidhmchláir chun tacú le hinnéacsanna. Tá gach rud chomh simplí agus atá i SQL. Agus is tábhachtaí fós, ní dhéanann innéacsanna difear do luas forghníomhaithe na modhnuithe ar an tábla idirbheart bunaidh.

Cad a tharla

D'fhorbraíomar C* One trí bliana ó shin agus sheolamar i bhfeidhm tráchtála é.

Cad a fuair muid sa deireadh? Déanaimis é seo a mheas ag baint úsáide as sampla an fhochórais próiseála agus stórála grianghraf, ar cheann de na cineálacha sonraí is tábhachtaí i líonra sóisialta. Nílimid ag caint faoi chomhlachtaí na ngrianghraf féin, ach faoi gach cineál meitea-fhaisnéise. Anois tá thart ar 20 billiún taifead den sórt sin ag Odnoklassniki, próiseálann an córas 80 míle iarratas léite in aghaidh an tsoicind, suas le 8 míle idirbheart AICID in aghaidh an tsoicind a bhaineann le modhnú sonraí.

Nuair a d’úsáideamar SQL le fachtóir macasamhlaithe = 1 (ach i RAID 10), rinneadh faisnéis an mheithealaithe grianghraf a stóráil ar bhraisle de 32 meaisín a bhí ar fáil go mór ag rith Microsoft SQL Server (móide 11 chúltaca). Leithdháileadh 10 bhfreastalaí freisin chun cúltacaí a stóráil. Iomlán de 50 gluaisteáin daor. Ag an am céanna, d'oibrigh an córas ag ualach rátáil, gan cúlchiste.

Tar éis dul ar imirce go dtí an córas nua, fuaireamar fachtóir macasamhlú = 3 - cóip i ngach ionad sonraí. Tá an córas comhdhéanta de 63 nód stórála Cassandra agus 6 inneall comhordaithe, as 69 freastalaí san iomlán. Ach tá na meaisíní seo i bhfad níos saoire, tá a gcostas iomlán thart ar 30% de chostas córas SQL. Ag an am céanna, coimeádtar an t-ualach ag 30%.

Le tabhairt isteach C*One, tháinig laghdú ar an bhfoighne freisin: i SQL, ghlac oibríocht scríofa thart ar 4,5 ms. In C* One - thart ar 1,6 ms. Tá fad an idirbhirt níos lú ná 40 ms ar an meán, cuirtear an tiomantas i gcrích in 2 ms, is é an fad léamh agus scríobh ná 2 ms ar an meán. 99 peircintíl - ach 3-3,1 ms, tá líon na timeouts laghdú de 100 uair - ar fad mar gheall ar úsáid fhorleathan tuairimíocht.

Faoin am seo, tá an chuid is mó de na nóid Freastalaí SQL díchoimisiúnaithe; tá táirgí nua á bhforbairt ag baint úsáide as C* One amháin. Chuireamar C*One in oiriúint le bheith ag obair inár néal aon-scamall, rud a chuir ar chumas imscaradh braislí nua a bhrostú, cumraíocht a shimpliú agus oibriú uathoibrithe. Gan an cód foinse, bheadh ​​sé seo i bhfad níos deacra agus níos deacra.

Anois táimid ag obair ar ár n-áiseanna stórála eile a aistriú go dtí an scamall - ach is scéal go hiomlán difriúil é sin.

Foinse: will.com

Add a comment