YugaByte pregled: Cassandra i Redis planetarne razmjere

Tijekom mojih desetljeća kao programera aplikacija baza podataka, ni u najluđim snovima nisam zamišljao da ću ikada imati pristup transakcijskoj, distribuiranoj bazi podataka na planeti, a još manje da ću usporediti mnoge od njih. No s Google Cloud Spannerom, CockroachDB, Azure Cosmos DB, Neo4j Enterprise i nedavno YugaByte DB-om koji su svi dostupni u proizvodnji, taj je jednokratni san o cijevima sada sasvim stvaran.

U širem smislu, Google Cloud Spanner nudi skalabilnu, distribuiranu, snažno dosljednu SQL bazu podataka kao uslugu koja može obraditi oko 2.000 upisa u sekundi i 10.000 čitanja u sekundi po čvoru, sa latencijom medija od oko pet milisekundi. Da biste ubrzali čitanja koja ne trebaju apsolutno ažurne podatke, možete zatražiti od Spannera ustaljena čitanja jer podržava upite o putovanju kroz vrijeme. Spanner koristi Googleov dijalekt SQL i radi samo na Google Cloud Platformi.

CockroachDB je SQL baza podataka otvorenog koda nalik na Spanner koja podržava PostgreSQL žičani protokol i PostgreSQL SQL dijalekt. CockroachDB izgrađen je na vrhu RocksDB-a, transakcijskog sustava otvorenog koda i konzistentne trgovine ključ / vrijednost. Kao i Spanner, podržava upite o putovanju kroz vrijeme. CockroachDB može se izvoditi na bilo kojem oblaku, u Docker spremnicima s orkestracijom ili bez nje, ili na Linux poslužiteljima ili VM-ovima. Poduzetnička verzija CockroachDB dodaje geo-particioniranje, kontrolu pristupa zasnovanu na ulogama i podršku.

Azure Cosmos DB globalno je distribuirana, vodoravno podijeljena, multimodelna baza podataka kao usluga. Nudi četiri modela podataka (ključ / vrijednost, obitelj stupaca, dokument i grafikon) i pet prilagodljivih razina dosljednosti (jaka, ograničena zastarijelost, sesija, dosljedni prefiks i eventualni). Nudi pet API skupova: SQL (dijalekt), MongoDB-kompatibilan, Azure Table-kompatibilan, graf (Gremlin) i Apache Cassandra-kompatibilan. Radi samo na oblaku Microsoft Azure.

Neo4j je skalabilna i održiva baza podataka grafova koja koristi jezik upita Cypher. Možete instalirati njegovu otvorenu verziju, neklasteriranu verziju na Windows, MacOS i Linux, u Docker spremnike i na VM-ove. Neo4j Enterprise podržava velike dostupnosti i uzročne klastere; kauzalni klasteri omogućuju asinkrono ažurirane klastere čitanih replika, kako bi se omogućile visoke performanse za zemljopisno raspoređene implementacije.

Unesite Yugabyte DB

YugaByte DB, koja je predmet ovog pregleda, baza podataka otvorenih je transakcijskih transakcija i baza podataka visokih performansi za planetarne programe koja podržava tri API skupa: YCQL, kompatibilan s Apache Cassandra Query Language (CQL); YEDIS, kompatibilan s Redisom; i PostgreSQL (trenutno nepotpun i u beta verziji). YugaWare je sloj orkestracije za YugaByte DB Enterprise Edition. YugaWare brzo radi na okretanju i rušenju distribuiranih klastera na Amazonovim web uslugama, Google Cloud Platformi i (do 4. kvartala 2018.) Microsoftu Azureu. YugaByte DB implementira multiverzijsku kontrolu istodobnosti (MVCC), ali još ne podržava upite o putovanju kroz vrijeme.

YugaByte DB je izgrađen na vrhu poboljšane vilice trgovine ključeva / vrijednosti RocksDB. YugaByte DB 1.0 isporučen u svibnju 2018.

Dvije ključne tehnologije koje se koriste za postizanje dosljednosti i brzine distribuiranih transakcijskih baza podataka su algoritmi konsenzusa klastera i sinkronizacija sata čvora. Google Cloud Spanner i Azure Cosmos DB koriste se Paxosovim konsenzus algoritmom koji je predložio Leslie Lamport. CockroachDB i YugaByte DB koriste se Raft konsenzus algoritmom koji su predložili Diego Ongaro i John Ousterhout.

Google Cloud Spanner koristi Googleov zaštićeni TrueTime API, zasnovan na GPS-u i atomskim satovima. Azure Cosmos DB, CockroachDB i YugaByte DB koriste vremenske oznake hibridnog logičkog sata (HLC) i sinkronizaciju sata protokola mrežnog vremena (NTP).

YugaByte ciljevi dizajna

Osnivači YugaByte-a - Kannan Muthukkaruppan, Karthik Ranganathan i Mikhail Bautin - bili su počinitelji Apache HBase, rani inženjeri Apache Cassandre i graditelji Facebook-ove NoSQL platforme (pokreće Apache HBase). Njihov je cilj za YugaByte DB bio distribuirani poslužitelj baza podataka filozofski između Azure Cosmos DB i Google Cloud Spannera; to jest, željeli su kombinirati atribute multimodela i visokih performansi Cosmosa DB s ACID transakcijama i globalnom dosljednošću Spannera. Drugi način opisivanja njihovog cilja je taj što su željeli da YugaByte DB odjednom bude transakcijski, visoko učinkovit i na planetarnoj razini.

Proces su podijelili u pet koraka, a za izradu svakog od njih trebalo je oko šest mjeseci. Prvi korak bio je stvaranje snažno dosljedne verzije RocksDB-a, pohrane ključa i vrijednosti visokih performansi napisane na C ++, dodavanjem Raft protokola konsenzusa, oštrinom i uravnoteženjem opterećenja i uklanjanjem evidentiranja transakcija, sigurnosnih kopija točke u vremenu, i oporavak, koji je trebalo provesti u višem sloju.

Sljedeći korak bio je izgradnja mehanizma za pohranu ključa u dokument strukturiranog dnevnikom, dodavanjem neprimitivnih i ugniježđenih tipova, poput redaka, mapa, zbirki i JSON-a. Zatim su dodali sloj API-ja koji se može priključiti, poput Azure Cosmos DB-a, implementirajući API-je kompatibilne s Cassandrom i Redis-om, i odgoditi PostgreSQL-kompatibilni SQL API u kasniju fazu. Zatim su se pojavili jezici s proširenim upitima.

YugaByte Cloud Query Language (YCQL) proširuje Cassandra API s podrškom za distribuirane transakcije, snažno konzistentne sekundarne indekse i JSON. Usluga rječnika YugaByte (YEDIS) je Redis-kompatibilni API s dodacima ugrađene postojanosti, automatskog oštrenja i linearne skalabilnosti. YEDIS opcionalno omogućuje vremenski usklađena čitanja s malim kašnjenjem iz najbližeg podatkovnog centra, dok jake operacije pisanja održavaju globalnu dosljednost. YEDIS također uključuje novi tip podataka vremenskih serija.

Konačno, s verzijom 1.0, YugaByte DB Enterprise dodaje sloj za orkestriranje, osiguravanje i praćenje implementacija proizvodnog razreda u više regija i više oblaka te pohranjuje distribuirane sigurnosne kopije na konfigurabilnu krajnju točku kao što je Amazon S3. Podrška za PostgreSQL ostaje nepotpuna i na razini beta-testa.

Distribuirane ACID transakcije 

Rizikujući potpuno pojednostavljenje postupka, dopustite mi da pokušam sažeti način na koji YugaByte izvodi distribuirane ACID transakcije. KISELINA (koja označava atomskost, konzistentnost, izolaciju i trajnost) nekad se smatrala svojstvom ograničenom na SQL baze podataka.

Pretpostavimo da predate YCQL upit koji sadrži ažuriranja unutar transakcije, na primjer upareno terećenje i kredit koji se oba moraju prekinuti ako jedan ne uspije kako bi se održala dosljednost financijske baze podataka. YugaByte DB prihvaća transakciju u upravitelju transakcija bez državljanstva, od kojih se jedan izvodi na svakom čvoru klastera. Upravitelj transakcija zatim pokušava zakazati transakciju na poslužitelju tableta koji posjeduje većinu podataka kojima se transakciji pristupa, u svrhu izvedbe.

Upravitelj transakcija dodaje unos transakcije s jedinstvenim ID-om u tablicu statusa transakcije. Zatim zapisuje privremene zapise na sve tablete odgovorne za ključeve koje transakcija pokušava izmijeniti. Ako postoje sukobi, jedna od sukobljenih transakcija se vraća.

Nakon što su svi privremeni zapisi uspješno napisani, upravitelj transakcija traži tablet statusa transakcije da zamijeni sve privremene zapise redovnim zapisima pomoću vremenske oznake unosa "izvršena transakcija" u svom dnevniku splava. Konačno, tablet s statusom transakcije šalje zahtjeve za čišćenje svim tabletima koji su sudjelovali u transakciji.

Da bi poboljšao performanse, YugaByte agresivno predmemorira informacije o transakcijama u tijeku, implementira fino zrnaste brave i koristi hibridni najam vremenskog voditelja kako bi spriječio klijente da čitaju ustaljene vrijednosti starih vođa. Jednoredne ACID transakcije optimizirane su tako da imaju niske latencije kad nema sukobljene operacije. Distribuirane ACID transakcije čuvaju ispravnost na štetu većih kašnjenja.

YCQL, YEDIS i PostgreSQL

YugaByte uključuje gotovo potpunu implementaciju CQL-a, plus neka proširenja. Jedno veliko poboljšanje u odnosu na Cassandru je to što je YugaByte čvrsto dosljedan, dok je Cassandra na kraju dosljedan. Ostala poboljšanja su za distribuirane transakcije, snažno konzistentne sekundarne indekse i JSON. YugaByte nadmašuje Cassandru za svaku operaciju, osim za skeniranja kratkog dometa, barem djelomično zbog svoje snažne dosljednosti, koja omogućuje jedno čitanje umjesto očitanja kvoruma potrebnog u Cassandri.

Cassandra podržava četiri primitivna tipa podataka koji još nisu podržani u YugaByteu: datum, vrijeme, korpa i varint. YugaByte također ima određena ograničenja u pogledu izraza. 

YugaByteovoj implementaciji Redisa nedostaje tip podataka popisa, ali dodaje tip podataka vremenske serije. Dodaje ugrađenu postojanost, automatsko oštrenje i linearnu skalabilnost, kao i mogućnost čitanja iz najbližeg podatkovnog centra radi niske latencije.

YugaByte-ova implementacija PostgreSQL-a nije baš daleko. Trenutno mu nedostaju UPDATE i DELETE izrazi, izrazi, a izrazu SELECT nedostaje klauzula join.

Instalacija i testiranje YugaBytea

Otvoreni izvor YugaByte DB možete instalirati iz izvornog koda, iz tarballs-a na MacOS-u, Centos-u 7 i Ubuntu-u 16.04 ili novijim verzijama i iz Dockerovih slika na Docker-u ili Kubernetes-u. Zatim možete stvoriti klastere i testirati tri API-ja za upit i neke uzorke generatora radnog opterećenja.

Odlučio sam instalirati YugaByte DB Enterprise na Google Cloud Platform. Iako je trebalo poduzeti više ručnih koraka nego što bih želio, uspio sam proći kroz instalaciju i testove u jednom popodnevu nakon što sam dobio svoj licenčni ključ za Enterprise Edition.

Jednom kada se instanca YugaWare izvodila na instanci s četiri procesora u Google Cloudu, konfigurirao sam Google Cloud Platform kao pružatelja usluga oblaka za svoj klaster baza podataka.

Tada sam stvorio klaster od tri čvora od osam CPU instanci u regiji SAD-istok.

Izvršio sam testove učitavanja koristeći i CQL i Redis API-je.

Uspio sam upitati i CQL i Redis podatke iz naredbenog retka.

Također sam stvorio skup od tri čvora u različitim regijama raširenim širom svijeta (dolje). Stvaranje je potrajalo duže (oko 45 minuta) i očekivano je imalo puno veću latenciju pisanja. Nažalost, ne možete zaobići brzinu svjetlosti.

YugaByte troškovi

Cijena licence YugaByte DB Enterprise Edition s tri čvora kreće se od 40 tisuća američkih dolara godišnje. Uz to, morate uzeti u obzir troškove poslužitelja. Za klaster s tri čvora na Google Cloud Platformi koji koriste instance s osam CPU VM, taj se trošak kreće u rasponu od 800 do 900 američkih dolara mjesečno plus mrežni promet, možda 11 tisuća američkih dolara godišnje.

Moji vlastiti troškovi za popodnevno testiranje iznosili su 0,38 USD za slučajeve i 0,01 USD za izlazak iz međuzone. Brisanje klastera baze podataka sa sučelja YugaByte DB Enterprise bilo je jednostavno, a nakon što sam zaustavio instancu VM koja je pokrenula sučelje za administraciju i orkestraciju, više nije nakupljao značajne troškove.

Brže, bolje, distribuirano

Sve u svemu, YugaByte DB je djelovao onako kako je oglašen. U ovom trenutku svog razvoja korisno je kao brži, bolji, distribuirani Redis i Cassandra. Na kraju bi trebao biti i bolji PostgreSQL, iako prema mom iskustvu to traje dugo (godine, a ne mjeseci), posebno kada dođete do točke pokušaja podešavanja relacijskih pridruživanja.

YugaByte DB se još uvijek ne natječe s Google Cloud Spanner, CockroachDB ili SQL sučeljem Azure Cosmos DB zbog nedostatka detaljnog SQL sučelja. Još se ne natječe s Neo4j ili grafičkim sučeljem Cosmos DB-a zbog nedostatka podrške za bazu podataka grafikona. Natječe se s Redisom, Cassandrom i Cassandrom kompatibilnim sučeljem za Cosmos DB.

Trebate li sami isprobati YugaByte DB? Ako vam je potrebna distribuirana verzija Redisa ili Cassandre ili trebate zamijeniti MongoDB za globalno distribuirani scenarij, onda da. YugaByte DB također se može koristiti za standardizaciju jedne baze podataka u više svrha, poput kombiniranja baze podataka Cassandra s Redis predmemoriranjem, kao što je to učinio YugaByteov kupac Narvar. YugaByte DB također dodaje sekundarne indekse visokih performansi i JSON tip Cassandri, povećavajući njegovu korisnost kao transakcijsku bazu podataka.

Želite li open-source ili poslovnu verziju YugaByte DB-a ovisi o vašem proračunu. Uglavnom, ako ste startup, vjerojatno želite verziju otvorenog koda. Ako ste etablirana globalna tvrtka s mnogo aplikacija za transakcijske baze podataka, posebno ako trebate često skalirati gore-dolje, možda ćete imati koristi od dodatnih značajki u poslovnoj verziji.