Ohjelmointi

YugaByte-katsaus: Planeettamittakaavan Cassandra ja Redis

Vuosikymmenien ajan tietokantasovellusten kehittäjänä en koskaan kuvitellut villimmissäkään unelmissani, että minulla olisi koskaan pääsy liiketapahtumiin, planeettamittakaavaan, hajautettuun tietokantaan, vielä vähemmän kuin vertaisin monia niistä. Mutta Google Cloud Spannerin, CockroachDB: n, Azure Cosmos DB: n, Neo4j Enterprise: n ja viimeisimmän YugaByte DB: n kanssa, jotka kaikki ovat saatavilla tuotannossa, tämä kertaluontoinen unelma on nyt varsin todellinen.

Yleisesti ottaen Google Cloud Spanner tarjoaa skaalautuvan, hajautetun, vahvasti yhdenmukaisen SQL-tietokannan palveluna, joka pystyy käsittelemään noin 2 000 kirjoitusta sekunnissa ja 10 000 lukua sekunnissa solmua kohden, mediaaniviive on noin viisi millisekuntia. Voit nopeuttaa lukemista, jotka eivät tarvitse ehdottomasti ajantasaista tietoa, pyytämällä Spanneria vanhentuneista lukemista, koska se tukee aikamatkakyselyjä. Spanner käyttää Googlen SQL-murretta ja toimii vain Google Cloud Platformissa.

CockroachDB on Spanner-tyyppinen, avoimen lähdekoodin SQL-tietokanta, joka tukee PostgreSQL-lankaprotokollaa ja PostgreSQL SQL -murretta. CockroachDB on rakennettu avoimen lähdekoodin kaupallisen ja johdonmukaisen avainarvosäilön RocksDB päälle. Kuten Spanner, se tukee aikamatkakyselyjä. CockroachDB voi toimia missä tahansa pilvessä, Docker-säiliöissä orkestroinnin kanssa tai ilman, tai Linux-palvelimilla tai virtuaalikoneilla. CockroachDB: n yritysversio lisää geo-osioinnin, roolipohjaisen kulunvalvonnan ja tuen.

Azure Cosmos DB on globaalisti jaettu, vaakasuunnassa osioitu, multimallitietokanta palveluna. Se tarjoaa neljä tietomallia (avainarvo, sarakeperhe, asiakirja ja kaavio) ja viisi viritettävää johdonmukaisuustasoa (vahva, rajattu tasaisuus, istunto, johdonmukainen etuliite ja lopulta). Se tarjoaa viisi API-sarjaa: SQL (murre), MongoDB-yhteensopiva, Azure Table -yhteensopiva, kaavio (Gremlin) ja Apache Cassandra -yhteensopiva. Se toimii vain Microsoft Azure -pilvessä.

Neo4j on skaalautuva ja selviytyvä kaaviotietokanta, joka käyttää Cypher-kyselykieltä. Voit asentaa avoimen lähdekoodin, klusterittoman version Windows-, MacOS- ja Linux-käyttöjärjestelmiin, Docker-säilöihin ja virtuaalikoneisiin. Neo4j Enterprise tukee korkeaa saatavuutta ja syy-klustereita; syy-klusterit mahdollistavat asynkronisesti päivitetyt lukureplikoiden klusterit, jotta maantieteellisesti hajautetut käyttöönotot olisivat tehokkaita.

Syötä Yugabyte DB

Tämän katsauksen aiheena oleva YugaByte DB on avoimen lähdekoodin transaktiotehokas, korkean suorituskyvyn tietokanta planeettamittakaavan sovelluksille, joka tukee kolmea API-sarjaa: YCQL, yhteensopiva Apache Cassandra Query Language (CQL) -sovelluksen kanssa; YEDIS, yhteensopiva Redisin kanssa; ja PostgreSQL (tällä hetkellä epätäydellinen ja beetaversio). YugaWare on YugaByte DB Enterprise Editionin orkestrointikerros. YugaWare tekee nopeaa työtä hajautettujen klustereiden pyörittämiseksi ja purkamiseksi Amazon Web Services -palvelussa, Google Cloud Platformissa ja (vuoden 2018 viimeisen vuosineljänneksen aikana) Microsoft Azuressa. YugaByte DB toteuttaa moniversioisen samanaikaisuuden hallinnan (MVCC), mutta ei vielä tue aikamatkakyselyjä.

YugaByte DB on rakennettu RocksDB-avainarvomyymälän parannetun haarukan päälle. YugaByte DB 1.0 toimitettiin toukokuussa 2018.

Kaksi avainteknologiaa, joita käytetään hajautettujen transaktiotietokantojen yhdenmukaistamiseen ja nopeaan tekemiseen, ovat klusterikonsensuksen algoritmit ja solmun kellosynkronointi. Google Cloud Spanner ja Azure Cosmos DB käyttävät molemmat Leslie Lamportin ehdottamaa Paxos-konsensusalgoritmia. CockroachDB ja YugaByte DB käyttävät Diego Ongaron ja John Ousterhoutin ehdottamaa Raft Consensus -algoritmia.

Google Cloud Spanner käyttää Googlen omistamaa TrueTime-sovellusliittymää, joka perustuu GPS: ään ja atomikelloihin. Azure Cosmos DB, CockroachDB ja YugaByte DB käyttävät hybridiloogisen kellon (HLC) aikaleimoja ja NTP (Network Time Protocol) -synkronointia.

YugaByte-suunnittelutavoitteet

YugaByten perustajat - Kannan Muthukkaruppan, Karthik Ranganathan ja Mikhail Bautin - olivat Apache HBase -sijoittajia, Apache Cassandran varhaisia ​​insinöörejä ja Facebookin NoSQL-alustan rakentajia (powered by Apache HBase). Heidän tavoitteensa YugaByte DB: lle oli hajautettu tietokantapalvelin filosofisesti Azure Cosmos DB: n ja Google Cloud Spannerin välillä; toisin sanoen he halusivat yhdistää Cosmos DB: n multimalli- ja korkean suorituskyvyn attribuutit Spannerin ACID-tapahtumiin ja maailmanlaajuiseen johdonmukaisuuteen. Toinen tapa kuvata tavoitettaan on, että he halusivat YugaByte DB: n olla transaktio-, suorituskykyinen ja planeettamittainen kerralla.

He jakoivat prosessin viiteen vaiheeseen, joiden rakentaminen kesti noin kuusi kuukautta. Ensimmäinen vaihe oli luoda erittäin yhtenäinen versio RocksDB: stä, korkean suorituskyvyn avainarvosäilö, joka on kirjoitettu C ++: lla, lisäämällä Raft-konsensusprotokolla, sirpaloituminen ja kuormituksen tasapainottaminen sekä poistamalla tapahtumalokit, pisteiden väliset varmuuskopiot, ja palautus, joka oli toteutettava ylemmässä kerroksessa.

Seuraava askel oli rakentaa lokirakenteinen, avain asiakirjoihin -tallennusmoottori lisäämällä ei-primitiivisiä ja sisäkkäisiä tyyppejä, kuten rivejä, karttoja, kokoelmia ja JSON. Sitten he lisäsivät liitettävän API-kerroksen, kuten Azure Cosmos DB, toteuttamalla Cassandra- ja Redis-yhteensopivat API: t ja lykkäämällä PostgreSQL-yhteensopivan SQL API: n myöhempään vaiheeseen. Sitten tulivat laajennetut kyselykielet.

YugaByte Cloud Query Language (YCQL) laajentaa Cassandra-sovellusliittymää tukemalla hajautettuja tapahtumia, vahvasti johdonmukaisia ​​toissijaisia ​​hakemistoja ja JSON: ta. YugaByte Dictionary Service (YEDIS) on Redis-yhteensopiva sovellusliittymä, johon on lisätty sisäänrakennettu pysyvyys, automaattinen sirpaloituminen ja lineaarinen skaalautuvuus. YEDIS sallii vaihtoehtoisesti aikajanan mukaiset, matalaviiveiset lukut lähimmästä datakeskuksesta, kun taas vahvat kirjoitusoperaatiot ylläpitävät globaalia johdonmukaisuutta. YEDIS sisältää myös uuden aikasarjatietotyypin.

Lopuksi, version 1.0 avulla YugaByte DB Enterprise lisää kerroksen organisoimaan, suojaamaan ja seuraamaan tuotantotason käyttöönottoja useilla alueilla ja useissa pilvissä sekä tallentamaan hajautetut varmuuskopiot konfiguroitavaan päätepisteeseen, kuten Amazon S3. PostgreSQL-tuki on edelleen puutteellinen ja beetatestitasolla.

Hajautetut ACID-tapahtumat

Haluan yrittää tiivistää prosessin täydellisen yksinkertaistamisen, miten YugaByte suorittaa hajautettuja ACID-tapahtumia. Happoa (joka tarkoittaa atomiteettiä, sakeutta, eristystä ja kestävyyttä) pidettiin aiemmin SQL-tietokantoihin rajoittuneena ominaisuutena.

Oletetaan, että lähetät YCQL-kyselyn, joka sisältää päivitykset tapahtuman sisällä, esimerkiksi pariliitetyn veloituksen ja hyvityksen, jotka molemmat on keskeytettävä, jos jokin epäonnistuu, jotta voidaan säilyttää finanssitietokannan yhtenäisyys. YugaByte DB hyväksyy tapahtuman valtiottomassa tapahtumahallinnassa, joista yksi toimii klusterin jokaisessa solmussa. Tapahtumienhallinta yrittää sitten ajoittaa tapahtuman tablet-palvelimelle, joka omistaa suurimman osan tapahtumassa käytetyistä tiedoista, suorituskyvyn vuoksi.

Tapahtumanhallinta lisää tapahtuman merkinnän, jolla on yksilöllinen tunnus, tapahtuman tilataulukkoon. Sitten se kirjoittaa väliaikainen tallentaa kaikille tableteille, jotka vastaavat avaimista, joita tapahtuma yrittää muokata. Jos on ristiriitoja, yksi ristiriitaisista tapahtumista palautetaan.

Kun kaikki alustavat tietueet on kirjoitettu onnistuneesti, tapahtumien hallinnoija pyytää tapahtuman tilataulukkoa korvaamaan kaikki alustavat tietueet tavallisilla tietueilla käyttäen lauttalokissaan "tapahtuma suoritettu" -merkinnän aikaleimaa. Lopuksi tapahtuman tilatabletti lähettää siivouspyynnöt jokaiselle tapahtumaan osallistuneelle tabletille.

Suorituskyvyn parantamiseksi YugaByte tallentaa välimuistiin tiedot aggressiivisesti käynnissä olevista tapahtumista, ottaa käyttöön hienorakeiset lukot ja käyttää hybridi-aikajohtajien vuokrasopimuksia estääkseen asiakkaita lukemasta vanhojen johtajien vanhentuneita arvoja. Yksiriviset ACID-tapahtumat on optimoitu siten, että niiden viiveet ovat matalat, kun ristiriitaista operaatiota ei ole. Hajautetut ACID-tapahtumat säilyttävät oikeellisuuden korkeammien viiveiden kustannuksella.

YCQL, YEDIS ja PostgreSQL

YugaByte sisältää lähes täydellisen CQL: n käyttöönoton sekä joitain laajennuksia. Yksi valtava parannus Cassandraan verrattuna on, että YugaByte on vahvasti johdonmukainen, kun taas Cassandra on lopulta johdonmukainen. Muut parannukset ovat hajautettuihin tapahtumiin, erittäin johdonmukaisiin toissijaisiin indekseihin ja JSON: iin. YugaByte ylittää Cassandran jokaisessa toiminnassa lukuun ottamatta lyhyen kantaman skannauksia, ainakin osittain sen vahvan johdonmukaisuuden vuoksi, joka mahdollistaa yhden lukemisen Cassandraan tarvittavan koorumin lukemisen sijaan.

Cassandra tukee neljää primitiivistä tietotyyppiä, joita YugaByte ei vielä tue: päivämäärä, aika, tuple ja varint. YugaBytessa on myös joitain rajoituksia lausekkeisiin.

YugaByten Rediksen käyttöönotosta puuttuu luettelotietotyyppi, mutta se lisää aikasarjatyypin. Se lisää sisäänrakennettua pysyvyyttä, automaattista sirpaloitumista ja lineaarista skaalautuvuutta sekä kykyä lukea lähimmästä datakeskuksesta matalaa viivettä varten.

YugaByten PostgreSQL-toteutus ei ole kovin kaukana. Tällä hetkellä siinä ei ole UPDATE- ja DELETE-käskyjä, lausekkeita ja SELECT-käskystä puuttuu liittymislauseke.

YugaByte-asennus ja testaus

Voit asentaa avoimen lähdekoodin YugaByte DB: n lähdekoodista, MacOS: n, Centos 7: n ja Ubuntu 16.04: n tai sitä uudempien versioiden paketeista ja Docker-kuvista Dockeriin tai Kubernetesiin. Tämän jälkeen voit luoda klustereita ja testata kolmea kysely-sovellusliittymää ja joitain esimerkkejä työmäärän generaattoreista.

Päätin asentaa YugaByte DB Enterprise -sovelluksen Google Cloud Platformiin. Vaikka manuaalisia vaiheita oli enemmän kuin olisin halunnut, pystyin käymään läpi asennuksen ja testit yhdessä iltapäivässä, kun minulla oli Enterprise Edition -lisenssiavain.

Kun YugaWare-ilmentymä oli käynnissä neljän suorittimen ilmentymässä Google Cloudissa, määritin Google Cloud Platformin tietokantaryhmäni pilvipalvelun tarjoajaksi.

Sitten loin kolmen solmun klusterin kahdeksasta CPU-instanssista Yhdysvaltojen ja itäisen alueen välillä.

Suoritin kuormitustestejä sekä CQL- että Redis-sovellusliittymillä.

Pystyin kyselemään sekä CQL- että Redis-tietoja komentoriviltä.

Loin myös kolmen solmun klusterin eri alueilla ympäri maailmaa (alla). Tämän luominen kesti kauemmin (noin 45 minuuttia) ja sillä oli odotusten mukaan paljon suurempi kirjoitusviive. Valon nopeutta ei valitettavasti voida kiertää.

YugaByte-kustannukset

Kolmen solmun YugaByte DB Enterprise Edition -lisenssin hinta on 40 000 dollaria vuodessa. Sen lisäksi sinun on otettava huomioon palvelinten kustannukset. Kolmen solmun Google Cloud Platform -ryhmässä, joka käyttää kahdeksan suorittimen VM-esiintymiä, hinta on 800–900 dollaria kuukaudessa plus verkkoliikenne, ehkä 11 000 dollaria vuodessa.

Omat kustannukset iltapäivän testauksesta olivat 0,38 dollaria tapauksille ja 0,01 dollaria vyöhykkeiden väliselle poistumiselle. Tietokantaklusterien poistaminen YugaByte DB Enterprise -rajapinnasta oli helppoa, ja kun lopetin VM-ilmentymän suorittamasta hallinto- ja orkestrointirajapintaa, siitä ei enää kertynyt merkittäviä kuluja.

Nopeampi, parempi, jaettu

Kaiken kaikkiaan YugaByte DB toimi mainostetulla tavalla. Kehityksen tässä vaiheessa se on hyödyllinen nopeammin, paremmin, hajautetusti Redis ja Cassandra. Sen pitäisi lopulta olla myös parempi PostgreSQL, vaikkakin kokemukseni mukaan se kestää kauan (vuosia eikä kuukausia), varsinkin kun pääset siihen pisteeseen, että yrität virittää relaatioliitoksia.

YugaByte DB ei vielä kilpaile Google Cloud Spannerin, CockroachDB: n tai Azure Cosmos DB: n SQL-käyttöliittymän kanssa, koska puuttuu täysi SQL-käyttöliittymä. Se ei vielä kilpaile Neo4j: n tai Cosmos DB: n kaavion käyttöliittymän kanssa graafitietokannan tuen puutteesta. Se kilpailee Redisin, Cassandran ja Cassandra-yhteensopivan käyttöliittymän kanssa Cosmos DB: hen.

Pitäisikö sinun kokeilla itse YugaByte DB: tä? Jos tarvitset Redisin tai Cassandran hajautetun version tai joudut korvaamaan MongoDB: n maailmanlaajuisesti jaetussa skenaariossa, niin kyllä. YugaByte DB: tä voidaan käyttää myös yhden tietokannan standardointiin useisiin tarkoituksiin, kuten Cassandra-tietokannan yhdistäminen Redis-välimuistiin, kuten YugaByte-asiakas Narvar on tehnyt. YugaByte DB lisää Cassandraan myös korkean suorituskyvyn toissijaisia ​​hakemistoja ja JSON-tyypin, mikä lisää sen hyödyllisyyttä transaktiotietokantana.

Haluatko YugaByte DB: n avoimen lähdekoodin vai yrityksen version, budjetistasi. Yleisesti ottaen, jos olet käynnistysohjelma, haluat todennäköisesti avoimen lähdekoodin version. Jos olet vakiintunut globaali yritys, jolla on monia transaktiotietokantasovelluksia, varsinkin jos sinun on skaalattava klustereita usein ylös ja alas, saatat hyötyä yritysversiossa olevista lisäominaisuuksista.

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