NewSQL = NoSQL+ACID

NewSQL = NoSQL+ACID
Hatramin'ny vao haingana, Odnoklassniki dia nitahiry angona 50 TB voahodina amin'ny fotoana tena izy ao amin'ny SQL Server. Ho an'ny boky toy izany, dia saika tsy azo atao ny manome haingana sy azo itokisana, ary na dia ny fidirana amin'ny tsy fahombiazan'ny data center aza amin'ny fampiasana SQL DBMS. Amin'ny ankapobeny, amin'ny toe-javatra toy izany, ny iray amin'ireo fitahirizana NoSQL dia ampiasaina, saingy tsy azo afindra amin'ny NoSQL ny zava-drehetra: ny orinasa sasany dia mitaky fiantohana ACID.

Izany dia nitarika anay tamin'ny fampiasana ny fitahirizana NewSQL, izany hoe, DBMS izay manome fandeferana diso, scalability ary fampandehanana ny rafitra NoSQL, fa amin'ny fotoana iray ihany dia mitazona ny antoka ACID mahazatra amin'ny rafitra klasika. Vitsy ny rafitra indostrialy miasa amin'ity kilasy vaovao ity, noho izany dia nampihatra rafitra toy izany ny tenanay ary nametraka izany tamin'ny asa ara-barotra.

Ny fomba fiasa sy ny zava-nitranga - mamaky eo ambanin'ny fanapahana.

Amin'izao fotoana izao, mihoatra ny 70 tapitrisa ny mpitsidika Odnoklassniki isam-bolana. iSIKA Ao anatin’ny dimy voalohany isika tambajotra sosialy lehibe indrindra eran-tany, ary anisan'ireo tranonkala roapolo izay lanin'ny mpampiasa fotoana be indrindra. Ny fotodrafitrasa OK dia mitantana entana be dia be: mihoatra ny iray tapitrisa HTTP fangatahana/sec isaky ny anoloana. Mifanakaiky ny ampahany amin'ny andiana mpizara maherin'ny 8000 - ao amin'ny foibe angon-drakitra efatra ao Moskoa, izay ahafahana miantoka ny faharetan'ny tambajotra latsaky ny 1 ms eo anelanelan'izy ireo.

Efa nampiasa an'i Cassandra izahay nanomboka tamin'ny 2010, nanomboka tamin'ny version 0.6. Ankehitriny dia misy cluster am-polony maromaro miasa. Ny kluster haingana indrindra dia manao asa mihoatra ny 4 tapitrisa isan-tsegondra, ary ny fivarotana lehibe indrindra dia mitahiry 260 TB.

Na izany aza, ireo dia clusters NoSQL mahazatra ampiasaina amin'ny fitahirizana malemy mirindra data. Te-hanolo ny fitahirizana lehibe tsy miovaova, Microsoft SQL Server, izay nampiasaina hatramin'ny nananganana ny Odnoklassniki. Ny fitahirizana dia nahitana milina SQL Server Standard Edition maherin'ny 300, izay nahitana angona 50 TB - orinasa orinasa. Ity angona ity dia ovaina ho ampahany amin'ny fifanakalozana ACID ary mitaky tsy miovaova avo.

Mba hizarana angon-drakitra manerana ny node SQL Server dia nampiasa mitsangana sy marindrano izahay fizarazarana (sharding). Ara-tantara, nampiasa tetik'asa fizarazarana angona tsotra izahay: nampifandraisina tamina famantarana iray ny singa tsirairay - fiasan'ny ID entity. Ireo sampana manana famantarana mitovy dia napetraka amin'ny mpizara SQL mitovy. Ny fifandraisana master-detail dia nampiharina mba hifanaraka foana ny mari-pamantarana amin'ny firaketana fototra sy zaza ary hita ao amin'ny lohamilina iray ihany. Ao amin'ny tambajotra sosialy, saika ny firaketana rehetra dia noforonina amin'ny anaran'ny mpampiasa - izay midika fa ny angona mpampiasa rehetra ao anatin'ny subsystem iray miasa dia voatahiry ao amin'ny server iray. Izany hoe, ny fifanakalozana ara-barotra dia saika misy latabatra avy amin'ny mpizara SQL iray, izay nahafahana niantoka ny fitovian'ny angon-drakitra amin'ny fampiasana ny fifanakalozana ACID eo an-toerana, tsy mila mampiasa. miadana sy tsy azo ianteherana fizarana ACID transactions.

Noho ny sharding sy hanafainganana ny SQL:

  • Tsy mampiasa teritery fanalahidin'ny vahiny izahay, satria mety ho hita amin'ny lohamilina hafa ny sharding ny ID enti-manana.
  • Tsy mampiasa fomba fiasa voatahiry sy trigger izahay noho ny enta-mavesatra fanampiny amin'ny CPU DBMS.
  • Tsy mampiasa JOIN izahay noho ireo rehetra voalaza etsy ambony ireo ary be dia be ny famakiana kisendrasendra avy amin'ny kapila.
  • Eo ivelan'ny fifampiraharahana dia mampiasa ny haavon'ny fitokana-monina Read Uncommitted izahay mba hampihenana ny fiatoana.
  • Ny fifampiraharahana fohy ihany no ataonay (amin'ny salan'isa fohy noho ny 100 ms).
  • Tsy mampiasa UPDATE sy DELETE maromaro izahay noho ny hamaroan'ny fahatapahan-dàlana - rakitsoratra iray ihany no manavao anay.
  • Amin'ny fanondroana ihany no ataonay fanontaniana - ny fangatahana miaraka amin'ny drafi-pijerena latabatra feno ho anay dia midika fa mavesa-danja ny angon-drakitra ary mahatonga azy tsy hahomby.

Ireo dingana ireo dia namela anay hanery ny fampisehoana ambony indrindra amin'ireo mpizara SQL. Nitombo hatrany anefa ny olana. Andeha hojerentsika izy ireo.

Olana amin'ny SQL

  • Satria nampiasa sharding nosoratan'ny tena izahay, ny fampidirana shards vaovao dia nataon'ny mpitantana tanana. Nandritra izany fotoana izany, ny dika mitovy amin'ny angon-drakitra azo esorina dia tsy nikarakara ny fangatahana.
  • Rehefa mitombo ny isan'ny rakitra ao amin'ny latabatra dia mihena ny hafainganam-pandehan'ny fampidirana sy ny fanovana; rehefa manampy tondro amin'ny latabatra efa misy dia mihena ny hafainganam-pandeha; Ny famoronana sy ny famoronana indray ny tondro dia mitranga miaraka amin'ny fotoana fiatoana.
  • Ny fananana Windows kely ho an'ny SQL Server amin'ny famokarana dia manasarotra ny fitantanana fotodrafitrasa

Fa ny tena olana dia

fandeferana fahadisoana

Ny mpizara SQL mahazatra dia manana fandeferana ratsy. Aoka hatao hoe manana mpizara database iray ihany ianao, ary tsy mahomby indray mandeha isaky ny telo taona. Mandritra izany fotoana izany dia midina mandritra ny 20 minitra ny tranokala, izay azo ekena. Raha manana mpizara 64 ianao dia midina indray mandeha isaky ny telo herinandro ny tranokala. Ary raha manana mpizara 200 ianao, dia tsy mandeha isan-kerinandro ny tranokala. Olana io.

Inona no azo atao hanatsarana ny fandeferana diso amin'ny mpizara SQL? Manasa antsika hanorina ny Wikipedia cluster tena misy: raha misy tsy fahombiazan'ny singa iray dia misy backup iray.

Mitaky fitaovam-pitaovana lafo vidy izany: dika mitovy, fibre optique, fitehirizana ifampizarana, ary tsy mandeha azo antoka ny fampidirana tahiry iray: manodidina ny 10% amin'ny fifandimbiasana dia mifarana amin'ny tsy fahombiazan'ny node backup toy ny fiaran-dalamby ao ambadiky ny node lehibe.

Saingy ny tsy fahampiana lehibe amin'ny kluster tena misy toy izany dia ny fisian'ny zero raha toa ka tsy mahomby ny foibe data misy azy. Odnoklassniki dia manana foibe angon-drakitra efatra, ary mila miantoka ny fampandehanana raha misy tsy fahombiazana tanteraka amin'ny iray amin'izy ireo.

Afaka mampiasa izany izahay Multi-Master replication naorina tao amin'ny SQL Server. Ity vahaolana ity dia lafo kokoa noho ny vidin'ny rindrambaiko ary mijaly amin'ny olana malaza amin'ny replication - fahatarana tsy ampoizina miaraka amin'ny replication synchronous ary fahatarana amin'ny fampiharana replication (ary, vokatr'izany, fanovana very) miaraka amin'ny replication asynchronous. Ny voalaza famahana fifandirana amin'ny tanana mahatonga ity safidy ity ho tsy azo ampiharina aminay.

Nitaky vahaolana mahery vaika ireo olana rehetra ireo, ary nanomboka namakafaka azy ireo tamin'ny antsipiriany izahay. Eto isika dia mila mahafantatra ny tena ataon'ny SQL Server - transactions.

Transaction tsotra

Andeha hojerentsika ny fifampiraharahana tsotra indrindra, amin'ny fomba fijerin'ny programmer SQL ampiharina: manampy sary amin'ny rakikira. Ny rakitsary sy sary dia voatahiry ao anaty takelaka samihafa. Ny rakikira dia manana kaontera sary ho an'ny daholobe. Dia mizara ho dingana manaraka ireto ny fifampiraharahana toy izany:

  1. Manidy ny rakikira amin'ny fanalahidy izahay.
  2. Mamorona fidirana amin'ny tabilao sary.
  3. Raha manana sata ho an'ny daholobe ny sary, dia ampio ny kaontera sarin'ny besinimaro amin'ny rakikira, havaozy ny rakitsoratra ary ataovy ny fifampiraharahana.

Na amin'ny pseudocode:

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

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

TX.commit();

Hitantsika fa ny toe-javatra mahazatra indrindra amin'ny fifanakalozana ara-barotra dia ny mamaky angon-drakitra avy amin'ny angon-drakitra ho fahatsiarovana ny mpizara fampiharana, manova zavatra ary mitahiry ny soatoavina vaovao hiverina amin'ny angon-drakitra. Matetika amin'ny fifampiraharahana toy izany dia manavao sampana maromaro, latabatra maromaro.

Rehefa manatanteraka fifampiraharahana dia mety hitranga ny fanovana miaraka amin'ny angona mitovy amin'ny rafitra hafa. Ohatra, mety hanapa-kevitra ny Antispam fa mampiahiahy ny mpampiasa ary noho izany dia tsy tokony ho fantatry ny besinimaro intsony ny sarin'ny mpampiasa rehetra, tokony halefa amin'ny antonony izy ireo, izay midika hoe manova ny sary.status amin'ny sanda hafa ary mamono ny kaontera mifanaraka amin'izany. Mazava ho azy, raha mitranga ity hetsika ity tsy misy antoka ny atomicity ny fampiharana sy ny fitokanana ny fanovana mifaninana, toy ny ao amin'ny asidra, dia tsy ho izay ilaina ny vokatra - na ny kaontera sary dia hampiseho ny sanda diso, na tsy ny sary rehetra dia halefa ho antonony.

Betsaka ny kaody mitovy amin'izany, manodinkodina ireo orinasa isan-karazany ao anatin'ny fifampiraharahana iray, no nosoratana nandritra ny fisian'ny Odnoklassniki manontolo. Miorina amin'ny traikefan'ny fifindra-monina mankany NoSQL avy amin'ny Fifanarahana farany Fantatsika fa ny fanamby lehibe indrindra (sy ny fampiasam-bola amin'ny fotoana) dia avy amin'ny famolavolana kaody mba hihazonana ny fitovian'ny angona. Noho izany, noheverinay fa ny fepetra lehibe indrindra amin'ny fitahirizana vaovao dia ny fanomezana ho an'ny fifanakalozana ACID tena izy ho an'ny lojika fampiharana.

Ny fepetra hafa, tsy latsa-danja amin'izany, dia:

  • Raha tsy mahomby ny foibe angona dia tsy maintsy misy ny famakiana sy fanoratana amin'ny fitahirizana vaovao.
  • Mitazona ny hafainganan'ny fampandrosoana ankehitriny. Izany hoe, rehefa miara-miasa amin'ny tahiry vaovao dia tokony ho mitovy ny habetsaky ny kaody; tsy ilaina ny manampy na inona na inona ao amin'ny tahiry, mamolavola algorithm amin'ny famahana ny fifandirana, mitazona index faharoa, sns.
  • Ny hafainganan'ny fitahirizana vaovao dia tokony ho avo be, na rehefa mamaky angon-drakitra na rehefa manodina ny fifampiraharahana, izay midika tsara fa ny vahaolana henjana ara-akademika, manerana izao rehetra izao, nefa miadana, toy ny, ohatra, dia tsy azo ampiharina. dingana roa commit.
  • Fanamafisana mandeha ho azy amin'ny sidina.
  • Mampiasa mpizara mora mora, tsy mila mividy fitaovana hafahafa.
  • Ny mety hisian'ny fampivoarana fitahirizana ataon'ny mpamorona orinasa. Raha lazaina amin'ny teny hafa, nomena laharam-pahamehana ny vahaolana amin'ny fananana na loharano misokatra, indrindra amin'ny Java.

Fanapahan-kevitra, fanapahan-kevitra

Ny famakafakana vahaolana azo atao dia tonga amin'ny safidy ara-drafitra roa azo atao:

Ny voalohany dia ny maka ny mpizara SQL rehetra ary mampihatra ny fandeferana ny fahadisoana ilaina, ny mekanika scaling, ny cluster failover, ny famahana ny fifanoherana ary ny fifampiraharahana ACID azo antoka sy haingana. Noraisinay ho tena tsy misy dikany sy mahabe asa ity safidy ity.

Ny safidy faharoa dia ny maka fitehirizana NoSQL efa vita miaraka amin'ny scaling ampiharina, cluster failover, famahana ny fifanoherana, ary manatanteraka fifampiraharahana sy SQL ny tenanao. Raha vao jerena, na dia ny andraikitry ny fampiharana SQL aza, tsy lazaina intsony ny fifanakalozana ACID, dia toa asa haharitra taona maro. Saingy tsapanay avy eo fa ny endri-javatra SQL ampiasainay amin'ny fampiharana dia lavitra ny ANSI SQL Cassandra CQL lavitra ANSI SQL. Rehefa nandinika akaiky kokoa ny CQL izahay dia nahatsapa fa tena akaiky ny zavatra nilainay izany.

Cassandra sy CQL

Noho izany, inona no mahaliana momba an'i Cassandra, inona ny fahaiza-manao ananany?

Voalohany, eto ianao dia afaka mamorona latabatra izay manohana karazana data isan-karazany; azonao atao ny SELECT na UPDATE amin'ny lakile voalohany.

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

Mba hiantohana ny tsy fitovian'ny angon-drakitra replica dia mampiasa i Cassandra fomba fiasan’ny kôlejy. Amin'ny tranga tsotra indrindra, midika izany fa rehefa apetraka amin'ny node samihafa amin'ny cluster ny kopia telo amin'ny laharana mitovy, dia heverina ho mahomby ny fanoratana raha toa ka ny ankamaroan'ny nodes (izany hoe, roa amin'ny telo) dia nanamafy ny fahombiazan'ity asa fanoratana ity. . Ny angon-drakitra andalana dia heverina ho mifanaraka raha toa ka, rehefa mamaky, ny ankamaroan'ny node dia nodinihina sy nanamafy azy ireo. Noho izany, miaraka amin'ny kopia telo, dia azo antoka ny fitovian'ny angona feno sy eo noho eo raha tsy mahomby ny node iray. Ity fomba fiasa ity dia nahafahanay nampihatra tetika azo itokisana kokoa: mandefa fangatahana hatrany amin'ireo kopia telo rehetra, miandry valiny avy amin'ireo roa haingana indrindra. Ny valiny tara amin'ny kopia fahatelo dia ariana amin'ity tranga ity. Ny node tara amin'ny famaliana dia mety manana olana lehibe - frein, fanangonana fako ao amin'ny JVM, famerenana ny fahatsiarovana mivantana ao amin'ny kernel Linux, tsy fahombiazan'ny hardware, fahatapahan'ny tambajotra. Na izany aza, tsy misy fiantraikany amin'ny fiasan'ny mpanjifa na ny angon-drakitra izany amin'ny fomba rehetra.

Ny fomba fiasa rehefa mifandray amin'ny node telo isika ary mahazo valiny avy amin'ny roa dia antsoina tombantombana: misy fangatahana kopia fanampiny alefa alohan'ny "milatsaka".

Tombontsoa iray hafa an'i Cassandra dia Batchlog, mekanika izay miantoka fa ny ampahany amin'ny fanovana ataonao dia ampiharina tanteraka na tsy ampiharina mihitsy. Izany dia mamela antsika hamaha A amin'ny ACID - atomicity ivelan'ny boaty.

Ny zavatra akaiky indrindra amin'ny fifanakalozana any Cassandra dia ny antsoina hoe "varotra maivana". Saingy lavitry ny fifanakalozana ACID "tena izy" izy ireo: raha ny marina, fotoana iray hanaovana izany čas amin'ny angona avy amin'ny firaketana tokana, mampiasa marimaritra iraisana amin'ny fampiasana ny protocol Paxos lanja mavesatra. Noho izany, ambany ny hafainganam-pandehan'ny fifanakalozana toy izany.

Ny zavatra tsy hitanay tany Cassandra

Noho izany, tsy maintsy nampihatra ny fifanakalozana ACID tena izy tao Cassandra. Amin'ny fampiasana izay ahafahantsika mampihatra mora foana ireo endri-javatra roa hafa mety amin'ny DBMS mahazatra: indeksa haingana tsy miovaova, izay ahafahantsika manao fifantenana angon-drakitra tsy amin'ny alàlan'ny lakile voalohany ihany, ary mpamorona tsy tapaka amin'ny IDs auto-incrementing monotonika.

C*Iray

Noho izany dia teraka ny DBMS vaovao C*Iray, ahitana karazana node mpizara telo:

  • Fitehirizana - (saika) mpizara Cassandra mahazatra tompon'andraikitra amin'ny fitehirizana angona amin'ny kapila eo an-toerana. Rehefa mitombo ny enta-mavesatry ny angona sy ny habetsahan'ny angona, dia azo ampitomboina mora foana ho an-jatony ny habetsahan'izy ireo.
  • Mpandrindra ny fifampiraharahana - miantoka ny fanatanterahana ny fifampiraharahana.
  • Ny mpanjifa dia mpizara fampiharana izay manatanteraka asa fandraharahana ary manomboka fifampiraharahana. Mety misy mpanjifa an'arivony toy izany.

NewSQL = NoSQL+ACID

Ny mpizara amin'ny karazany rehetra dia ampahany amin'ny cluster mahazatra, ampiasao ny protocol message Cassandra anatiny hifandraisana amin'ny tsirairay ary fifosana ho an'ny fifanakalozana fampahalalana cluster. Miaraka amin'ny fitempon'ny fo, mianatra momba ny tsy fahombiazan'ny fifampiraharahana ny mpizara, mitazona skema angon-drakitra tokana - tabilao, rafitra ary replication; rafitra fisarahana, topolojia cluster, sns.

mpanjifa

NewSQL = NoSQL+ACID

Fat Client mode no ampiasaina raha tokony ho mpamily mahazatra. Ny node toy izany dia tsy mitahiry angona, fa afaka miasa ho mpandrindra amin'ny fanatanterahana ny fangatahana, izany hoe ny Mpanjifa mihitsy no mpandrindra ny fangatahany: manontany ireo kopia fitahirizana ary mamaha ny fifandirana. Tsy azo antoka sy haingana kokoa noho ny mpamily mahazatra izany, izay mitaky fifandraisana amin'ny mpandrindra lavitra, fa mamela anao hifehy ny fandefasana fangatahana. Eo ivelan'ny fifampiraharahana misokatra amin'ny mpanjifa dia alefa any amin'ny repository ny fangatahana. Raha nanokatra fifampiraharahana ny mpanjifa, dia alefa any amin'ny mpandrindra ny fifampiraharahana ny fangatahana rehetra ao anatin'ny fifampiraharahana.
NewSQL = NoSQL+ACID

C*One Transaction Coordinator

Ny mpandrindra dia zavatra nampiharinay ho an'ny C*One hatrany am-boalohany. Izy no tompon'andraikitra amin'ny fitantanana ny fifampiraharahana, ny hidin-trano ary ny filaharan'ny fampiharana ny fifampiraharahana.

Ho an'ny fifampiraharaham-barotra tsirairay, ny mpandrindra dia mamorona fe-potoana: ny fifampiraharahana manaraka dia lehibe kokoa noho ny teo aloha. Satria ny rafitra famahana ny fifandirana an'i Cassandra dia mifototra amin'ny mari-pamantarana (amin'ny firaketana roa mifanipaka, ny iray miaraka amin'ny mari-pamantarana farany dia heverina ho amin'izao fotoana izao), ny fifandirana dia ho voalamina foana ho fanohanana ny fifampiraharahana manaraka. Dia nampiharina izahay famantaranandro Lampor - fomba mora hamahana ny disadisa ao anaty rafitra zaraina.

foto-bolo

Mba hiantohana ny fitokana-monina, dia nanapa-kevitra ny hampiasa ny fomba tsotra indrindra - pessimistic hidin-trano miorina amin'ny fototra fanalahidy ny firaketana an-tsoratra. Raha lazaina amin'ny teny hafa, amin'ny fifampiraharahana dia tsy maintsy mihidy aloha ny rakitra iray, ary avy eo vakiana, ovaina ary tehirizina. Aorian'ny fanoloran-tena mahomby dia afaka mamoha rakitra iray mba ahafahan'ny fifampiraharahana mifaninana mampiasa izany.

Ny fampiharana ny fanakatonana toy izany dia tsotra amin'ny tontolo tsy mizara. Ao amin'ny rafitra zaraina dia misy safidy roa lehibe: na mampihatra ny fanidiana voazara amin'ny cluster, na mizara ny fifampiraharahana mba hahafahan'ny mpandrindra mitovy foana ny fifampiraharahana mifandraika amin'izany.

Satria amin'ny tranga misy antsika dia efa nozaraina tamin'ireo vondron'ny fifampiraharahana eo an-toerana ao amin'ny SQL ny angon-drakitra, dia nanapa-kevitra ny hanendry vondrona fifanakalozana eo an-toerana ho mpandrindra: mpandrindra iray no manao ny fifampiraharahana rehetra miaraka amin'ny marika 0 ka hatramin'ny 9, ny faharoa - miaraka amin'ny famantarana avy amin'ny 10 ka hatramin'ny 19, sy ny sisa. Vokatr'izany dia lasa tompon'ny vondrona mpandrindra ny tsirairay amin'ireo tranga mpandrindra.

Avy eo dia azo ampiharina amin'ny endrika HashMap banal ho fahatsiarovana ny mpandrindra ny hidin-trano.

Ny tsy fahombiazan'ny mpandrindra

Satria ny mpandrindra iray ihany no manompo vondron'antoko iray, dia tena zava-dehibe ny hamaritana haingana ny zava-misy amin'ny tsy fahombiazany mba ho tapitra ny andrana faharoa hanatanterahana ny fifampiraharahana. Mba hahatonga ity haingana sy azo ianteherana ity dia nampiasa protocole fandrenesana fandrenesana mifandray tanteraka izahay:

Ny foibe data tsirairay dia manana node mpandrindra roa farafahakeliny. Tsindraindray, ny mpandrindra tsirairay dia mandefa hafatra momba ny fitempon'ny fo ho an'ireo mpandrindra hafa ary mampahafantatra azy ireo ny fampandehanana azy, ary koa ny hafatra momba ny fitempon'ny fo azony avy amin'ireo mpandrindra ao amin'ny cluster farany.

NewSQL = NoSQL+ACID

Mandray fampahalalana mitovy amin'izany avy amin'ny hafa ho ampahany amin'ny hafatry ny fitempon'ny fony, ny mpandrindra tsirairay dia manapa-kevitra ho an'ny tenany hoe inona nodes cluster miasa ary iza no tsy, tarihin'ny fitsipiky ny kôlejy: raha nahazo fampahalalana avy amin'ny ankamaroan'ny node ao amin'ny cluster momba ny mahazatra ny node X. fandraisana hafatra avy amin'ny node Y, avy eo , Y miasa. Ary ny mifamadika amin'izany, raha vao mitatitra hafatra tsy hita avy amin'ny node Y ny ankamaroany, dia nandà i Y. Mahavariana fa raha mampahafantatra ny node X ny kôlejy fa tsy mandray hafatra avy aminy intsony izy, dia ny node X mihitsy no hihevitra ny tenany ho tsy nahomby.

Ny hafatry ny fitempon'ny fo dia alefa amin'ny hafainganam-pandeha avo, in-20 eo ho eo isan-tsegondra, miaraka amin'ny fe-potoana 50 ms. Ao Java, sarotra ny miantoka ny valin'ny fampiharana ao anatin'ny 50 ms noho ny halavan'ny fiatoana azo ampitahaina ateraky ny mpanangona fako. Afaka nahatratra io fotoana famaliana io izahay tamin'ny alàlan'ny fanangonam-pako G1, izay ahafahantsika mamaritra tanjona mandritra ny faharetan'ny fiatoana GC. Na izany aza, indraindray, somary mahalana, ny mpanangona fiatoana mihoatra ny 50 ms, izay mety hitarika ho amin'ny fahadisoana diso. Mba hisorohana izany tsy hitranga, ny mpandrindra dia tsy mitatitra ny tsy fahombiazan'ny node lavitra rehefa nanjavona ny hafatra fitepon'ny fo voalohany avy aminy, raha tsy misy maromaro nanjavona nisesy. ms.

Saingy tsy ampy ny mahatakatra haingana hoe iza no node nijanona tsy niasa. Mila manao zavatra momba izany isika.

famandrihana

Ny tetika mahazatra dia, raha misy ny tsy fahombiazan'ny tompony, manomboka fifidianana vaovao amin'ny fampiasana ny iray lamaody rehetra izao algorithms. Na izany aza, ny algorithm toy izany dia manana olana fanta-daza amin'ny fifanandrifian'ny fotoana sy ny halavan'ny fizotran'ny fifidianana. Afaka nisoroka ny fahatarana fanampiny toy izany izahay tamin'ny fampiasana rafitra fanoloana mpandrindra amin'ny tambajotra mifandray tanteraka:

NewSQL = NoSQL+ACID

Andeha atao hoe te-hanao fifampiraharahana ao amin'ny vondrona 50 isika. Andeha hojerentsika mialoha ny tetika fanoloana, izany hoe, izay nodes no hanao raharaham-barotra ao amin'ny vondrona 50 raha sendra ny tsy fahombiazan'ny mpandrindra lehibe. Ny tanjonay dia ny hihazona ny fiasan'ny rafitra raha sendra ny tsy fahombiazan'ny foibe data. Andeha hojerentsika fa ny tahiry voalohany dia node avy amin'ny foibe data hafa, ary ny tahiry faharoa dia node avy amin'ny fahatelo. Voafantina indray mandeha io tetika io ary tsy miova raha tsy miova ny topologie an'ny cluster, izany hoe mandra-pidiran'ny node vaovao (izay mitranga matetika). Ny fomba hifidianana master mavitrika vaovao raha toa ka tsy mahomby ny taloha dia ho toy izao manaraka izao: ny tahiry voalohany dia ho lasa tompon'andraikitra mavitrika, ary raha tsy miasa izy dia ho lasa master mavitrika ny tahiry faharoa.

Ity rafitra ity dia azo itokisana kokoa noho ny algorithm manerantany, satria ny fampahavitrihana tompony vaovao dia ampy hamaritana ny tsy fahombiazan'ny taloha.

Ahoana anefa no hahafantaran'ny mpanjifa hoe iza no tompony miasa ankehitriny? Tsy azo atao ny mandefa vaovao amin'ny mpanjifa an'arivony ao anatin'ny 50 ms. Misy toe-javatra mety hitranga rehefa misy mpanjifa mandefa fangatahana hanokatra fifampiraharahana, tsy mbola fantany fa tsy mandeha intsony io tompony io, ary ho tapitra ny fangatahana. Mba hisorohana izany tsy hitranga, ny mpanjifa dia mandefa fangatahana hanokafana fifampiraharahana amin'ny tompon'ny vondrona sy ny tahiry roa ao aminy, fa ny tompon'andraikitra mavitrika amin'izao fotoana izao ihany no hamaly izany fangatahana izany. Ny mpanjifa dia hanao ny fifandraisana rehetra manaraka ao anatin'ny fifampiraharahana amin'ny tompon'andraikitra mavitrika ihany.

Backup masters toerana nahazo fangatahana ho an'ny raharaham-barotra izay tsy azy ao amin'ny filaharana ny zaza tsy ampy taona, izay tehirizina nandritra ny fotoana kelikely. Raha maty ny tompon'andraikitra mavitrika dia mangataka ny hanokafana ny fifampiraharahana amin'ny filaharana ny tompon'andraikitra vaovao ary mamaly ny mpanjifa. Raha efa nanokatra raharaham-barotra tamin'ny tompony taloha ny mpanjifa, dia tsy raharahaina ny valiny faharoa (ary mazava ho azy fa tsy ho vita ny fifampiraharahana toy izany ary haverin'ny mpanjifa).

Ahoana ny fiasan'ny transaction

Andeha hatao hoe nandefa fangatahana tany amin'ny mpandrindra ny mpanjifa iray mba hanokafana fifampiraharahana ho an'ny orinasa toy izao miaraka amin'ny fanalahidy fototra toy izao sy izao. Ny mpandrindra dia manidy ity singa ity ary mametraka azy ao amin'ny latabatra hidin-trano ho fitadidiana. Raha ilaina dia vakian'ny mpandrindra avy amin'ny fitehirizana ity sampan-draharaha ity ary mitahiry ny angon-drakitra aterak'izany amin'ny toetry ny fifampiraharahana ao amin'ny fitadidian'ny mpandrindra.

NewSQL = NoSQL+ACID

Rehefa te hanova ny angona amin'ny fifampiraharahana ny mpanjifa iray dia mandefa fangatahana amin'ny mpandrindra hanovana ilay sampan-draharaha, ary ny mpandrindra dia mametraka ny angon-drakitra vaovao ao amin'ny tabilao momba ny varotra ho fahatsiarovana. Izany dia mamita ny fandraisam-peo - tsy misy firaketana atao amin'ny fitahirizana.

NewSQL = NoSQL+ACID

Rehefa misy mpanjifa mangataka ny angonany niova ho ampahany amin'ny fifampiraharahana mavitrika dia manao toy izao ny mpandrindra:

  • raha efa ao anatin'ny fifampiraharahana ny ID dia alaina amin'ny fitadidiana ny angon-drakitra;
  • raha tsy misy ID ao anaty fitadidiana, dia vakiana avy amin'ny node fitehirizana ny angon-drakitra tsy hita, miaraka amin'ireo efa ao anaty fitadidiana, ary omena ny mpanjifa ny valiny.

Noho izany, ny mpanjifa dia afaka mamaky ny fanovana azy manokana, fa ny mpanjifa hafa dia tsy mahita ireo fiovana ireo, satria izy ireo dia voatahiry ao amin'ny fahatsiarovana ny mpandrindra, tsy mbola ao amin'ny Cassandra nodes.

NewSQL = NoSQL+ACID

Rehefa mandefa commit ny mpanjifa, ny fanjakana izay tao amin'ny fitadidian'ny serivisy dia tehirizin'ny mpandrindra ao anaty batch voarakitra, ary alefa ho toy ny batch voarakitra ao amin'ny fitahirizana Cassandra. Ny fivarotana dia manao izay rehetra ilaina mba hahazoana antoka fa ity fonosana ity dia ampiharina amin'ny atomika (tanteraka), ary mamerina valiny amin'ny mpandrindra, izay mamoaka ny hidin-trano ary manamafy ny fahombiazan'ny fifampiraharahana amin'ny mpanjifa.

NewSQL = NoSQL+ACID

Ary mba hamerenana indray, ny mpandrindra dia mila manafaka ny fitadidiana omen'ny toetry ny fifanakalozana.

Vokatry ny fanatsarana etsy ambony dia nampihatra ny fitsipiky ny ACID izahay:

  • Atomicity. Izany dia antoka fa tsy hisy fifampiraharahana ho voarakitra amin'ny ampahany ao amin'ny rafitra; na ho vita ny asa rehetra ataony, na tsy hisy ho vita. Manaraka an'io fitsipika io izahay amin'ny alàlan'ny batch voarakitra ao Cassandra.
  • tapaka. Ny varotra mahomby tsirairay, araka ny famaritana, dia tsy mirakitra afa-tsy vokatra manan-kery. Raha toa ka, aorian'ny fanokafana ny fifampiraharahana sy ny fanatanterahana ny ampahany amin'ny hetsika, dia hita fa tsy manan-kery ny valiny, dia misy ny famerenana indray.
  • Fitokana-monina. Rehefa vita ny fifampiraharahana dia tsy tokony hisy fiantraikany amin'ny vokatr'izany ny fifampiraharahana miaraka. Ny fifampiraharahana mifaninana dia mitoka-monina amin'ny alàlan'ny hidin-trano pessimista amin'ny mpandrindra. Ho an'ny famakiana ivelan'ny fifampiraharahana, ny fitsipika mitoka-monina dia voamarika amin'ny ambaratonga Read Committed.
  • fahamarinan-toerana. Na inona na inona olana amin'ny ambaratonga ambany - ny fahatapahan'ny rafitra, ny tsy fahombiazan'ny fitaovana - ny fanovana natao tamin'ny fifampiraharahana nahomby dia tokony ho voatahiry rehefa miverina ny asa.

Famakiana amin'ny fanondroana

Andeha isika haka latabatra tsotra:

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

Izy io dia manana ID (fanalahidy voalohany), tompony ary daty fanovana. Mila manao fangatahana tena tsotra ianao - safidio ny angona momba ny tompony miaraka amin'ny daty fanovana "ho an'ny andro farany".

SELECT *
WHERE owner=?
AND modified>?

Mba handaminana haingana ny fangatahana toy izany, amin'ny SQL DBMS mahazatra dia mila manangana index amin'ny tsanganana ianao (tompony, ovaina). Afaka manao izany mora foana izahay, satria manana antoka ACID izahay!

Fanondroana ao amin'ny C*One

Misy latabatra loharano misy sary izay ny ID firaketana no fanalahidy voalohany.

NewSQL = NoSQL+ACID

Ho an'ny fanondroana, C*One dia mamorona latabatra vaovao izay dika mitovy amin'ny tany am-boalohany. Mitovy amin'ny fitenenana fanondroana ny lakile, ary misy koa ny lakile voalohany amin'ny rakitra avy amin'ny latabatra loharano:

NewSQL = NoSQL+ACID

Ankehitriny ny fangatahana "tompon'ny andro farany" dia azo averina soratana ho voafantina amin'ny latabatra hafa:

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

Ny fifanarahan'ny angon-drakitra ao amin'ny sary latabatra loharano sy ny latabatra fanondro i1 dia tazonin'ny mpandrindra ho azy. Mifototra amin'ny schema data fotsiny, rehefa misy fiovana voaray, ny mpandrindra dia mamorona sy mitahiry fiovana tsy ao amin'ny latabatra lehibe ihany, fa amin'ny kopia ihany koa. Tsy misy hetsika fanampiny atao eo amin'ny latabatra fanondro, tsy vakiana ny logs, ary tsy misy hidy ampiasaina. Izany hoe, ny fampidirana index dia saika tsy mandany loharanon-karena ary saika tsy misy fiantraikany amin'ny hafainganan'ny fampiharana ny fanovana.

Amin'ny fampiasana ACID, dia afaka nampihatra fanondroana mitovy amin'ny SQL izahay. Izy ireo dia tsy miovaova, azo scalable, haingana, azo amboarina, ary namboarina ao amin'ny fiteny fangatahana CQL. Tsy ilaina ny fanovana ny kaody fampiharana hanohanana ny index. Tsotra toy ny ao amin'ny SQL ny zava-drehetra. Ary ny tena zava-dehibe, ny fanondroana dia tsy misy fiantraikany amin'ny hafainganam-pandehan'ny fanovana amin'ny latabatra fifampiraharahana tany am-boalohany.

Inona no nitranga

Namolavola ny C*One izahay telo taona lasa izay ary natomboka tamin'ny asa ara-barotra.

Inona no azonay tamin'ny farany? Andeha hojerentsika izany amin'ny fampiasana ny ohatry ny subsystem fanodinana sary sy fitahirizana, iray amin'ireo karazana data manan-danja indrindra amin'ny tambajotra sosialy. Tsy ny vatan'ny sary mihitsy no resahinay, fa ny karazana meta-information rehetra. Ankehitriny Odnoklassniki dia manana firaketana 20 lavitrisa toy izany, ny rafitra dia mamadika fangatahana famakiana 80 arivo isan-tsegondra, hatramin'ny 8 arivo ACID isan-tsegondra mifandray amin'ny fanovana data.

Rehefa nampiasa SQL izahay miaraka amin'ny replication factor = 1 (fa ao amin'ny RAID 10), ny sary metainformation dia voatahiry ao anaty cluster misy milina 32 mandeha amin'ny Microsoft SQL Server (miampy backups 11). Mpizara 10 koa no natokana hitehirizana backup. Fiara lafo vidy miisa 50. Mandritra izany fotoana izany, ny rafitra dia miasa amin'ny enta-mavesatra, tsy misy famandrihana.

Taorian'ny nifindrany tany amin'ny rafitra vaovao, dia nahazo replication factor = 3 - dika mitovy isaky ny foibe data. Ny rafitra dia misy 63 Cassandra node fitehirizana sy 6 milina mpandrindra, ho an'ny mpizara 69. Saingy mora kokoa ireo milina ireo, ny totalin'izy ireo dia manodidina ny 30% amin'ny vidin'ny rafitra SQL. Mandritra izany fotoana izany, ny entana dia tazonina amin'ny 30%.

Miaraka amin'ny fampidirana ny C*One, nihena ihany koa ny fahatarana: tao amin'ny SQL, nisy asa fanoratana naharitra 4,5 ms. Ao amin'ny C*One - eo amin'ny 1,6 ms. Ny faharetan'ny fifampiraharahana dia latsaky ny 40 ms eo ho eo, vita ao anatin'ny 2 ms ny fanoloran-tena, 2 ms eo ho eo ny faharetan'ny famakiana sy fanoratana. Faha-99 isan-jato - 3-3,1 ms ihany, nihena in-100 ny isan'ny fiatoana - izany rehetra izany noho ny fampiasana tombantombana.

Amin'izao fotoana izao, ny ankamaroan'ny node SQL Server dia efa nesorina; Ny vokatra vaovao dia novolavolaina tamin'ny fampiasana C * One fotsiny. Nampifanaraka ny C*One izahay mba hiasa ao amin'ny rahonay rahona tokana, izay nahafahana nanafaingana ny fametrahana cluster vaovao, nanamora ny fandrindrana sy ny fampandehanana mandeha ho azy. Raha tsy misy ny kaody loharano dia ho sarotra sy sarotra kokoa ny manao izany.

Ankehitriny dia miasa amin'ny famindrana ny trano fitahirizanay hafa mankany amin'ny rahona izahay - saingy tantara hafa tanteraka izany.

Source: www.habr.com

Add a comment