NewSQL = NoSQL+ACID

NewSQL = NoSQL+ACID
Gu ruige o chionn ghoirid, bha Odnoklassniki a’ stòradh timcheall air 50 TB de dhàta air a phròiseasadh ann an àm fìor ann an SQL Server. Airson a leithid de mheud, tha e cha mhòr do-dhèanta ruigsinneachd luath is earbsach, agus eadhon ionad dàta fulangach le bhith a’ cleachdadh SQL DBMS, a thoirt seachad. Mar as trice, ann an leithid de chùisean, thathas a’ cleachdadh aon de na stòran NoSQL, ach chan urrainnear a h-uile càil a ghluasad gu NoSQL: feumaidh cuid de bhuidhnean gealltanasan malairt ACID.

Thug seo sinn gu bhith a’ cleachdadh stòradh NewSQL, is e sin, DBMS a bheir seachad fulangas locht, scalability agus coileanadh shiostaman NoSQL, ach aig an aon àm a’ cumail suas na barrantasan ACID a tha eòlach air siostaman clasaigeach. Is e glè bheag de shiostaman gnìomhachais a tha ag obair den chlas ùr seo, agus mar sin chuir sinn an gnìomh siostam mar sin sinn fhìn agus chuir sinn ann an gnìomhachd malairteach e.

Mar a tha e ag obair agus dè thachair - leugh fon ghearradh.

An-diugh, tha luchd-èisteachd mìosail Odnoklassniki còrr air 70 millean neach-tadhail gun samhail. sinn Tha sinn anns na còig as àirde lìonraidhean sòisealta as motha san t-saoghal, agus am measg an fhichead làrach air a bheil luchd-cleachdaidh a 'cur seachad an ùine as motha. Bidh am bun-structar ceart gu leòr a’ làimhseachadh luchdan fìor àrd: còrr air millean iarrtas HTTP / diog gach aghaidh. Tha pàirtean de chabhlach frithealaiche de bharrachd air pìosan 8000 suidhichte faisg air a chèile - ann an ceithir ionadan dàta Moscow, a leigeas le latency lìonra nas lugha na 1 ms eatorra.

Tha sinn air a bhith a’ cleachdadh Cassandra bho 2010, a’ tòiseachadh le dreach 0.6. An-diugh tha grunn dhusan buidhnean ag obair. Bidh an cruinneachadh as luaithe a’ pròiseasadh còrr air 4 millean gnìomhachd gach diog, agus na stòran as motha 260 TB.

Ach, tha iad sin uile nan cruinneachaidhean àbhaisteach NoSQL a thathas a’ cleachdadh airson stòradh air a cho-òrdanachadh gu lag dàta. Bha sinn airson a’ phrìomh stòradh cunbhalach, Microsoft SQL Server, a chaidh a chleachdadh bho chaidh Odnoklassniki a stèidheachadh a chuir na àite. Anns an stòradh bha còrr air 300 inneal SQL Server Standard Edition, anns an robh 50 TB de dhàta - buidhnean gnìomhachais. Tha an dàta seo air atharrachadh mar phàirt de ghnothaichean ACID agus feumar cunbhalachd àrd.

Gus dàta a sgaoileadh thairis air nodan SQL Server, chleachd sinn an dà chuid dìreach agus còmhnard sgaradh (sgaradh). Gu h-eachdraidheil, chleachd sinn sgeama roinneadh dàta sìmplidh: bha gach eintiteas co-cheangailte ri comharra - gnìomh ID an eintiteas. Chaidh buidhnean leis an aon tòcan a chuir air an aon fhrithealaiche SQL. Chaidh an dàimh sàr-mhion-fhiosrachaidh a chuir an gnìomh gus am biodh comharran nam prìomh chlàran agus clàran cloinne an-còmhnaidh a ’maidseadh agus air an suidheachadh air an aon fhrithealaiche. Ann an lìonra sòisealta, tha cha mhòr a h-uile clàr air a chruthachadh às leth an neach-cleachdaidh - a tha a 'ciallachadh gu bheil a h-uile dàta cleachdaiche taobh a-staigh aon fho-shiostam gnìomhach air a stòradh air aon fhrithealaiche. Is e sin, bha malairt gnìomhachais cha mhòr an-còmhnaidh a’ toirt a-steach bùird bho aon fhrithealaiche SQL, a rinn e comasach dèanamh cinnteach à cunbhalachd dàta a ’cleachdadh gnothaichean ACID ionadail, gun fheum air a chleachdadh. slaodach agus neo-earbsach sgaoilidhean ACID.

Taing do sharding agus airson SQL a luathachadh:

  • Cha bhith sinn a’ cleachdadh prĂŹomh chuingealachaidhean cèin, oir nuair a bhios sinn a’ roinneadh ID an eintiteas dh’ fhaodadh e bhith air a lorg air frithealaiche eile.
  • Cha bhith sinn a’ cleachdadh modhan stòraidh agus innealan-brosnachaidh air sgĂ th an luchd a bharrachd air an DBMS CPU.
  • Cha bhith sinn a’ cleachdadh JOINs air sgĂ th na tha gu h-Ă rd agus tòrr leughaidhean air thuaiream bhon diosc.
  • Taobh a-muigh gnothach, bidh sinn a’ cleachdadh an ĂŹre aonaranachd Read Uncommitted gus glasan-stad a lughdachadh.
  • Cha dèan sinn ach gnothaichean goirid (gu cuibheasach nas giorra na 100 ms).
  • Cha bhith sinn a’ cleachdadh ioma-sreath UPDATE agus DELETE mar thoradh air an Ă ireamh mhòr de ghlasan-stad - cha bhith sinn ag Ăšrachadh ach aon chlĂ r aig aon Ă m.
  • Bidh sinn an-còmhnaidh a’ dèanamh cheistean a-mhĂ in air clĂ ran-amais - tha ceist le plana lĂ n-chlĂ ir dhuinn a’ ciallachadh a bhith a’ luchdachadh cus den stòr-dĂ ta agus ag adhbhrachadh fĂ iligeadh.

Leig na ceumannan seo leinn an coileanadh cha mhòr as àirde a bhrÚthadh a-mach à frithealaichean SQL. Ach, dh'fhàs na duilgheadasan barrachd is barrachd. Bheir sinn sÚil orra.

Duilgheadasan le SQL

  • Leis gun do chleachd sinn sharding fèin-sgrĂŹobhte, chaidh pĂŹosan Ăšra a chuir ris le lĂ imh le luchd-rianachd. Fad na h-Ăšine seo, cha robh mac-samhail dĂ ta scalable a’ frithealadh iarrtasan.
  • Mar a bhios an Ă ireamh de chlĂ ran sa chlĂ r a’ fĂ s, bidh astar cuir a-steach agus mion-atharrachadh a’ dol sĂŹos; nuair a chuireas tu clĂ ran-amais ri clĂ r a tha ann mar-thĂ , bidh an astar a’ tuiteam le factar; bidh cruthachadh agus ath-chruthachadh chlĂ ran-amais a’ tachairt le Ăšine downt.
  • Le bhith a’ faighinn beagan de Windows airson SQL Server ann an cinneasachadh tha riaghladh bun-structair duilich

Ach tha am prĂŹomh dhuilgheadas

fulangas lochd

Tha droch fhulangas lochdan aig an fhrithealaiche SQL clasaigeach. Canaidh sinn nach eil agad ach aon fhrithealaiche stòr-dàta, agus bidh e a’ fàiligeadh aon uair gach trì bliadhna. Rè na h-ùine seo tha an làrach sìos airson 20 mionaid, rud a tha iomchaidh. Ma tha 64 frithealaichean agad, tha an làrach sìos aon uair a h-uile trì seachdainean. Agus ma tha 200 frithealaiche agad, chan obraich an làrach gach seachdain. Is e duilgheadas a tha seo.

Dè ghabhas dèanamh gus fulangas sgàinidhean air frithealaiche SQL a leasachadh? Tha Wikipedia a’ toirt cuireadh dhuinn togail cruinneachadh mòr ri fhaighinn: far a bheil cùl-taic ann ma dh'fhàillig gin de na pàirtean.

Feumaidh seo cabhlach de uidheamachd daor: iomadach dùblachadh, snàithleach optigeach, stòradh co-roinnte, agus chan eil a bhith a’ toirt a-steach tèarmann ag obair gu h-earbsach: bidh timcheall air 10% de na h-atharrachaidhean a’ tighinn gu crìch le fàilligeadh an nòta cùl-taic mar thrèana air cùl a’ phrìomh nód.

Ach is e am prìomh ana-cothrom a th’ ann an cruinneachadh cho mòr ri fhaighinn gun ruigsinneachd sam bith ma dh’ fhailicheas an t-ionad dàta anns a bheil e suidhichte. Tha ceithir ionadan dàta aig Odnoklassniki, agus feumaidh sinn dèanamh cinnteach à obrachadh ma dh'fhàilligeas gu tur ann an aon dhiubh.

Airson seo b’ urrainn dhuinn a chleachdadh Ioma-mhaighstir ath-riochdachadh air a thogail a-steach do SQL Server. Tha am fuasgladh seo tòrr nas daoire air sgàth cosgais bathar-bog agus tha e a’ fulang le duilgheadasan aithnichte le ath-riochdachadh - dàil malairt neo-fhaicsinneach le ath-riochdachadh sioncronaich agus dàil ann a bhith a’ cur an sàs ath-bhualaidhean (agus, mar thoradh air sin, atharrachaidhean caillte) le ath-riochdachadh asyncronach. An tuigse fuasgladh còmhstri làimhe a’ fàgail an roghainn seo gu tur neo-iomchaidh dhuinn.

Bha feum aig na duilgheadasan sin uile air fuasgladh radaigeach, agus thòisich sinn gan sgrùdadh gu mionaideach. An seo feumaidh sinn eòlas fhaighinn air na bhios SQL Server a ’dèanamh sa mhòr-chuid - gnothaichean.

Malairt sĂŹmplidh

Beachdaichidh sinn air a’ ghnothach as sìmplidhe, bho shealladh prògramadair SQL gnìomhaichte: a’ cur dealbh ri clàr. Bidh clàran agus dealbhan air an stòradh ann an diofar truinnsearan. Tha cuntair dhealbhan poblach aig a’ chlàr. An uairsin tha a leithid de ghnothach air a roinn anns na ceumannan a leanas:

  1. Bidh sinn a’ casg a’ chlàr le iuchair.
  2. Cruthaich inntrig anns a’ chlàr dhealbhan.
  3. Ma tha inbhe poblach aig an dealbh, an uairsin cuir cuntair dhealbhan poblach ris a’ chlàr, ùraich an clàr agus dèan an gnothach.

No ann am pseudocode:

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

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

TX.commit();

ChÏ sinn gur e an suidheachadh as cumanta airson malairt gnÏomhachais dàta a leughadh bhon stòr-dàta gu cuimhne frithealaiche an tagraidh, rudeigin atharrachadh agus na luachan Úra a shàbhaladh air ais chun stòr-dàta. Mar as trice ann an leithid de ghnothach bidh sinn ag Úrachadh grunn bhuidhnean, grunn chlàran.

Nuair a thathar a’ cur an gnìomh malairt, dh’ fhaodadh gun atharraichear an aon dàta bho shiostam eile aig an aon àm. Mar eisimpleir, faodaidh Antispam co-dhùnadh gu bheil an neach-cleachdaidh ann an dòigh air choireigin amharasach agus mar sin cha bu chòir dealbhan an neach-cleachdaidh gu lèir a bhith poblach tuilleadh, feumaidh iad a bhith air an cur airson measadh, a tha a’ ciallachadh atharrachadh photo.status gu luach eile agus na cunntairean co-fhreagarrach a chuir dheth. Gu follaiseach, ma thachras an gnìomh seo às aonais geallaidhean a thaobh atamachd tagraidh agus iomallachd atharrachaidhean farpaiseach, mar a tha e ACID, an uairsin cha bhith an toradh mar a tha a dhìth - an dàrna cuid seallaidh an cunntas-dhealbh an luach ceàrr, no cha tèid a h-uile dealbh a chuir a-steach airson measadh.

Chaidh mòran de chòd coltach ris, a 'làimhseachadh diofar bhuidhnean gnìomhachais taobh a-staigh aon ghnothach, a sgrìobhadh air feadh beatha Odnoklassniki gu lèir. Stèidhichte air an eòlas air imrich gu NoSQL bho Co-chòrdadh mu dheireadh Tha fios againn gu bheil an dùbhlan as motha (agus tasgadh ùine) a 'tighinn bho bhith a' leasachadh còd gus cunbhalachd dàta a chumail suas. Mar sin, bheachdaich sinn air a’ phrìomh riatanas airson an stòradh ùr a bhith na sholar airson fìor ghnothaichean ACID airson loidsig tagraidh.

B’ iad riatanasan eile, nach robh cho cudromach:

  • Ma dh’ fhailicheas an t-ionad dĂ ta, feumaidh an dĂ  chuid leughadh agus sgrĂŹobhadh chun stòradh Ăšr a bhith rim faighinn.
  • A 'cumail suas astar leasachaidh lĂ ithreach. Is e sin, nuair a bhios tu ag obair le stòr Ăšr, bu chòir an ĂŹre de chòd a bhith timcheall air an aon rud; cha bu chòir gum biodh feum air dad a chuir ris an stòr, algorithms a leasachadh airson còmhstrithean fhuasgladh, cumail suas clĂ ran-amais Ă rd-sgoile, msaa.
  • Dh’fheumadh astar an stòraidh Ăšr a bhith gu math Ă rd, an dĂ  chuid nuair a bhathas a’ leughadh dĂ ta agus nuair a bhathas a’ giullachd ghnothaichean, a bha gu h-èifeachdach a’ ciallachadh nach robh fuasglaidhean a bha cruaidh gu h-acadaimigeach, uile-choitcheann ach slaodach, leithid, mar eisimpleir, iomchaidh. gealltanas dĂ -ĂŹre.
  • Sgèileadh fèin-ghluasadach air itealaich.
  • A’ cleachdadh frithealaichean saor cunbhalach, gun fheum air bathar-cruaidh coimheach a cheannach.
  • Comasach air leasachadh stòraidh le luchd-leasachaidh chompanaidhean. Ann am faclan eile, chaidh prĂŹomhachas a thoirt do fhuasglaidhean seilbhe no stòr fosgailte, mas fheĂ rr ann an Java.

Co-dhĂšnaidhean, co-dhĂšnaidhean

A’ sgrùdadh fhuasglaidhean a dh’ fhaodadh a bhith ann, thàinig sinn gu dà roghainn ailtireachd a dh’ fhaodadh a bhith ann:

Is e a’ chiad fhear seirbheisiche SQL sam bith a ghabhail agus an fhulangas locht a tha a dhìth, uidheamachd sgèileadh, cruinneachadh fàilligeadh, fuasgladh còmhstri agus gnothaichean ACID sgaoilte, earbsach agus luath a chuir an gnìomh. Bha sinn den bheachd gu robh an roghainn seo gu math neo-bheag agus dìcheallach.

Is e an dàrna roghainn stòradh NoSQL deiseil a ghabhail le sgèileadh gnìomhaichte, cruinneachadh fàilligeadh, fuasgladh còmhstri, agus gnothaichean a chuir an gnìomh agus SQL thu fhèin. Aig a’ chiad dol-a-mach, tha eadhon an obair a thaobh a bhith a’ buileachadh SQL, gun luaidh air gnothaichean ACID, a’ coimhead coltach ri gnìomh a bheir bliadhnaichean. Ach an uairsin thuig sinn gu bheil an seata feart SQL a bhios sinn a’ cleachdadh ann an cleachdadh cho fada bho ANSI SQL ri Cassandra CQL fada bho ANSI SQL. A’ toirt sùil eadhon nas mionaidiche air CQL, thuig sinn gu robh e gu math faisg air na bha a dhìth oirnn.

Cassandra agus CQL

Mar sin, dè a tha inntinneach mu Cassandra, dè na comasan a th’ aige?

An toiseach, an seo faodaidh tu clàran a chruthachadh a bheir taic do dhiofar sheòrsaichean dàta; faodaidh tu SELECT no ÙRACHADH a dhèanamh air a ’phrìomh iuchair.

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

Gus dèanamh cinnteach à cunbhalachd dàta mac-samhail, bidh Cassandra a’ cleachdadh dòigh-obrach cuòram. Anns a 'chùis as sìmplidh, tha seo a' ciallachadh nuair a thèid trì mac-samhail den aon sreath a chur air diofar nodan den bhuidheann, thathas a 'meas gu bheil an sgrìobhadh soirbheachail ma dhearbhas a' mhòr-chuid de nodan (is e sin, dhà a-mach à trì) soirbheachas na h-obrach sgrìobhaidh seo. . Thathas den bheachd gu bheil an dàta sreath cunbhalach ma chaidh, nuair a thathar a’ leughadh, gun deach a’ mhòr-chuid de nodan a sgrùdadh agus an dearbhadh. Mar sin, le trì mac-samhail, tha cunbhalachd dàta iomlan agus sa bhad air a ghealltainn ma dh’ fhailicheas aon nód. Leig an dòigh-obrach seo leinn sgeama eadhon nas earbsaiche a chuir an gnìomh: an-còmhnaidh cuir iarrtasan gu na trì mac-samhail, a’ feitheamh ri freagairt bhon dà fhear as luaithe. Tha freagairt fadalach an treas mac-samhail air a thilgeil air falbh sa chùis seo. Is dòcha gu bheil duilgheadasan mòra aig nód a tha fadalach ann am freagairt - breicichean, cruinneachadh sgudail anns an JVM, ath-ghairm cuimhne dìreach anns an kernel Linux, fàilligeadh bathar-cruaidh, dì-cheangal bhon lìonra. Ach, chan eil seo a’ toirt buaidh air gnìomhachd no dàta an neach-dèiligidh ann an dòigh sam bith.

Canar an dòigh-obrach nuair a chuireas sinn fios gu trì nodan agus a gheibh sinn freagairt bho dhà tuairmeas: thèid iarrtas airson mac-samhail a bharrachd a chuir a-steach eadhon mus “tuiteam dheth”.

Is e buannachd eile de Cassandra Batchlog, inneal a nì cinnteach gu bheil baidse de dh’ atharrachaidhean a nì thu air an cur an sàs gu h-iomlan no gun a bhith air an cur an sàs idir. Leigidh seo leinn fuasgladh A ann an ACID - atomicity a-mach às a’ bhogsa.

Is e an rud as fhaisge air gnothaichean ann an Cassandra an rud ris an canar “gnothaichean aotrom". Ach tha iad fada bho bhith “fìor” gnothaichean ACID: gu dearbh, is e cothrom a tha seo a dhèanamh CAS air dàta bho dìreach aon chlàr, a’ cleachdadh co-aontachd a’ cleachdadh protocol trom-chuideam Paxos. Mar sin, tha astar nan gnothaichean sin ìosal.

Dè bha sinn a dhÏth ann an Cassandra

Mar sin, bha againn ri fìor ghnothaichean ACID a chuir an gnìomh ann an Cassandra. A’ cleachdadh a b’ urrainn dhuinn dà fheart goireasach eile de DBMS clasaigeach a chuir an gnìomh gu furasta: clàran-amais luath cunbhalach, a leigeadh leinn taghadh dàta a dhèanamh chan ann a-mhàin leis a’ phrìomh iuchair, agus gineadair cunbhalach de IDan fèin-àrdachaidh monotonach.

C* aon

Mar sin rugadh DBMS Úr C* aon, air a dhèanamh suas de thrÏ seòrsaichean nodan frithealaiche:

  • Stòradh - (cha mhòr) frithealaichean Ă bhaisteach Cassandra le uallach airson dĂ ta a stòradh air diosgan ionadail. Mar a bhios eallach is meud an dĂ ta a’ fĂ s, faodar an Ă ireamh aca a mheudachadh gu deichean is ceudan.
  • Co-òrdanaichean GnĂŹomhan - dèanamh cinnteach gun tèid gnothaichean a choileanadh.
  • Is e frithealaichean tagraidh a th’ ann an teachdaichean a chuireas gnĂŹomhachd gnĂŹomhachais an gnĂŹomh agus a thòisicheas gnothaichean. Faodaidh mĂŹltean de luchd-dèiligidh mar sin a bhith ann.

NewSQL = NoSQL+ACID

Tha luchd-frithealaidh de gach seòrsa mar phàirt de bhuidheann cumanta, cleachd protocol teachdaireachd Cassandra a-staigh gus conaltradh le chèile agus gossip airson fiosrachadh brabhsair iomlaid. Le Heartbeat, bidh luchd-frithealaidh ag ionnsachadh mu fhàilligidhean dha chèile, a 'cumail aon sgeama dàta - clàran, an structar agus an ath-riochdachadh; sgeama sgaradh, topology braisle, msaa.

Cliaint

NewSQL = NoSQL+ACID

An àite draibhearan àbhaisteach, thathas a’ cleachdadh modh Fat Client. Cha bhith an leithid de nód a’ stòradh dàta, ach faodaidh e a bhith na cho-òrdanaiche airson coileanadh iarrtasan, is e sin, bidh an neach-dèiligidh fhèin ag obair mar cho-òrdanaiche air na h-iarrtasan aige: bidh e a’ ceasnachadh mac-samhail stòraidh agus a’ fuasgladh còmhstri. Chan e a-mhàin gu bheil seo nas earbsaiche agus nas luaithe na an draibhear àbhaisteach, a dh ’fheumas conaltradh le co-òrdanaiche iomallach, ach leigidh e leat smachd a chumail air tar-chuir iarrtasan. Taobh a-muigh malairt a tha fosgailte don neach-dèiligidh, thèid iarrtasan a chuir gu stòran. Ma tha an neach-dèiligidh air malairt fhosgladh, thèid a h-uile iarrtas taobh a-staigh a’ ghnothaich a chuir chun cho-òrdanaiche malairt.
NewSQL = NoSQL+ACID

C * Aon Cho-òrdanaiche GnÏomh

Is e an co-òrdanaiche rudeigin a chuir sinn an gnÏomh airson C * One bhon toiseach. Tha e an urra ri riaghladh ghnothaichean, glasan, agus an òrdugh anns a bheil gnothaichean air an cur an sàs.

Airson gach gnothach seirbheiseach, bidh an co-òrdanaiche a’ gineadh stampa-ama: tha gach gnothach às deidh sin nas motha na an gnothach roimhe. Leis gu bheil siostam fuasglaidh còmhstri Cassandra stèidhichte air clàran-ama (de dhà chlàr connspaideach, thathas den bheachd gu bheil am fear leis an stampa-ama as ùire gnàthach), bidh an còmhstri an-còmhnaidh air a rèiteach airson a’ ghnothaich às deidh sin. Mar sin chuir sinn an gnìomh Lamport uaireadair - dòigh shaor air còmhstrithean fhuasgladh ann an siostam sgaoilte.

Glasan

Gus dèanamh cinnteach à aonaranachd, chuir sinn romhainn an dòigh as sìmplidh a chleachdadh - glasan dubhach stèidhichte air prìomh iuchair a’ chlàir. Ann am faclan eile, ann an gnothach, feumar clàr a ghlasadh an toiseach, dìreach an uairsin a leughadh, atharrachadh agus a shàbhaladh. Is ann dìreach às deidh gealltanas soirbheachail a dh’ fhaodar clàr fhuasgladh gus an urrainn do ghnothaichean farpaiseach a chleachdadh.

Tha e furasta a leithid de ghlasadh a chuir an gnìomh ann an àrainneachd nach eil air a chuairteachadh. Ann an siostam sgaoilte, tha dà phrìomh roghainn ann: an dàrna cuid glasadh sgaoilte a chuir an gnìomh air a’ bhuidheann, no gnothaichean a sgaoileadh gus am bi gnothaichean leis an aon chlàr an-còmhnaidh air an seirbheiseachadh leis an aon cho-òrdanaiche.

Leis gu bheil an dàta againn mar-thà air a sgaoileadh am measg bhuidhnean de ghnothaichean ionadail ann an SQL, chaidh co-dhùnadh buidhnean malairt ionadail a shònrachadh do cho-òrdanaichean: bidh aon cho-òrdanaiche a’ coileanadh a h-uile gnothach le comharran bho 0 gu 9, an dàrna fear - le comharran bho 10 gu 19, Agus mar sin air adhart. Mar thoradh air an sin, bidh gach suidheachadh co-òrdanaiche na mhaighstir air a 'bhuidheann malairt.

An uairsin faodar glasan a chuir an gnìomh ann an cruth HashMap banal mar chuimhneachan air a ’cho-òrdanaiche.

Fàilligidhean co-òrdanaiche

Leis gu bheil aon cho-òrdanaiche a ’frithealadh buidheann de ghnothaichean a-mhàin, tha e glè chudromach faighinn a-mach gu sgiobalta gu bheil e air fàiligeadh gus am bi an dàrna oidhirp air a’ ghnothach a chuir an gnìomh ùine a-mach. Gus seo a dhèanamh luath agus earbsach, chleachd sinn protocol buille-èisteachd cuòram làn-cheangailte:

Bidh co-dhiù dà nod co-òrdanaiche aig gach ionad dàta. Bho àm gu àm, bidh gach co-òrdanaiche a’ cur teachdaireachd cridhe gu na co-òrdanaichean eile agus ag innse dhaibh mun obair aige, a bharrachd air na teachdaireachdan cridhe a fhuair e bho na co-òrdanaichean sa bhuidheann an turas mu dheireadh.

NewSQL = NoSQL+ACID

A’ faighinn fiosrachadh co-chosmhail bho chàch mar phàirt de na teachdaireachdan buille-cridhe aca, bidh gach co-òrdanaiche a’ co-dhùnadh dha fhèin dè na nodan cnuasachaidh a tha ag obair agus dè nach eil, air an stiùireadh le prionnsapal a’ chuòram: ma tha nód X air fiosrachadh fhaighinn bhon mhòr-chuid de nodan sa bhuidheann mun àbhaist. faighinn teachdaireachdan bho nód Y, an uairsin, tha Y ag obair. Agus a chaochladh, cho luath ‘s a bhios a’ mhòr-chuid ag aithris air teachdaireachdan a tha a dhìth bho nód Y, tha Y air diùltadh. Tha e neònach ma dh’innseas an cuòram do nód X nach eil e a’ faighinn teachdaireachdan bhuaithe tuilleadh, gum bi an nód X fhèin den bheachd gun do dh’fhàillig e.

Bithear a’ cur teachdaireachdan buille-cridhe le tricead àrd, timcheall air 20 uair san diog, le ùine de 50 ms. Ann an Java, tha e duilich gealltainn freagairt tagraidh taobh a-staigh 50 ms mar thoradh air an ùine coimeasach de stadan a dh’ adhbhraich an neach-cruinneachaidh sgudail. B’ urrainn dhuinn an ùine freagairt seo a choileanadh le bhith a’ cleachdadh inneal-cruinneachaidh sgudail G1, a leigeas leinn targaid a shònrachadh airson ùine stadan GC. Ach, uaireannan, gu math ainneamh, bidh an neach-cruinneachaidh a 'stad nas àirde na 50 ms, a dh' fhaodadh a bhith a 'leantainn gu lorg ceàrr. Gus casg a chuir air seo, chan eil an co-òrdanaiche ag aithris air fàiligeadh ann an nòta iomallach nuair a dh’ fhalbh a’ chiad teachdaireachd buille-cridhe bhuaithe, dìreach ma tha grunn dhiubh air a dhol à bith ann an sreath. ms.

Ach chan eil e gu leòr a bhith a’ tuigsinn gu sgiobalta dè an nód a sguir a bhith ag obair. Feumaidh sinn rudeigin a dhèanamh mu dheidhinn seo.

Glèidheadh

Tha an sgeama clasaigeach a’ toirt a-steach, ma dh’ fhàilligeas maighstir, taghadh ùr a thòiseachadh a’ cleachdadh aon de fasanta uile-choitcheann algairim. Ach, tha duilgheadasan aithnichte aig algorithms leithid seo le co-ghluasad ùine agus fad a 'phròiseas taghaidh fhèin. B’ urrainn dhuinn an leithid de dhàil a bharrachd a sheachnadh le bhith a’ cleachdadh sgeama ùr co-òrdanaiche ann an lìonra làn-cheangailte:

NewSQL = NoSQL+ACID

Canaidh sinn gu bheil sinn airson gnothach a chuir an gnìomh ann am buidheann 50. Feuchaidh sinn ri co-dhùnadh ro-làimh air an sgeama ùr, is e sin, dè na nodan a nì gnothaichean ann am buidheann 50 ma dh’ fhàillig am prìomh cho-òrdanaiche. Is e ar n-amas gnìomhachd an t-siostaim a chumail ma dh’ fhàillig ionad dàta. Feuch an co-dhùin sinn gum bi a 'chiad tèarmann na nód bho ionad dàta eile, agus bidh an dàrna tèarmann na nód bho thrian. Tha an sgeama seo air a thaghadh aon uair agus chan atharraich e gus an atharraich topology a’ chnuasaich, is e sin, gus an tèid nodan ùra a-steach (a thachras glè ainneamh). Bidh an dòigh-obrach airson maighstir gnìomhach ùr a thaghadh ma dh'fhàilligeas an t-seann fhear an-còmhnaidh mar a leanas: bidh a 'chiad tèarmann na mhaighstir gnìomhach, agus ma tha e air stad a bhith ag obair, bidh an dàrna tèarmann na mhaighstir gnìomhach.

Tha an sgeama seo nas earbsaiche na an algairim uile-choitcheann, oir gus maighstir Úr a chuir an gnÏomh tha e gu leòr gus fàilligeadh an t-seann fhear a dhearbhadh.

Ach ciamar a thuigeas teachdaichean dè am maighstir a tha ag obair a-nis? Tha e do-dhèanta fiosrachadh a chuir gu mìltean de luchd-dèiligidh ann an 50 ms. Tha suidheachadh comasach nuair a chuireas neach-dèiligidh iarrtas airson malairt fhosgladh, gun fhios fhathast nach eil am maighstir seo ag obair tuilleadh, agus thig ùine seachad air an iarrtas. Gus casg a chuir air seo, bidh teachdaichean gu tuairmeasach a’ cur iarrtas airson malairt fhosgladh gu maighstir na buidhne agus an dà chuid de na stòran aige aig an aon àm, ach is e dìreach am fear a tha na mhaighstir gnìomhach an-dràsta a bheir freagairt don iarrtas seo. Nì an neach-dèiligidh a h-uile conaltradh às deidh sin taobh a-staigh a ’ghnothaich a-mhàin leis a’ mhaighstir gnìomhach.

Bidh maighstirean cùl-taic a’ faighinn iarrtasan airson gnothaichean nach buin leotha a-steach don ciudha de ghnothaichean gun bhreith, far am bi iad air an stòradh airson ùine. Ma gheibh am maighstir gnìomhach bàs, bidh am maighstir ùr ag iarraidh gnothaichean fhosgladh bhon ciudha aige agus freagairt don neach-dèiligidh. Ma tha an neach-dèiligidh mar-thà air malairt fhosgladh leis an t-seann mhaighstir, tha an dàrna freagairt air a leigeil seachad (agus, gu follaiseach, cha bhith a leithid de ghnothach crìochnaichte agus thèid a dhèanamh a-rithist leis an neach-dèiligidh).

Mar a tha an gnothach ag obair

Canaidh sinn gun do chuir neach-dèiligidh iarrtas chun cho-òrdanaiche malairt fhosgladh airson a leithid agus eintiteas le leithid de phrìomh iuchair. Bidh an co-òrdanaiche a’ glasadh an eintiteas seo agus ga chuir sa chlàr glasaidh mar chuimhneachan. Ma tha feum air, bidh an co-òrdanaiche a’ leughadh an eintiteas seo bhon stòradh agus a’ stòradh an dàta a thig às ann an staid malairt ann an cuimhne a’ cho-òrdanaiche.

NewSQL = NoSQL+ACID

Nuair a tha neach-dèiligidh ag iarraidh dàta atharrachadh ann an gnothach, bidh e a’ cur iarrtas chun cho-òrdanaiche an eintiteas atharrachadh, agus bidh an co-òrdanaiche a’ cur an dàta ùr anns a’ chlàr inbhe malairt mar chuimhneachan. Cuiridh seo crìoch air a’ chlàradh - chan eil clàradh sam bith air a dhèanamh don stòradh.

NewSQL = NoSQL+ACID

Nuair a dh’ iarras neach-dèiligidh an dàta atharraichte aige fhèin mar phàirt de ghnothach gnìomhach, bidh an co-òrdanaiche ag obair mar a leanas:

  • ma tha an ID mu thrĂ th sa ghnothach, thèid an dĂ ta a thoirt bhon chuimhne;
  • mura h-eil ID ann mar chuimhneachan, thèid an dĂ ta a tha a dhĂŹth a leughadh bho na nodan stòraidh, còmhla ris an fheadhainn a tha mar-thĂ  mar chuimhneachan, agus thèid an toradh a thoirt don neach-dèiligidh.

Mar sin, faodaidh an neach-dèiligidh na h-atharrachaidhean aige fhèin a leughadh, ach chan eil teachdaichean eile a’ faicinn na h-atharrachaidhean sin, leis gu bheil iad air an stòradh a-mhàin mar chuimhneachan air a ’cho-òrdanaiche; chan eil iad fhathast ann an nodan Cassandra.

NewSQL = NoSQL+ACID

Nuair a chuireas an neach-dèiligidh gealltanas, thèid an stàit a bha ann an cuimhne na seirbheis a shàbhaladh leis a’ cho-òrdanaiche ann am baidse clàraichte, agus thèid a chuir mar bhaidse logaichte gu stòr Cassandra. Bidh na stòran a’ dèanamh a h-uile dad a tha riatanach gus dèanamh cinnteach gu bheil am pasgan seo air a chuir an sàs gu atamach (gu tur), agus a ’tilleadh freagairt chun cho-òrdanaiche, a bhios a’ leigeil a-mach na glasan agus a ’dearbhadh soirbheachas a’ ghnothaich don neach-dèiligidh.

NewSQL = NoSQL+ACID

Agus airson a dhol air ais, chan fheum an co-òrdanaiche ach a’ chuimhne a th’ anns an stàit malairt a shaoradh.

Mar thoradh air na leasachaidhean gu h-Ă rd, chuir sinn an gnĂŹomh prionnsapalan ACID:

  • Atomity. Is e gealltanas a tha seo nach tèid gnothach sam bith a chlĂ radh gu ĂŹre san t-siostam; an dĂ rna cuid bidh na fo-obraichean aige air an crĂŹochnachadh, no cha tèid gin dhiubh a chrĂŹochnachadh. Bidh sinn a’ cumail ris a’ phrionnsapal seo tro bhaidse logaichte ann an Cassandra.
  • Co-chòrdadh. Chan eil gach gnothach soirbheachail, a rèir mĂŹneachadh, a’ clĂ radh ach toraidhean dligheach. Ma lorgar, Ă s deidh dha malairt fhosgladh agus pĂ irt de na h-obraichean a choileanadh, gu bheil an toradh neo-dhligheach, thèid tilleadh air ais a dhèanamh.
  • Leth-oireachd. Nuair a thèid malairt a chuir gu bĂ s, cha bu chòir do ghnothaichean co-aontach buaidh a thoirt air a thoradh. Tha gnothaichean farpaiseach air an dealachadh le bhith a’ cleachdadh glasan dubhach air a’ cho-òrdanaiche. Airson leughaidhean taobh a-muigh malairt, thathas a’ cumail ris a’ phrionnsapal aonaranachd aig an ĂŹre Read Committed.
  • Seasmhachd. Ge bith dè na duilgheadasan aig ĂŹrean nas ĂŹsle - dubhadh siostam, fĂ illigeadh bathar-cruaidh - bu chòir atharrachaidhean a chaidh a dhèanamh le malairt a chaidh a chrĂŹochnachadh gu soirbheachail a chumail nuair a thòisicheas gnĂŹomhachd.

Leughadh le clĂ ran-amais

Gabhamaid clĂ r sĂŹmplidh:

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

Tha ID (prìomh iuchair), sealbhadair agus ceann-latha atharrachaidh air. Feumaidh tu iarrtas gu math sìmplidh a dhèanamh - tagh dàta air an t-sealbhadair leis a’ cheann-latha atharrachaidh “airson an latha mu dheireadh”.

SELECT *
WHERE owner=?
AND modified>?

Gus an tèid a leithid de cheist a phròiseasadh gu sgiobalta, ann an SQL DBMS clasaigeach feumaidh tu clàr-amais a thogail le colbhan (sealbhadair, atharraichte). Is urrainn dhuinn seo a dhèanamh gu math furasta, leis gu bheil barantas ACID againn a-nis!

ClĂ r-amais ann an C* One

Tha clàr stòr ann le dealbhan anns a bheil ID a’ chlàir am prìomh iuchair.

NewSQL = NoSQL+ACID

Airson clàr-amais, bidh C * One a’ cruthachadh clàr ùr a tha na leth-bhreac den fhear thùsail. Tha an iuchair an aon rud ris an abairt clàr-amais, agus tha e cuideachd a’ toirt a-steach prìomh iuchair a’ chlàir bhon chlàr stòr:

NewSQL = NoSQL+ACID

A-nis faodar a’ cheist airson “sealbhadair airson an latha mu dheireadh” ath-sgrìobhadh mar thaghadh bho bhòrd eile:

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

Tha cunbhalachd an dàta anns na dealbhan clàr stòr agus clàr clàr-amais i1 air a chumail suas gu fèin-ghluasadach leis a’ cho-òrdanaiche. Stèidhichte air an sgeama dàta a-mhàin, nuair a gheibhear atharrachadh, bidh an co-òrdanaiche a 'gineadh agus a' stòradh atharrachadh chan ann a-mhàin anns a 'phrìomh chlàr, ach cuideachd ann an lethbhric. Chan eil gnìomhan a bharrachd air an coileanadh air a’ chlàr clàr-amais, chan eil logaichean air an leughadh, agus chan eilear a’ cleachdadh glasan. Is e sin, le bhith a’ cur chlàran-amais cha mhòr nach eil feum air goireasan sam bith agus cha mhòr nach eil buaidh sam bith aige air astar cur an sàs atharrachaidhean.

A’ cleachdadh ACID, bha e comasach dhuinn clàran-amais coltach ri SQL a chuir an gnìomh. Tha iad cunbhalach, scalable, luath, so-dhèanta, agus air an togail a-steach do chànan ceist CQL. Chan eil feum air atharrachadh sam bith air còd an tagraidh gus taic a thoirt do chlàran-amais. Tha a h-uile dad cho sìmplidh ri SQL. Agus as cudromaiche, chan eil clàran-amais a’ toirt buaidh air astar cur an gnìomh atharrachaidhean air a’ chlàr malairt tùsail.

Dè a thachair

Leasaich sinn C * One o chionn trĂŹ bliadhna agus chuir sinn air bhog e gu gnĂŹomhachd malairteach.

Dè fhuair sinn aig a’ cheann thall? Nach dèan sinn measadh air seo a’ cleachdadh an eisimpleir den fho-shiostam giullachd dhealbhan is stòraidh, aon de na seòrsaichean dàta as cudromaiche ann an lìonra sòisealta. Chan eil sinn a 'bruidhinn mu dheidhinn cuirp nan dealbhan fhèin, ach mu dheidhinn a h-uile seòrsa de mheata-fhiosrachadh. A-nis tha timcheall air 20 billean de chlàran mar sin aig Odnoklassniki, bidh an siostam a ’giullachd 80 mìle iarrtas leughaidh gach diog, suas ri 8 mìle gnìomh ACID gach diog co-cheangailte ri atharrachadh dàta.

Nuair a chleachd sinn SQL le factar mac-samhail = 1 (ach ann an RAID 10), chaidh fiosrachadh an dealbh a stòradh air cruinneachadh de dh’ innealan 32 a bha rim faighinn gu mòr a’ ruith Microsoft SQL Server (a bharrachd air 11 cùl-taic). Chaidh 10 frithealaichean a riarachadh cuideachd airson cùl-taic a stòradh. Gu h-iomlan 50 càr daor. Aig an aon àm, bha an siostam ag obrachadh aig ìre luchd, gun tèarmann.

Às deidh dhuinn imrich chun t-siostam ùr, fhuair sinn factar mac-samhail = 3 - leth-bhreac anns gach ionad dàta. Tha an siostam air a dhèanamh suas de 63 nodan stòraidh Cassandra agus 6 innealan co-òrdanaiche, airson 69 frithealaichean gu h-iomlan. Ach tha na h-innealan sin tòrr nas saoire, tha an cosgais iomlan timcheall air 30% de chosgais siostam SQL. Aig an aon àm, tha an luchd air a chumail aig 30%.

Le toirt a-steach C * One, lughdaich latency cuideachd: ann an SQL, thug gnìomhachd sgrìobhaidh timcheall air 4,5 ms. Ann an C * One - mu 1,6 ms. Tha fad a’ ghnothaich gu cuibheasach nas lugha na 40 ms, tha an gealltanas air a chrìochnachadh ann an 2 ms, tha an ùine leughaidh is sgrìobhaidh gu cuibheasach 2 ms. 99mh sa cheud - dìreach 3-3,1 ms, tha an àireamh de timeouts air a dhol sìos 100 uair - uile air sgàth cleachdadh farsaing prothaideachadh.

Roimhe seo, chaidh a’ mhòr-chuid de na nodan Freiceadan SQL a dhì-choimiseanadh; thathas a’ leasachadh stuthan ùra a-mhàin a’ cleachdadh C * One. Dh’atharraich sinn C * One airson a bhith ag obair san sgòth againn aon-sgòth, a rinn e comasach cleachdadh cruinneachaidhean ùra a luathachadh, rèiteachadh a dhèanamh nas sìmplidhe agus obrachadh gu fèin-ghluasadach. Às aonais a’ chòd stòr, bhiodh e tòrr na bu duilghe agus na bu duilghe seo a dhèanamh.

A-nis tha sinn ag obair air na goireasan stòraidh eile againn a ghluasad chun sgòth - ach is e sgeulachd gu tur eadar-dhealaichte a tha sin.

Source: www.habr.com

Cuir beachd ann