Programmēšana

YugaByte pārskats: Planētas mēroga Kasandra un Rediss

Gadu desmitos, kad biju datu bāzes lietojumprogrammu izstrādātājs, savos drosmīgākajos sapņos nekad neiedomājos, ka man kādreiz būs piekļuve darījumu, planētas mēroga, izplatītai datu bāzei, vēl jo mazāk, ka salīdzināšu daudzas no tām. Bet ar Google Cloud Spanner, CockroachDB, Azure Cosmos DB, Neo4j Enterprise un pavisam nesen YugaByte DB, kas visi ir pieejami ražošanā, šis vienreizējais cauruļu sapnis tagad ir diezgan reāls.

Kopumā Google Cloud Spanner piedāvā mērogojamu, izplatītu, ļoti konsekventu SQL datu bāzi kā pakalpojumu, kas vienā mezglā var apstrādāt aptuveni 2000 rakstīšanas sekundē un 10 000 lasījumu sekundē ar vidējo latentumu aptuveni piecas milisekundes. Lai paātrinātu lasīšanu, kurai nav nepieciešami absolūti atjaunināti dati, varat lūgt Spanner novecojušus lasījumus, jo tas atbalsta vaicājumus laikā. Spanner izmanto Google dialektu ar SQL un darbojas tikai Google Cloud Platform.

CockroachDB ir uz spanner līdzīga, atvērtā koda SQL datu bāze, kas atbalsta PostgreSQL vadu protokolu un PostgreSQL SQL dialektu. CockroachDB ir uzbūvēts virs RocksDB, kas ir atvērta pirmkoda darījumu un konsekventa galveno vērtību krātuve. Tāpat kā Spanner, tā atbalsta vaicājumus laikā. CockroachDB var darboties uz jebkura mākoņa, Docker konteineros ar vai bez orķestrēšanas, vai uz Linux serveriem vai VM. Uzņēmuma CockroachDB versija papildina ģeogrāfisko sadalīšanu, lomu balstītu piekļuves kontroli un atbalstu.

Azure Cosmos DB ir globāli izplatīta, horizontāli sadalīta daudzmodeļu datu bāze kā pakalpojums. Tas piedāvā četrus datu modeļus (atslēgas vērtība, kolonnu saime, dokuments un grafiks) un piecus noskaņojamus konsekvences līmeņus (spēcīgs, ierobežots stīvums, sesija, konsekvents prefikss un galu galā). Tas piedāvā piecus API komplektus: SQL (dialekts), saderīgs ar MongoDB, saderīgs ar Azure Table, grafiks (Gremlin) un saderīgs ar Apache Cassandra. Tas darbojas tikai uz Microsoft Azure mākoņa.

Neo4j ir mērogojama un izdzīvojama grafu datu bāze, kurā tiek izmantota vaicājuma valoda Cypher. Jūs varat instalēt tā atvērtā koda, neklasificēto versiju operētājsistēmās Windows, MacOS un Linux, Docker konteineros un VM. Neo4j Enterprise atbalsta augstas pieejamības un cēloņu kopas; cēloņu kopas ļauj asinhroni atjaunināt lasāmo kopiju kopas, lai nodrošinātu augstu veiktspēju ģeogrāfiski sadalītās izvietojumos.

Ievadiet Yugabyte DB

YugaByte DB, šī pārskata tēma, ir atvērtā koda, darījumu un augstas veiktspējas datu bāze planētas mēroga lietojumprogrammām, kas atbalsta trīs API kopas: YCQL, saderīga ar Apache Cassandra Query Language (CQL); YEDIS, savietojams ar Redisu; un PostgreSQL (pašlaik nepilnīga un beta versija). YugaWare ir YugaByte DB Enterprise Edition orķestrēšanas slānis. YugaWare veic ātru darbu, sadalot un sadalot kopas Amazon Web Services, Google Cloud Platform un (2018. gada 4. ceturksnī) Microsoft Azure. YugaByte DB īsteno multiversion concurrency control (MVCC), taču vēl neatbalsta vaicājumus laikā.

YugaByte DB ir uzbūvēts virs uzlabotas dakšas no RocksDB atslēgu vērtību veikala. YugaByte DB 1.0 tika piegādāts 2018. gada maijā.

Divas no galvenajām tehnoloģijām, ko izmanto, lai izplatītās darījumu datubāzes padarītu konsekventas un ātras, ir kopu vienprātības algoritmi un mezglu pulksteņa sinhronizācija. Gan Google Cloud Spanner, gan Azure Cosmos DB izmanto Leslie Lamport piedāvāto Paxos konsensa algoritmu. CockroachDB un YugaByte DB izmanto Raft Consensus algoritmu, ko ierosināja Djego Ongaro un Džons Ousterhūts.

Google Cloud Spanner izmanto Google patentēto TrueTime API, kuras pamatā ir GPS un atomu pulksteņi. Azure Cosmos DB, CockroachDB un YugaByte DB izmanto hibrīda loģiskā pulksteņa (HLC) laika zīmogus un tīkla laika protokola (NTP) pulksteņa sinhronizāciju.

YugaByte dizaina mērķi

YugaByte dibinātāji - Kannan Muthukkaruppan, Karthik Ranganathan un Mihail Bautin - bija Apache HBase nodibinātāji, Apache Cassandra agrīnie inženieri un Facebook platformas NoSQL (kuru darbina Apache HBase) celtnieki. Viņu mērķis YugaByte DB bija sadalīts datu bāzes serveris, kas filozofiski bija starp Azure Cosmos DB un Google Cloud Spanner; tas ir, viņi vēlējās apvienot Cosmos DB multimodelos un augstas veiktspējas atribūtus ar Spider ACID darījumiem un globālo konsekvenci. Vēl viens veids, kā aprakstīt viņu mērķi, ir tas, ka viņi gribēja, lai YugaByte DB būtu vienlaikus darījumu, augstas veiktspējas un planētas mēroga.

Viņi sadalīja procesu piecos posmos, un katra no tiem izveidojās aptuveni sešus mēnešus. Pirmais solis bija izveidot stingri konsekventu RocksDB, augstas veiktspējas atslēgas vērtību krātuves, kas rakstīts C ++, pievienojot Raft Consensus protokolu, sadalot un slodzes līdzsvarošanu un noņemot darījumu reģistrēšanu, momentuzņēmumu dublēšanu, un atkopšana, kas bija jāīsteno augstākā slānī.

Nākamais solis bija izveidot žurnāla strukturētu, no atslēgas uz dokumentu glabāšanas motoru, pievienojot neprimitīvus un ligzdotus veidus, piemēram, rindas, kartes, kolekcijas un JSON. Tad viņi pievienoja spraudņu API slāni, piemēram, Azure Cosmos DB, ieviešot ar Cassandra un Redis saderīgas API un atliekot ar PostgreSQL saderīgu SQL API vēlāk. Tad nāca paplašinātas vaicājumu valodas.

YugaByte Cloud Query Language (YCQL) paplašina Cassandra API ar atbalstu izplatītiem darījumiem, ļoti konsekventiem sekundārajiem indeksiem un JSON. YugaByte Dictionary Service (YEDIS) ir ar Redis saderīgs API ar iebūvētas noturības, automātiskās šķembu un lineāras mērogojamības papildinājumiem. YEDIS pēc izvēles ļauj lasīt laika grafiku konsekventi un ar zemu latentumu no tuvākā datu centra, savukārt spēcīgas rakstīšanas operācijas uztur globālu konsekvenci. YEDIS ietver arī jaunu laika rindu datu tipu.

Visbeidzot, ar versiju 1.0 YugaByte DB Enterprise pievieno slāni, lai organizētu, aizsargātu un pārraudzītu ražošanas līmeņa izvietojumus vairākos reģionos un vairākos mākoņos, un izplata izplatītās rezerves kopijas konfigurējamā galapunktā, piemēram, Amazon S3. PostgreSQL atbalsts joprojām ir nepilnīgs un beta testa līmenī.

Izplatītie ACID darījumi

Riskējot pilnībā pārmērīgi vienkāršot procesu, ļaujiet man mēģināt apkopot veidu, kā YugaByte veic izplatītus ACID darījumus. ACID (kas nozīmē atomu, konsistenci, izolāciju un izturību) agrāk uzskatīja par SQL datu bāzēs ierobežotu īpašību.

Pieņemsim, ka jūs iesniedzat YCQL vaicājumu, kurā ir atjauninājumi darījuma ietvaros, piemēram, sapārots debets un kredīts, kas abiem ir jāpārtrauc, ja tie neizdodas, lai saglabātu finanšu datu bāzes konsekvenci. YugaByte DB pieņem darījumu bezvalstnieku darījumu pārvaldniekā, no kuriem viens darbojas visos klastera mezglos. Pēc tam darījumu pārvaldnieks veiktspējas nolūkos mēģina ieplānot darījumu planšetdatora serverī, kuram pieder lielākā daļa darījumam pieejamo datu.

Darījumu pārvaldnieks darījuma statusa tabulā pievieno darījuma ierakstu ar unikālu ID. Tad tā raksta pagaidu ieraksta visām planšetdatoriem, kas atbild par atslēgām, kuras transakciju mēģina modificēt. Ja ir konflikti, viens no konfliktējošajiem darījumiem tiek atcelts.

Kad visi provizoriskie ieraksti ir veiksmīgi uzrakstīti, darījumu pārvaldnieks lūdz darījuma statusa planšetdatoru aizstāt visus provizoriskos ierakstus ar parastajiem ierakstiem, izmantojot sava plosta žurnāla ieraksta “Darījums izdarīts” laika zīmogu. Visbeidzot, darījuma statusa planšetdators nosūta tīrīšanas pieprasījumus visām planšetdatoriem, kas piedalījās darījumā.

Lai uzlabotu veiktspēju, YugaByte agresīvi saglabā kešatmiņā informāciju par notiekošajiem darījumiem, ievieš smalkas slēdzenes un izmanto hibrīda laika līderu nomu, lai klienti neļautu nolasīt veco līderu novecojušās vērtības. Vienrindas ACID darījumi tiek optimizēti ar zemu latentumu, ja nav konfliktējošas darbības. Izplatītie ACID darījumi saglabā pareizību uz augstāku latentumu rēķina.

YCQL, YEDIS un PostgreSQL

YugaByte ietver gandrīz pilnīgu CQL ieviešanu, kā arī dažus paplašinājumus. Viens milzīgs uzlabojums salīdzinājumā ar Cassandra ir tas, ka YugaByte ir stingri konsekvents, savukārt Cassandra galu galā ir konsekvents. Pārējie uzlabojumi ir izplatītie darījumi, stingri konsekventi sekundārie indeksi un JSON. YugaByte pārspēj Kasandru visās operācijās, izņemot skenēšanu nelielā diapazonā, vismaz daļēji tās spēcīgās konsistences dēļ, kas ļauj izlasīt vienu reizi, nevis Kasandrā nepieciešamo kvoruma lasījumu.

Kasandra atbalsta četrus primitīvus datu veidus, kas vēl nav atbalstīti YugaByte: datums, laiks, kopa un varint. YugaByte ir arī daži izteicienu ierobežojumi.

YugaByte Redis ieviešanai trūkst saraksta datu veida, bet tiek pievienots laika rindu datu tips. Tas papildina iebūvētu noturību, automātisko dalīšanu un lineāru mērogojamību, kā arī iespēju lasīt no tuvākā datu centra, lai nodrošinātu zemu latentumu.

YugaByte PostgreSQL ieviešana nav ļoti tālu. Šobrīd tajā trūkst UPDATE un DELETE paziņojumu, izteicienu un SELECT paziņojumā nav pievienošanās klauzulas.

YugaByte instalēšana un testēšana

Atvērtā koda YugaByte DB var instalēt no pirmkoda, no MacOS, Centos 7 un Ubuntu 16.04 vai jaunākām programmām un no Docker attēliem Docker vai Kubernetes. Pēc tam varat izveidot kopas un pārbaudīt trīs vaicājumu API un dažus darba slodzes ģeneratoru paraugus.

Es izvēlējos instalēt YugaByte DB Enterprise Google mākoņa platformā. Lai gan bija jāveic vairāk manuālu darbību, nekā es būtu vēlējies, es varēju veikt instalēšanu un testus vienā pēcpusdienā pēc tam, kad man bija Enterprise Edition licences atslēga.

Kad YugaWare eksemplārs programmā Google Cloud darbojās četru procesoru instancē, es konfigurēju Google Cloud Platform kā savas datu bāzes kopas mākoņa nodrošinātāju.

Tad es izveidoju trīs mezglu kopu no astoņiem procesoriem ASV un Austrumu reģionā.

Es veicu slodzes testus, izmantojot gan CQL, gan Redis API.

No komandrindas varēju vaicāt gan CQL, gan Redis datus.

Es arī izveidoju trīs mezglu kopu dažādos reģionos, kas izplatīti visā pasaulē (zemāk). Tā radīšana prasīja ilgāku laiku (apmēram 45 minūtes), un, kā gaidīts, bija daudz augstāks rakstīšanas latentums. Diemžēl jūs nevarat apiet gaismas ātrumu.

YugaByte izmaksas

Trīs mezglu YugaByte DB Enterprise Edition licences cena ir no 40 000 USD gadā. Papildus tam jāņem vērā serveru izmaksas. Trīs mezglu kopai Google Cloud Platform, izmantojot astoņu procesoru VM gadījumus, šīs izmaksas ir robežās no 800 līdz 900 ASV dolāriem mēnesī plus tīkla trafika, iespējams, 11 000 ASV dolāru gadā.

Manas izmaksas pēcpusdienas testēšanai bija 0,38 ASV dolāri par gadījumiem un 0,01 ASV dolāri par starpzonu izkāpšanu. Datu bāzes kopu dzēšana no YugaByte DB Enterprise saskarnes bija vienkārša, un, tiklīdz pārtraucu VM instanci, kurā darbojas administrēšanas un orķestrēšanas saskarne, tā vairs neuzkrāja ievērojamas izmaksas.

Ātrāk, labāk, izplatīti

Kopumā YugaByte DB darbojās kā reklamēts. Šajā attīstības posmā tas ir noderīgs kā ātrāks, labāks, izplatīts Redis un Cassandra. Tam galu galā vajadzētu būt arī labākam PostgreSQL, lai gan pēc manas pieredzes tas prasa ilgu laiku (gadus, nevis mēnešus), it īpaši, kad esat nonācis līdz punktam, kad mēģināt noskaņot relāciju savienojumus.

YugaByte DB vēl nekonkurē ar Google Cloud Spanner, CockroachDB vai SQL saskarni Azure Cosmos DB, jo trūkst pilnveidota SQL saskarnes. Tas vēl nekonkurē ar Neo4j vai diagrammas saskarni ar Cosmos DB, jo trūkst grafu datu bāzes atbalsta. Tas patiešām konkurē ar Redis, Cassandra un ar Cassandra saderīgo saskarni ar Cosmos DB.

Vai jums pašiem vajadzētu izmēģināt YugaByte DB? Ja jums ir nepieciešama Redis vai Cassandra izplatīta versija vai jums ir jānomaina MongoDB globāli izplatītam scenārijam, tad jā. YugaByte DB varētu izmantot arī standartizēšanai vienā datu bāzē vairākiem mērķiem, piemēram, apvienojot Cassandra datu bāzi ar Redis kešatmiņu, kā to ir darījis YugaByte klients Narvar. YugaByte DB arī pievieno Cassandra augstas veiktspējas sekundāros indeksus un JSON tipu, palielinot tā lietderību kā darījumu datu bāzi.

Tas, vai vēlaties atvērtā koda vai uzņēmuma YugaByte DB versiju, ir atkarīgs no jūsu budžeta. Kopumā, ja esat startēšanas uzņēmums, iespējams, vēlaties atvērtā pirmkoda versiju. Ja esat izveidots globāls uzņēmums ar daudzām darījumu datubāzu lietojumprogrammām, it īpaši, ja jums bieži ir nepieciešams mērogot kopas uz augšu un uz leju, jūs varētu gūt labumu no uzņēmuma versijas papildu funkcijām.

$config[zx-auto] not found$config[zx-overlay] not found