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:
Bidh sinn aâ casg aâ chlĂ r le iuchair.
Cruthaich inntrig anns aâ chlĂ r dhealbhan.
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.
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
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.
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.
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 fasantauile-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:
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.
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.
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.
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.
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.
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.
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:
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.