NewSQL = NoSQL+ACID

NewSQL = NoSQL+ACID
Hangtud bag-o lang, ang Odnoklassniki nagtipig mga 50 TB nga datos nga giproseso sa tinuud nga oras sa SQL Server. Alang sa ingon nga gidaghanon, halos imposible ang paghatag og paspas ug kasaligan, ug bisan ang data center failure-tolerant access gamit ang SQL DBMS. Kasagaran, sa ingon nga mga kaso, usa sa mga storage sa NoSQL ang gigamit, apan dili tanan mahimong ibalhin sa NoSQL: pipila ka mga entidad nanginahanglan mga garantiya sa transaksyon sa ACID.

Kini mitultol kanamo sa paggamit sa NewSQL storage, nga mao, usa ka DBMS nga naghatag og fault tolerance, scalability ug performance sa NoSQL system, apan sa samang higayon nagmintinar sa ACID garantiya nga pamilyar sa mga klasikal nga sistema. Adunay pipila ka nagtrabaho nga mga sistema sa industriya niining bag-ong klase, mao nga among gipatuman ang ingon nga sistema sa among kaugalingon ug gibutang kini sa komersyal nga operasyon.

Giunsa kini molihok ug kung unsa ang nahitabo - basaha sa ilawom sa pagputol.

Karon, ang binulan nga mamiminaw sa Odnoklassniki labaw pa sa 70 milyon nga talagsaon nga mga bisita. Kami Naa mi sa top five pinakadako nga mga social network sa kalibutan, ug sa taliwala sa kaluhaan nga mga site diin ang mga tiggamit naggugol sa labing daghang oras. Ang OK nga imprastraktura nagdumala sa taas kaayo nga mga karga: labaw sa usa ka milyon nga HTTP nga hangyo/sec kada atubangan. Ang mga bahin sa usa ka server fleet nga labaw sa 8000 ka piraso nahimutang duol sa usag usa - sa upat ka mga sentro sa datos sa Moscow, nga nagtugot sa network latency nga ubos sa 1 ms tali kanila.

Gigamit namo ang Cassandra sukad sa 2010, sugod sa bersyon 0.6. Karon adunay daghang dosena nga mga cluster nga naglihok. Ang labing paspas nga cluster nagproseso labaw pa sa 4 milyon nga operasyon matag segundo, ug ang labing kadaghan nga tindahan nga 260 TB.

Bisan pa, kini tanan ordinaryo nga NoSQL cluster nga gigamit alang sa pagtipig huyang nga koordinasyon datos. Gusto namon nga ilisan ang panguna nga makanunayon nga pagtipig, ang Microsoft SQL Server, nga gigamit sukad sa pagkatukod sa Odnoklassniki. Ang pagtipig naglangkob sa labaw pa sa 300 nga SQL Server Standard Edition nga mga makina, nga adunay 50 TB nga datos - mga entidad sa negosyo. Kini nga datos giusab isip kabahin sa mga transaksyon sa ACID ug gikinahanglan taas nga pagkamakanunayon.

Aron maapod-apod ang datos sa mga SQL Server node, gigamit namon ang parehas nga bertikal ug pinahigda pagbahinbahin (pagputol). Sa kasaysayan, migamit kami ug simple nga data sharding scheme: ang matag entidad gilambigit sa usa ka token - usa ka function sa entity ID. Ang mga entidad nga adunay parehas nga timaan gibutang sa parehas nga SQL server. Gipatuman ang master-detail nga relasyon aron ang mga token sa main ug child records kanunay nga magkatugma ug nahimutang sa samang server. Sa usa ka social network, hapit tanan nga mga rekord gihimo alang sa tiggamit - nga nagpasabut nga ang tanan nga datos sa tiggamit sa sulod sa usa ka functional subsystem gitipigan sa usa ka server. Kana mao, ang usa ka transaksyon sa negosyo hapit kanunay nga nag-apil sa mga lamesa gikan sa usa ka SQL server, nga nagpaposible nga masiguro ang pagkamakanunayon sa datos gamit ang lokal nga mga transaksyon sa ACID, nga wala kinahanglana nga gamiton. hinay ug dili kasaligan gipang-apod-apod nga mga transaksyon sa ACID.

Salamat sa sharding ug sa pagpadali sa SQL:

  • Wala kami mogamit sa langyaw nga yawe nga mga pagpugong, tungod kay kung ang sharding ang entity ID mahimong makit-an sa lain nga server.
  • Wala kami mogamit sa gitipigan nga mga pamaagi ug mga trigger tungod sa dugang nga load sa DBMS CPU.
  • Wala kami mogamit mga JOIN tungod sa tanan nga naa sa ibabaw ug daghang mga random nga pagbasa gikan sa disk.
  • Gawas sa usa ka transaksyon, among gigamit ang Read Uncommitted isolation level aron makunhuran ang mga deadlock.
  • Naghimo lang kami og mubo nga mga transaksyon (sa aberids nga mas mubo kaysa 100 ms).
  • Wala mi mogamit ug multi-row UPDATE ug DELETE tungod sa kadaghan sa deadlocks - usa ra ka record ang among gi-update matag higayon.
  • Kanunay namong gihimo ang mga pangutana sa mga indeks lamang - ang pangutana nga adunay bug-os nga plano sa pag-scan sa lamesa alang kanamo nagpasabut nga sobra ang pagkarga sa database ug hinungdan nga kini mapakyas.

Kini nga mga lakang nagtugot kanamo sa pagpiit sa hapit labing taas nga pasundayag gikan sa mga SQL server. Apan, ang mga problema nahimong mas ug mas daghan. Atong tan-awon sila.

Mga problema sa SQL

  • Tungod kay migamit kami sa self-written sharding, ang pagdugang sa bag-ong shards gihimo sa mano-mano sa mga administrador. Niining panahona, ang mga scalable data replika wala nagserbisyo sa mga hangyo.
  • Samtang nagkadako ang gidaghanon sa mga rekord sa lamesa, ang katulin sa pagsal-ot ug pagbag-o mikunhod; kung nagdugang mga indeks sa usa ka naa na nga lamesa, ang katulin mikunhod pinaagi sa usa ka hinungdan; ang paghimo ug paghimo pag-usab sa mga indeks mahitabo sa downtime.
  • Ang pagbaton ug gamay nga kantidad sa Windows para sa SQL Server sa produksiyon makapalisod sa pagdumala sa imprastraktura

Apan ang nag-unang problema mao

pagtugot sa sayop

Ang klasiko nga SQL server adunay dili maayo nga pagtugot sa sayup. Ingnon ta nga ikaw adunay usa ra ka database server, ug kini mapakyas kausa sa matag tulo ka tuig. Atol niini nga panahon ang site nawala sa 20 minuto, nga madawat. Kung ikaw adunay 64 nga mga server, nan ang site nawala kausa matag tulo ka semana. Ug kung ikaw adunay 200 nga mga server, nan ang site dili molihok matag semana. Kini ang problema.

Unsa ang mahimo aron mapauswag ang pagtugot sa sayup sa usa ka SQL server? Gidapit kita sa Wikipedia sa pagtukod kaayo nga anaa cluster: diin sa kaso sa kapakyasan sa bisan unsa sa mga sangkap adunay usa ka backup.

Nagkinahanglan kini usa ka panon sa mga mahal nga kagamitan: daghang mga duplikasyon, optical fiber, gipaambit nga pagtipig, ug ang paglakip sa usa ka reserba dili molihok nga kasaligan: mga 10% sa mga pagbalhin natapos sa pagkapakyas sa backup node sama sa usa ka tren sa luyo sa punoan nga node.

Apan ang nag-unang disbentaha sa ingon nga usa ka kaayo nga magamit nga cluster mao ang zero availability kung ang data center diin kini nahimutang mapakyas. Ang Odnoklassniki adunay upat ka mga sentro sa datos, ug kinahanglan namon nga masiguro ang operasyon kung adunay usa ka hingpit nga kapakyasan sa usa niini.

Alang niini mahimo natong gamiton Daghang Agalon replikasyon nga gitukod sa SQL Server. Kini nga solusyon labi ka mahal tungod sa gasto sa software ug nag-antus sa mga nahibal-an nga mga problema sa pagkopya - dili matag-an nga mga paglangan sa transaksyon nga adunay kadungan nga pagkopya ug mga paglangan sa pagpadapat sa mga replikasyon (ug, ingon usa ka sangputanan, nawala nga mga pagbag-o) nga adunay asynchronous nga pagkopya. Ang gipasabot manwal nga resolusyon sa panagbangi naghimo niini nga opsyon nga hingpit nga dili magamit kanamo.

Ang tanan niini nga mga problema nanginahanglan usa ka radikal nga solusyon, ug nagsugod kami sa pag-analisar niini sa detalye. Dinhi kinahanglan naton mahibal-an kung unsa ang panguna nga gibuhat sa SQL Server - mga transaksyon.

Simple nga transaksyon

Atong tagdon ang pinakasimple nga transaksyon, gikan sa punto sa panglantaw sa usa ka gipadapat nga SQL programmer: pagdugang og litrato sa usa ka album. Ang mga album ug mga litrato gitipigan sa lainlaing mga plato. Ang album adunay pampubliko nga photo counter. Unya ang maong transaksyon gibahin sa mosunod nga mga lakang:

  1. Gi-lock namo ang album pinaagi sa yawe.
  2. Paghimo og entry sa photo table.
  3. Kung ang litrato adunay kahimtang sa publiko, unya pagdugang usa ka counter sa publiko nga litrato sa album, i-update ang rekord ug itugyan ang transaksyon.

O sa pseudocode:

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

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

TX.commit();

Nakita namon nga ang labing kasagaran nga senaryo alang sa usa ka transaksyon sa negosyo mao ang pagbasa sa datos gikan sa database ngadto sa panumduman sa server sa aplikasyon, pagbag-o sa usa ka butang ug pag-save sa mga bag-ong kantidad balik sa database. Kasagaran sa ingon nga transaksyon nag-update kami daghang mga entidad, daghang mga lamesa.

Kung nagpatuman sa usa ka transaksyon, ang dungan nga pagbag-o sa parehas nga datos gikan sa lain nga sistema mahimong mahitabo. Pananglitan, ang Antispam mahimong magdesisyon nga ang tiggamit sa usa ka paagi nagduda ug busa ang tanan nga mga litrato sa tiggamit kinahanglan nga dili na publiko, kinahanglan nga ipadala kini alang sa kasarangan, nga nagpasabut nga usbon ang photo.status sa ubang kantidad ug i-off ang katugbang nga mga counter. Dayag nga, kung kini nga operasyon mahitabo nga wala’y garantiya sa atomicity sa aplikasyon ug pag-inusara sa mga nagkompetensya nga mga pagbag-o, sama sa ASID, nan ang resulta dili mao ang gikinahanglan - bisan ang photo counter magpakita sa sayop nga bili, o dili tanan nga mga litrato ipadala alang sa kasarangan.

Daghang parehas nga code, nga nagmaniobra sa lainlaing mga entidad sa negosyo sa sulod sa usa ka transaksyon, gisulat sa tibuuk nga paglungtad sa Odnoklassniki. Pinasukad sa kasinatian sa paglalin sa NoSQL gikan sa Katapusan nga Pagkakanunayon Nahibal-an namon nga ang pinakadako nga hagit (ug pagpamuhunan sa oras) naggikan sa paghimo sa code aron mapadayon ang pagkamakanunayon sa datos. Busa, among gikonsiderar ang nag-unang kinahanglanon alang sa bag-ong storage aron mahimong probisyon alang sa tinuod nga mga transaksyon sa ACID alang sa lohika sa aplikasyon.

Ang uban, dili kaayo hinungdanon, mga kinahanglanon mao ang:

  • Kung mapakyas ang data center, kinahanglan nga magamit ang pagbasa ug pagsulat sa bag-ong storage.
  • Pagpadayon sa kasamtangan nga katulin sa pag-uswag. Kana mao, kung nagtrabaho uban ang usa ka bag-ong repository, ang kantidad sa code kinahanglan nga parehas; dili kinahanglan nga magdugang bisan unsa sa repository, maghimo mga algorithm alang sa pagsulbad sa mga panagbangi, pagpadayon sa mga sekondaryang indeks, ug uban pa.
  • Ang katulin sa bag-ong pagtipig kinahanglan nga labi ka taas, kung nagbasa sa datos ug kung nagproseso sa mga transaksyon, nga epektibo nga nagpasabut nga ang estrikto sa akademya, unibersal, apan hinay nga mga solusyon, sama sa pananglitan, dili magamit. duha ka hugna nga pasalig.
  • Awtomatikong on-the-fly scaling.
  • Gamit ang regular nga barato nga mga server, nga wala kinahanglana nga mopalit ug exotic nga hardware.
  • Ang posibilidad sa pag-uswag sa pagtipig sa mga nag-develop sa kompanya. Sa laing pagkasulti, gihatagan og prayoridad ang proprietary o open source nga mga solusyon, mas maayo sa Java.

Mga desisyon, mga desisyon

Pag-analisar sa posible nga mga solusyon, nakaabut kami sa duha ka posible nga kapilian sa arkitektura:

Ang una mao ang pagkuha sa bisan unsang SQL server ug ipatuman ang gikinahanglan nga fault tolerance, mekanismo sa scaling, failover cluster, resolusyon sa panagbangi ug gipang-apod-apod, kasaligan ug paspas nga mga transaksyon sa ACID. Gi-rate namo kini nga opsyon nga dili kaayo importante ug labor-intensive.

Ang ikaduha nga kapilian mao ang pagkuha sa usa ka andam nga gihimo nga pagtipig sa NoSQL nga adunay gipatuman nga scaling, usa ka failover cluster, resolusyon sa panagbangi, ug ipatuman ang mga transaksyon ug SQL sa imong kaugalingon. Sa una nga pagtan-aw, bisan ang tahas sa pagpatuman sa SQL, wala’y labot ang mga transaksyon sa ACID, ingon usa ka buluhaton nga molungtad mga tuig. Apan naamgohan namo nga ang SQL feature set nga among gigamit sa praktis kay layo sa ANSI SQL Cassandra CQL layo sa ANSI SQL. Sa mas duol nga pagtan-aw sa CQL, among naamgohan nga kini duol ra sa among gikinahanglan.

Cassandra ug CQL

Busa, unsa ang makapaikag mahitungod kang Cassandra, unsa ang mga kapabilidad niini?

Una, dinhi makahimo ka og mga lamesa nga nagsuporta sa lain-laing mga tipo sa datos; mahimo nimo ang PAGPILI o PAG-UPDATE sa panguna nga yawe.

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

Aron masiguro ang pagkamakanunayon sa datos sa kopya, gigamit ni Cassandra paagi sa korum. Sa pinakasimple nga kaso, kini nagpasabot nga kung ang tulo ka mga replika sa parehas nga laray gibutang sa lainlaing mga node sa cluster, ang pagsulat giisip nga malampuson kung ang kadaghanan sa mga node (nga mao, duha sa tulo) nagpamatuod sa kalampusan sa kini nga operasyon sa pagsulat. . Ang datos sa laray gikonsiderar nga makanunayon kung, kung nagbasa, ang kadaghanan sa mga node gisusi ug gikumpirma kini. Busa, uban sa tulo ka mga replika, ang kompleto ug diha-diha nga data pagkamakanunayon gigarantiyahan kon ang usa ka node mapakyas. Kini nga pamaagi nagtugot kanamo sa pagpatuman sa usa ka mas kasaligan nga laraw: kanunay magpadala mga hangyo sa tanan nga tulo nga mga replika, naghulat sa tubag gikan sa duha nga labing paspas. Ang ulahi nga tubag sa ikatulo nga kopya gisalikway sa kini nga kaso. Ang usa ka node nga ulahi sa pagtubag mahimong adunay seryoso nga mga problema - mga preno, pagkolekta sa basura sa JVM, direkta nga pagbawi sa memorya sa Linux kernel, pagkapakyas sa hardware, pagkaputol gikan sa network. Bisan pa, wala kini makaapekto sa mga operasyon o datos sa kliyente sa bisan unsang paagi.

Ang pamaagi kung kita makontak sa tulo ka mga node ug makadawat usa ka tubag gikan sa duha gitawag pangagpas: usa ka hangyo alang sa dugang nga mga kopya gipadala bisan sa wala pa kini "mahulog".

Ang laing kaayohan sa Cassandra mao ang Batchlog, usa ka mekanismo nga nagsiguro nga ang usa ka hugpong sa mga pagbag-o nga imong gihimo mahimong hingpit nga magamit o dili magamit. Kini nagtugot kanato sa pagsulbad sa A sa ACID - atomicity sa gawas sa kahon.

Ang labing duol nga butang sa mga transaksyon sa Cassandra mao ang gitawag nga "gaan nga mga transaksyon". Apan layo sila sa "tinuod" nga mga transaksyon sa ACID: sa pagkatinuod, kini usa ka oportunidad nga buhaton CAS sa datos gikan sa usa lamang ka rekord, gamit ang consensus gamit ang heavyweight nga Paxos protocol. Busa, ubos ang katulin sa maong mga transaksyon.

Unsa ang nawala kanamo sa Cassandra

Mao nga, kinahanglan namon nga ipatuman ang tinuod nga mga transaksyon sa ACID sa Cassandra. Pinaagi niini dali namong ipatuman ang duha pa ka kombenyente nga bahin sa klasiko nga DBMS: makanunayon nga paspas nga mga indeks, nga magtugot kanamo sa paghimo sa mga pagpili sa datos dili lamang sa panguna nga yawe, ug usa ka regular nga generator sa mga monotonic auto-incrementing ID.

C*Usa

Sa ingon natawo ang usa ka bag-ong DBMS C*Usa, nga naglangkob sa tulo ka matang sa server nodes:

  • Pagtipig - (halos) standard nga mga server sa Cassandra nga responsable sa pagtipig sa datos sa mga lokal nga disk. Samtang ang load ug gidaghanon sa data motubo, ang ilang gidaghanon mahimong daling ma-scale ngadto sa tinagpulo ug gatosan.
  • Transaction coordinators - pagsiguro sa pagpatuman sa mga transaksyon.
  • Ang mga kliyente mao ang mga server sa aplikasyon nga nagpatuman sa mga operasyon sa negosyo ug nagsugod sa mga transaksyon. Mahimong adunay linibo sa ingon nga mga kliyente.

NewSQL = NoSQL+ACID

Ang mga server sa tanan nga mga tipo kabahin sa usa ka komon nga cluster, gamita ang internal nga Cassandra message protocol aron makigkomunikar sa usag usa ug tsismis alang sa pagbayloay sa impormasyon sa cluster. Uban sa Heartbeat, ang mga tigtagad makakat-on mahitungod sa usag usa ka kapakyasan, pagmintinar sa usa ka data schema - mga lamesa, ang ilang gambalay ug replikasyon; partitioning scheme, cluster topology, ug uban pa.

Mga kliyente

NewSQL = NoSQL+ACID

Imbis nga mga standard nga drayber, gigamit ang Fat Client mode. Ang ingon nga node wala magtipig sa datos, apan mahimo’g molihok ingon usa ka koordinetor alang sa pagpatuman sa hangyo, nga mao, ang Kliyente mismo naglihok ingon usa ka koordinetor sa mga hangyo niini: gipangutana niini ang mga replika sa pagtipig ug gisulbad ang mga panagbangi. Dili lamang kini mas kasaligan ug mas paspas kay sa standard nga drayber, nga nagkinahanglan sa komunikasyon sa usa ka hilit nga coordinator, apan nagtugot usab kanimo sa pagkontrolar sa pagpadala sa mga hangyo. Sa gawas sa usa ka transaksyon nga bukas sa kliyente, ang mga hangyo ipadala sa mga repositoryo. Kung ang kliyente nagbukas sa usa ka transaksyon, nan ang tanan nga mga hangyo sa sulod sa transaksyon ipadala sa coordinator sa transaksyon.
NewSQL = NoSQL+ACID

C*One Transaction Coordinator

Ang coordinator usa ka butang nga among gipatuman para sa C*One gikan sa sinugdan. Kini ang responsable sa pagdumala sa mga transaksyon, mga kandado, ug ang han-ay diin ang mga transaksyon gipadapat.

Alang sa matag serbisyo nga transaksyon, ang coordinator makamugna og timestamp: ang matag sunod nga transaksyon mas dako kay sa miaging transaksyon. Tungod kay ang sistema sa pagsulbad sa panagbangi ni Cassandra gibase sa mga timestamp (sa duha ka nagkasumpaki nga mga rekord, ang usa nga adunay pinakabag-o nga timestamp giisip nga kasamtangan), ang panagbangi kanunay nga masulbad pabor sa sunod nga transaksyon. Sa ingon atong gipatuman Lamport nga relo - usa ka barato nga paagi sa pagsulbad sa mga panagbangi sa usa ka distributed nga sistema.

Kandado

Aron masiguro ang pagkahimulag, nakahukom kami nga gamiton ang pinakasimple nga pamaagi - pessimistic nga mga kandado base sa nag-unang yawe sa rekord. Sa laing pagkasulti, sa usa ka transaksyon, ang usa ka rekord kinahanglan una nga ma-lock, unya basaha, usbon, ug i-save. Human lamang sa usa ka malampuson nga pasalig nga ang usa ka rekord ma-unlock aron ang mga nakigkompetensya nga mga transaksyon makagamit niini.

Ang pagpatuman sa ingon nga pag-lock yano ra sa usa ka dili-apod-apod nga palibot. Sa usa ka sistema nga gipang-apod-apod, adunay duha ka nag-unang mga kapilian: ipatuman ang giapod-apod nga pag-lock sa cluster, o pag-apod-apod sa mga transaksyon aron ang mga transaksyon nga naglambigit sa parehas nga rekord kanunay nga giserbisyohan sa parehas nga coordinator.

Tungod kay sa among kaso ang datos na-apod-apod na sa mga grupo sa lokal nga mga transaksyon sa SQL, nakahukom nga itudlo ang mga lokal nga grupo sa transaksyon ngadto sa mga coordinator: ang usa ka coordinator naghimo sa tanan nga mga transaksyon nga adunay mga token gikan sa 0 ngadto sa 9, ang ikaduha - nga adunay mga token gikan sa 10 ngadto sa 19, ug uban pa. Ingon usa ka sangputanan, ang matag usa sa mga instance sa coordinator nahimo nga agalon sa grupo sa transaksyon.

Unya ang mga kandado mahimong ipatuman sa porma sa usa ka banal nga HashMap sa panumduman sa coordinator.

Mga kapakyasan sa Coordinator

Tungod kay ang usa ka coordinator eksklusibo nga nag-alagad sa usa ka grupo sa mga transaksyon, hinungdanon kaayo nga dali nga mahibal-an ang kamatuoran sa kapakyasan niini aron ang ikaduhang pagsulay sa pagpatuman sa transaksyon matapos. Aron mahimo kini nga paspas ug kasaligan, gigamit namon ang usa ka hingpit nga konektado nga protocol sa quorum hearbeat:

Ang matag data center nag-host ug labing menos duha ka coordinator node. Matag karon ug unya, ang matag coordinator magpadala ug usa ka mensahe sa pinitik sa kasingkasing ngadto sa ubang mga koordinetor ug ipahibalo kanila ang mahitungod sa pag-obra niini, ingon man ang mga mensahe sa pinitik sa kasingkasing nga nadawat niini gikan sa mga coordinator sa cluster sa miaging higayon.

NewSQL = NoSQL+ACID

Nakadawat og susama nga impormasyon gikan sa uban isip kabahin sa ilang mga mensahe sa pinitik sa kasingkasing, ang matag coordinator mohukom alang sa iyang kaugalingon kung unsang mga cluster node ang naglihok ug diin ang wala, gigiyahan sa prinsipyo sa korum: kung ang node X nakadawat og impormasyon gikan sa kadaghanan sa mga node sa cluster mahitungod sa normal resibo sa mga mensahe gikan sa node Y, unya , Y nagtrabaho. Ug vice versa, sa diha nga ang kadaghanan nagreport sa nawala nga mga mensahe gikan sa node Y, nan ang Y nagdumili. Makapaikag nga kung ang korum nagpahibalo sa node X nga wala na kini makadawat mga mensahe gikan niini, nan ang node X mismo mag-isip sa iyang kaugalingon nga napakyas.

Ang mga mensahe sa heartbeat gipadala nga adunay taas nga frequency, mga 20 ka beses matag segundo, nga adunay panahon nga 50 ms. Sa Java, lisud ang paggarantiya sa tubag sa aplikasyon sulod sa 50 ms tungod sa ikatandi nga gitas-on sa mga paghunong tungod sa tigkolekta sa basura. Nakab-ot namo kini nga oras sa pagtubag gamit ang G1 garbage collector, nga nagtugot kanamo sa pagtino sa usa ka target alang sa gidugayon sa GC nga paghunong. Bisan pa, usahay, panagsa ra, ang kolektor mohunong labaw sa 50 ms, nga mahimong mosangput sa usa ka sayup nga pag-ila sa sayup. Aron mapugngan kini nga mahitabo, ang coordinator dili magreport sa usa ka kapakyasan sa usa ka hilit nga node sa diha nga ang unang heartbeat nga mensahe gikan niini mawala, lamang kung daghan ang nawala sa sunod-sunod nga paagi. ms.

Apan dili igo nga masabtan dayon kung unsang node ang mihunong sa paglihok. Kinahanglan natong buhaton ang usa ka butang mahitungod niini.

Pagpareserba

Ang klasiko nga laraw naglakip, kung adunay usa ka master failure, pagsugod sa usa ka bag-ong eleksyon gamit ang usa sa uso unibersal mga algorithm. Bisan pa, ang ingon nga mga algorithm adunay nahibal-an nga mga problema sa panagsama sa oras ug ang gidugayon sa proseso sa eleksyon mismo. Nakalikay kami sa ingon nga dugang nga mga paglangan gamit ang usa ka pamaagi sa pagpuli sa coordinator sa usa ka hingpit nga konektado nga network:

NewSQL = NoSQL+ACID

Ingnon ta nga gusto natong ipatuman ang usa ka transaksyon sa grupo 50. Atong mahibal-an daan ang kapuli nga pamaagi, nga mao, kung unsang mga node ang magpatuman sa mga transaksyon sa grupo 50 kung adunay kapakyasan sa main coordinator. Ang among katuyoan mao ang pagpadayon sa pagpaandar sa sistema kung adunay pagkapakyas sa data center. Atong tinoon nga ang unang reserba mahimong usa ka node gikan sa laing data center, ug ang ikaduha nga reserba usa ka node gikan sa ikatulo. Kini nga laraw gipili sa makausa ug dili mausab hangtod ang topology sa cluster mausab, nga mao, hangtod ang bag-ong mga node mosulod niini (nga panagsa ra mahitabo). Ang pamaagi alang sa pagpili sa usa ka bag-ong aktibo nga agalon kung ang daan napakyas kanunay nga ingon sa mosunod: ang una nga reserba mahimong aktibo nga agalon, ug kung kini mihunong sa pag-obra, ang ikaduha nga reserba mahimong aktibo nga agalon.

Kini nga laraw mas kasaligan kaysa sa unibersal nga algorithm, tungod kay aron ma-aktibo ang usa ka bag-ong agalon igo na aron mahibal-an ang kapakyasan sa daan.

Apan unsaon pagsabot sa mga kliyente kung kinsa nga agalon ang nagtrabaho karon? Imposible nga ipadala ang kasayuran sa libu-libo nga mga kliyente sa 50 ms. Posible ang usa ka sitwasyon kung ang usa ka kliyente nagpadala usa ka hangyo sa pag-abli sa usa ka transaksyon, wala pa nahibal-an nga kini nga agalon wala na molihok, ug ang hangyo mag-time out. Aron mapugngan kini nga mahitabo, ang mga kliyente espekulatibo nagpadala sa usa ka hangyo sa pag-abli sa usa ka transaksyon ngadto sa agalon sa grupo ug sa duha sa iyang mga reserba sa makausa, apan ang usa lamang nga aktibo nga agalon sa pagkakaron ang motubag niini nga hangyo. Ang kliyente maghimo sa tanan nga sunod nga komunikasyon sa sulod sa transaksyon lamang sa aktibo nga agalon.

Backup masters dapit nakadawat hangyo alang sa mga transaksyon nga dili ila ngadto sa pila sa wala pa matawo nga mga transaksyon, diin sila gitipigan sa pipila ka mga panahon. Kung ang aktibo nga agalon mamatay, ang bag-ong master nagproseso sa mga hangyo sa pag-abli sa mga transaksyon gikan sa pila niini ug pagtubag sa kliyente. Kung ang kliyente nagbukas na sa usa ka transaksyon sa tigulang nga agalon, nan ang ikaduha nga tubag wala panumbalinga (ug, klaro, ang ingon nga transaksyon dili makompleto ug sublion sa kliyente).

Giunsa ang paglihok sa transaksyon

Ingnon ta nga ang usa ka kliyente nagpadala usa ka hangyo sa coordinator nga magbukas sa usa ka transaksyon alang sa ingon ug ingon nga entidad nga adunay ingon ug ingon niana nga panguna nga yawe. Gi-lock sa coordinator kini nga entidad ug gibutang kini sa lock table sa memorya. Kung gikinahanglan, ang coordinator mobasa niini nga entidad gikan sa pagtipig ug magtipig sa resulta nga datos sa usa ka kahimtang sa transaksyon sa panumduman sa coordinator.

NewSQL = NoSQL+ACID

Kung gusto sa usa ka kliyente nga usbon ang datos sa usa ka transaksyon, nagpadala kini usa ka hangyo sa koordinetor aron usbon ang entidad, ug ibutang sa koordinetor ang bag-ong datos sa lamesa sa kahimtang sa transaksyon sa memorya. Nakompleto niini ang pagrekord - wala’y gihimo nga pagrekord sa pagtipig.

NewSQL = NoSQL+ACID

Kung ang usa ka kliyente nangayo sa kaugalingon nga nabag-o nga datos isip bahin sa usa ka aktibo nga transaksyon, ang coordinator molihok sama sa mosunod:

  • kung ang ID naa na sa transaksyon, nan ang datos gikuha gikan sa panumduman;
  • kung walay ID sa panumduman, nan ang nawala nga datos gibasa gikan sa mga storage node, inubanan sa mga naa na sa panumduman, ug ang resulta gihatag sa kliyente.

Sa ingon, ang kliyente makabasa sa kaugalingon nga mga pagbag-o, apan ang ubang mga kliyente wala makakita niini nga mga pagbag-o, tungod kay kini gitipigan lamang sa panumduman sa coordinator; wala pa sila sa Cassandra nodes.

NewSQL = NoSQL+ACID

Kung ang kliyente nagpadala sa commit, ang estado nga naa sa panumduman sa serbisyo gitipigan sa coordinator sa usa ka na-log nga batch, ug gipadala ingon usa ka na-log nga batch sa pagtipig sa Cassandra. Gibuhat sa mga tindahan ang tanan nga kinahanglan aron masiguro nga kini nga pakete atomically (hingpit) nga gipadapat, ug ibalik ang tubag sa coordinator, nga nagpagawas sa mga kandado ug nagpamatuod sa kalampusan sa transaksyon sa kliyente.

NewSQL = NoSQL+ACID

Ug sa pag-rollback, ang coordinator kinahanglan lamang nga buhian ang memorya nga giokupar sa estado sa transaksyon.

Isip resulta sa mga kalamboan sa ibabaw, among gipatuman ang mga prinsipyo sa ACID:

  • Atomicity. Kini usa ka garantiya nga walay transaksyon nga partially recorded sa sistema; bisan ang tanan nga mga suboperasyon makompleto, o walay makompleto. Gisunod namo kini nga prinsipyo pinaagi sa naka-log nga batch sa Cassandra.
  • pagkamakanunayon. Ang matag malampuson nga transaksyon, pinaagi sa kahulugan, nagrekord lamang sa balido nga mga resulta. Kung, pagkahuman sa pag-abli sa usa ka transaksyon ug paghimo sa bahin sa mga operasyon, nahibal-an nga ang resulta dili balido, usa ka rollback ang gihimo.
  • Paglain. Kung ang usa ka transaksyon gipatuman, ang kadungan nga mga transaksyon kinahanglan dili makaapekto sa sangputanan niini. Ang mga nakigkompetensya nga mga transaksyon gilain gamit ang mga pessimistic nga mga kandado sa coordinator. Alang sa mga pagbasa sa gawas sa usa ka transaksyon, ang prinsipyo sa pag-inusara giobserbahan sa lebel sa Read Committed.
  • Pagpadayon. Bisag unsa pa ang mga problema sa ubos nga lebel—system blackout, hardware failure—ang mga pagbag-o nga gihimo sa usa ka malampusong nahuman nga transaksyon kinahanglang magpabiling mapreserbar kon magpadayon ang operasyon.

Pagbasa pinaagi sa mga indeks

Atong kuhaon ang usa ka yano nga lamesa:

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

Kini adunay ID (panguna nga yawe), tag-iya ug petsa sa pagbag-o. Kinahanglan ka nga maghimo usa ka yano nga hangyo - pilia ang datos sa tag-iya nga adunay petsa sa pagbag-o "alang sa katapusan nga adlaw".

SELECT *
WHERE owner=?
AND modified>?

Aron maproseso dayon ang ingon nga pangutana, sa usa ka klasiko nga SQL DBMS kinahanglan nimo nga maghimo usa ka indeks sa mga kolum (tag-iya, giusab). Dali ra namong mahimo kini, tungod kay aduna na kami mga garantiya sa ACID!

Mga indeks sa C*One

Adunay usa ka tinubdan nga lamesa nga adunay mga litrato diin ang record ID mao ang panguna nga yawe.

NewSQL = NoSQL+ACID

Para sa usa ka index, ang C*One nagmugna ug bag-ong lamesa nga usa ka kopya sa orihinal. Ang yawe parehas sa ekspresyon sa indeks, ug naglakip usab kini sa panguna nga yawe sa rekord gikan sa gigikanan nga lamesa:

NewSQL = NoSQL+ACID

Karon ang pangutana alang sa "tag-iya alang sa katapusang adlaw" mahimong isulat pag-usab isip usa ka pinili gikan sa laing lamesa:

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

Ang pagkamakanunayon sa mga datos sa tinubdan nga mga litrato sa lamesa ug ang indeks nga lamesa i1 awtomatikong gipadayon sa coordinator. Base sa data schema nga nag-inusara, kung ang usa ka pagbag-o madawat, ang coordinator nagmugna ug nagtipig sa usa ka pagbag-o dili lamang sa main table, kondili sa mga kopya usab. Wala’y dugang nga mga aksyon nga gihimo sa lamesa sa indeks, wala gibasa ang mga troso, ug wala’y gigamit nga mga kandado. Sa ato pa, ang pagdugang sa mga indeks halos wala’y mga kapanguhaan ug halos wala’y epekto sa katulin sa pagpadapat sa mga pagbag-o.

Gamit ang ACID, nakahimo kami sa pagpatuman sa mga indeks nga sama sa SQL. Sila makanunayon, scalable, paspas, composable, ug gitukod sa CQL nga pangutana nga pinulongan. Wala’y mga pagbag-o sa code sa aplikasyon nga gikinahanglan aron masuportahan ang mga indeks. Ang tanan yano ra sama sa SQL. Ug ang labing hinungdanon, ang mga indeks dili makaapekto sa katulin sa pagpatuman sa mga pagbag-o sa orihinal nga lamesa sa transaksyon.

Unsay nahitabo

Among gihimo ang C*One tulo ka tuig na ang milabay ug gilusad kini ngadto sa komersyal nga operasyon.

Unsa ang atong nakuha sa katapusan? Atong susihon kini gamit ang panig-ingnan sa pagproseso sa litrato ug subsystem sa pagtipig, usa sa labing hinungdanon nga tipo sa datos sa usa ka social network. Wala kami maghisgot bahin sa mga lawas sa mga litrato mismo, apan bahin sa tanan nga mga matang sa meta-impormasyon. Karon ang Odnoklassniki adunay mga 20 bilyon nga ingon nga mga rekord, ang sistema nagproseso sa 80 ka libo nga mga hangyo sa pagbasa matag segundo, hangtod sa 8 ka libo nga mga transaksyon sa ACID kada segundo nga may kalabutan sa pagbag-o sa datos.

Kung gigamit namon ang SQL nga adunay replication factor = 1 (apan sa RAID 10), ang metainformation sa litrato gitipigan sa usa ka labi ka magamit nga kumpol sa 32 nga mga makina nga nagdagan sa Microsoft SQL Server (dugang 11 nga mga backup). Ang 10 nga mga server gigahin usab alang sa pagtipig sa mga backup. Kinatibuk-ang 50 ka mahalon nga mga sakyanan. Sa samang higayon, ang sistema naglihok sa rated load, nga walay reserba.

Pagkahuman sa paglalin sa bag-ong sistema, nakadawat kami nga hinungdan sa replikasyon = 3 - usa ka kopya sa matag sentro sa datos. Ang sistema naglangkob sa 63 Cassandra storage nodes ug 6 coordinator machines, sa kinatibuk-an nga 69 servers. Apan kini nga mga makina mas barato, ang ilang kinatibuk-ang gasto mga 30% sa gasto sa usa ka sistema sa SQL. Sa samang higayon, ang load gitipigan sa 30%.

Sa pagpaila sa C*One, mikunhod usab ang latency: sa SQL, ang usa ka operasyon sa pagsulat mikuha ug mga 4,5 ms. Sa C*One - mga 1,6 ms. Ang gidugayon sa transaksyon anaa sa aberids nga ubos sa 40 ms, ang commit nahuman sa 2 ms, ang gidugayon sa pagbasa ug pagsulat anaa sa aberids nga 2 ms. Ika-99 nga porsyento - 3-3,1 ms lamang, ang gidaghanon sa mga timeout mikunhod sa 100 ka beses - tanan tungod sa kaylap nga paggamit sa espekulasyon.

Sa pagkakaron, kadaghanan sa mga SQL Server node na-decommission na; ang mga bag-ong produkto kay gihimo lang gamit ang C*One. Among gipahiangay ang C*One aron magtrabaho sa among panganod usa ka panganod, nga nagpaposible sa pagpadali sa pag-deploy sa mga bag-ong cluster, pagpayano sa pag-configure ug pag-automate sa operasyon. Kung wala ang source code, ang pagbuhat niini mas lisud ug hago.

Karon kami nagtrabaho sa pagbalhin sa among uban pang mga pasilidad sa pagtipig sa panganod - apan kana usa ka lahi nga istorya.

Source: www.habr.com

Idugang sa usa ka comment