Programavimas

„YugaByte“ apžvalga: Planetos mastelio Kasandra ir Redis

Per savo dešimtmečius, būdamas duomenų bazių programų kūrėjas, nė drąsiausiais sapnais neįsivaizdavau, kad kada nors turėsiu prieigą prie sandorių, planetos mastu paskirstytos duomenų bazės, tuo labiau, kad daugelį jų lyginčiau. Tačiau turint „Google Cloud Spanner“, „CockroachDB“, „Azure Cosmos DB“, „Neo4j Enterprise“ ir pastaruoju metu „YugaByte DB“, kurias galima įsigyti, ši vienkartinė svajonė dabar yra tikra.

Apskritai „Google Cloud Spanner“ siūlo keičiamo dydžio, paskirstytą, labai nuoseklią „SQL“ duomenų bazę kaip paslaugą, kuri gali apdoroti maždaug 2 000 įrašų per sekundę ir 10 000 skaitymų per sekundę per mazgą, vidutinė vėlavimo trukmė yra apie penkias milisekundes. Norėdami pagreitinti skaitymus, kuriems nereikia visiškai naujausių duomenų, galite paprašyti „Spanner“ pasenusių skaitymų, nes jis palaiko kelionių laiku klausimus. „Spanner“ naudoja „Google“ SQL dialektą ir veikia tik „Google Cloud Platform“.

„CockroachDB“ yra „Spanner“ tipo, atviro kodo SQL duomenų bazė, palaikanti „PostgreSQL“ laido protokolą ir „PostgreSQL“ SQL dialektą. „CockroachDB“ yra pastatytas ant „RocksDB“, atviro kodo sandorių ir nuoseklios svarbiausios vertės parduotuvės. Kaip ir „Spanner“, jis palaiko kelionių laiku klausimus. „CockroachDB“ gali veikti bet kuriame debesyje, „Docker“ konteineriuose su orkestru arba be jo, arba „Linux“ serveriuose ar VM. Įmonės „CockroachDB“ versija papildo geografinį skaidymą, vaidmenimis pagrįstą prieigos valdymą ir palaikymą.

„Azure Cosmos DB“ yra visame pasaulyje paskirstyta, horizontaliai padalinta daugiamodelinė duomenų bazė kaip paslauga. Jis siūlo keturis duomenų modelius (rakto vertė, stulpelių šeima, dokumentas ir grafikas) ir penkis derinamus nuoseklumo lygius (stiprus, ribotas pastovumas, seansas, nuoseklus priešdėlis ir galiausiai). Jis siūlo penkis API rinkinius: SQL (dialektas), suderinamas su MongoDB, suderinamas su „Azure Table“, grafiku („Gremlin“) ir „Apache Cassandra“. Jis veikia tik „Microsoft Azure“ debesyje.

„Neo4j“ yra keičiamo dydžio ir išgyvenama grafikų duomenų bazė, naudojanti „Cypher“ užklausos kalbą. Galite įdiegti jo atvirojo kodo, nesugrupuotą grupę „Windows“, „MacOS“ ir „Linux“, „Docker“ talpyklose ir VM. „Neo4j Enterprise“ palaiko aukštą prieinamumą ir priežastinius klasterius; priežastiniai klasteriai leidžia asinchroniškai atnaujinti skaitytų replikų sankaupas, kad būtų užtikrintas aukštas geografiškai paskirstytų diegimų našumas.

Įveskite „Yugabyte DB“

„YugaByte DB“, šios apžvalgos tema, yra atviro kodo, operacinė, didelio našumo duomenų bazė, skirta planetos mastelio programoms, palaikanti tris API rinkinius: YCQL, suderinamą su „Apache Cassandra Query Language“ (CQL); YEDIS, suderinamas su Redis; ir „PostgreSQL“ (šiuo metu neišsami ir beta versija). „YugaWare“ yra „YugaByte DB Enterprise Edition“ orkestravimo sluoksnis. „YugaWare“ greitai dirba sukurdama ir išardydama paskirstytus klasterius „Amazon Web Services“, „Google Cloud Platform“ ir (iki 2018 m. IV ketvirčio) „Microsoft Azure“. „YugaByte DB“ įgyvendina daugiafunkcinį lygiagretumo valdymą (MVCC), tačiau kol kas nepalaiko kelionės laiko užklausų.

„YugaByte DB“ yra pastatytas ant patobulintos „RocksDB“ raktų vertės parduotuvės šakės. „YugaByte DB 1.0“ pristatyta 2018 m. Gegužės mėn.

Dvi pagrindinės technologijos, naudojamos paskirstytų sandorių duomenų bazėms padaryti nuoseklioms ir greitoms, yra grupių konsensuso algoritmai ir mazgų laikrodžio sinchronizavimas. „Google Cloud Spanner“ ir „Azure Cosmos DB“ naudoja Leslie Lamport pasiūlytą „Paxos“ sutarimo algoritmą. „CockroachDB“ ir „YugaByte DB“ naudoja Diego Ongaro ir Johno Ousterhouto pasiūlytą „Raft Consensus“ algoritmą.

„Google Cloud Spanner“ naudoja „Google“ nuosavybės teise priklausančią „TrueTime“ API, pagrįstą GPS ir atominiais laikrodžiais. „Azure Cosmos DB“, „CockroachDB“ ir „YugaByte“ DB naudojamos hibridinio loginio laikrodžio (HLC) laiko žymos ir tinklo laiko protokolo (NTP) laikrodžio sinchronizavimas.

„YugaByte“ dizaino tikslai

„YugaByte“ įkūrėjai - Kannanas Muthukkaruppanas, Karthikas Ranganathanas ir Michailas Bautinas - buvo „Apache HBase“ vykdytojai, ankstyvieji „Apache Cassandra“ inžinieriai ir „Facebook“ platformos „NoSQL“ (kurią teikia „Apache HBase“) kūrėjai. Jų „YugaByte DB“ tikslas buvo filosofiškai paskirstytas duomenų bazių serveris tarp „Azure Cosmos DB“ ir „Google Cloud Spanner“; tai yra, jie norėjo sujungti „Cosmos DB“ multimodelinius ir didelio našumo atributus su „ACID“ operacijomis ir pasauliniu „Spanner“ nuoseklumu. Kitas būdas apibūdinti savo tikslą yra tai, kad jie norėjo, kad „YugaByte DB“ būtų operacinė, didelio našumo ir viso plano mastu vienu metu.

Jie suskirstė procesą į penkis etapus, kurių kiekvienas užtruko apie šešis mėnesius. Pirmasis žingsnis buvo sukurti labai nuoseklią „RocksDB“, didelio našumo raktų vertės saugyklos, parašytos C ++, versiją, pridedant „Raft Consensus“ protokolą, skaidant ir apkrovos balansavimą ir pašalinant operacijų registravimą, atsargines atsargines kopijas taške. ir atkūrimas, kurį reikėjo įgyvendinti aukštesniame sluoksnyje.

Kitas žingsnis buvo sukurti žurnalo struktūrizuotą raktų-dokumentų saugojimo variklį, pridedant ne primityvius ir įdėtus tipus, tokius kaip eilutės, žemėlapiai, kolekcijos ir JSON. Tada jie pridėjo įskiepijamą API sluoksnį, pvz., „Azure Cosmos DB“, įdiegdami suderinamus su „Cassandra“ ir „Redis“ API ir atidėdami „PostgreSQL“ suderinamą SQL API vėlesniame etape. Tada atsirado išplėstinės užklausų kalbos.

„YugaByte Cloud Query Language“ (YCQL) išplečia „Cassandra“ API palaikydama paskirstytas operacijas, labai nuoseklius antrinius indeksus ir JSON. „YugaByte Dictionary“ paslauga (YEDIS) yra su „Redis“ suderinama API, papildanti integruotą patvarumą, automatinį dalijimąsi ir linijinį mastelį. YEDIS pasirinktinai leidžia nuosekliai skaityti laiko juostą iš mažo delsos iš artimiausio duomenų centro, o stiprios rašymo operacijos palaiko visuotinį nuoseklumą. YEDIS taip pat apima naują laiko eilučių duomenų tipą.

Galiausiai, naudodama 1.0 versiją, „YugaByte DB Enterprise“ prideda sluoksnį, kad būtų galima organizuoti, apsaugoti ir stebėti gamybos lygio diegimą keliuose regionuose ir keliuose debesyse, ir paskirstytas atsargines kopijas saugo konfigūruojamame taške, pvz., „Amazon S3“. „PostgreSQL“ palaikymas tebėra neišsamus ir beta testavimo lygiu.

Paskirstytos ACID operacijos

Rizikuodamas visiškai nesupaprastinti proceso, leiskite man pabandyti apibendrinti „YugaByte“ paskirstytų ACID operacijų atlikimo būdą. Rūgštis (tai reiškia atomiškumą, nuoseklumą, izoliaciją ir ilgaamžiškumą) anksčiau buvo laikoma nuosavybe, apsiribojančia SQL duomenų bazėmis.

Tarkime, kad pateikiate YCQL užklausą su naujinimais operacijos viduje, pavyzdžiui, suporuotą debetą ir kreditą, kurie abu turi būti nutraukti, jei nepavyksta, kad būtų išlaikytas finansinės duomenų bazės nuoseklumas. „YugaByte DB“ priima operaciją be pilietybės operacijų tvarkytuvėje, iš kurių viena vykdoma kiekviename klasterio mazge. Tada operacijų tvarkytuvas našumo tikslais bando planuoti operaciją planšetiniame kompiuteryje, kuriam priklauso didžioji dalis duomenų, prie kurių pasiekiama operacija.

Operacijų valdytojas įtraukia operacijos įrašą su unikaliu ID į operacijos būsenos lentelę. Tada rašo laikinas įrašo į visas planšetes, atsakingas už raktus, kuriuos bando modifikuoti operacija. Jei yra konfliktų, vienas iš konfliktuojančių sandorių atkuriamas.

Kai visi laikini įrašai bus sėkmingai užrašyti, operacijų tvarkytojas paprašo operacijos būsenos lentelės pakeisti visus laikinus įrašus įprastais įrašais, naudodamas savo „Plausto“ žurnalo įrašo „įvykdyta operacija“ laiko žymę. Galiausiai operacijos būsenos planšetinis kompiuteris siunčia valymo užklausas kiekvienai iš operacijoje dalyvavusių planšetinių kompiuterių.

Siekdamas pagerinti našumą, „YugaByte“ agresyviai talpina informaciją apie vykstančius sandorius, įdiegia smulkius užraktus ir naudoja hibridinius laiko lyderių nuomos susitarimus, kad klientai negalėtų skaityti pasenusių vertybių iš senų lyderių. Vienos eilės ACID operacijos optimizuojamos taip, kad vėlavimo laikas būtų mažas, kai nėra prieštaringos operacijos. Paskirstytos ACID operacijos išlaiko teisingumą didesnių vėlavimų sąskaita.

YCQL, YEDIS ir PostgreSQL

„YugaByte“ apima beveik visišką CQL įdiegimą ir keletą plėtinių. Vienas didžiulis „Cassandra“ patobulinimas yra tai, kad „YugaByte“ yra labai nuoseklus, o „Cassandra“ galiausiai yra nuoseklus. Kiti patobulinimai yra paskirstytoms operacijoms, labai nuosekliems antriniams indeksams ir JSON. „YugaByte“ pralenkia „Cassandra“ atliekant visas operacijas, išskyrus trumpo nuotolio nuskaitymus, bent iš dalies dėl savo tvirto nuoseklumo, leidžiančio vieną kartą perskaityti vietoj „Cassandra“ reikalingo kvorumo.

„Cassandra“ palaiko keturis primityvius duomenų tipus, kurie dar nepalaikomi „YugaByte“: data, laikas, paketas ir varint. „YugaByte“ taip pat turi tam tikrus išraiškų apribojimus.

„YugaByte“ įgyvendinant „Redis“ trūksta sąrašo duomenų tipo, tačiau pridedamas laiko eilutės duomenų tipas. Tai prideda įmontuotą patvarumą, automatinį dalijimąsi ir linijinį mastelį, taip pat galimybę skaityti iš artimiausio duomenų centro, kad būtų mažas vėlavimas.

YugaByte PostgreSQL diegimas nėra labai toli. Šiuo metu joje trūksta „UPDATE“ ir „DELETE“ sakinių, išraiškų, o „SELECT“ sakinyje trūksta prisijungimo sąlygos.

„YugaByte“ diegimas ir testavimas

Atviro kodo „YugaByte“ DB galite įdiegti iš šaltinio kodo, iš „MacOS“, „Centos 7“ ir „Ubuntu 16.04“ ar naujesnių versijų „tarballs“ ir iš „Docker“ vaizdų „Docker“ arba „Kubernetes“. Tada galite sukurti grupes ir išbandyti tris užklausos API ir keletą pavyzdžių darbo krūvio generatorių.

Pasirinkau įdiegti „YugaByte DB Enterprise“ į „Google Cloud Platform“. Nors rankiniu būdu reikia atlikti daugiau veiksmų nei norėčiau, galėjau atlikti diegimą ir bandymus per vieną popietę, kai turėjau „Enterprise Edition“ licencijos raktą.

Kai „YugaWare“ egzempliorius „Google Cloud“ veikė keturių procesorių egzemplioriuje, sukonfigūravau „Google Cloud Platform“ kaip savo duomenų bazių grupės debesies teikėją.

Tada aš susikūriau trijų mazgų aštuonių procesorių egzempliorių grupę JAV ir Rytų regione.

Atlikau apkrovos testus naudodamas CQL ir Redis API.

Iš komandinės eilutės galėjau pateikti užklausą tiek CQL, tiek Redis duomenims.

Taip pat sukūriau trijų mazgų klasterį įvairiuose regionuose, pasklidusiuose po pasaulį (žemiau). Tai užtruko ilgiau (apie 45 minutes) ir, kaip tikėtasi, rašymo vėlavimas buvo daug didesnis. Deja, negalima apeiti šviesos greičio.

„YugaByte“ išlaidos

Trijų mazgų „YugaByte DB Enterprise Edition“ licencijos kaina prasideda nuo 40 000 USD per metus. Be to, turite atsižvelgti į serverių kainą. „Google Cloud Platform“ trijų mazgų klasteriui, naudojančiam aštuonių procesorių VM egzempliorius, ši kaina yra nuo 800 iki 900 USD per mėnesį, pridėjus tinklo srautą, galbūt 11 000 USD per metus.

Mano pačios bandymų popietės išlaidos buvo 0,38 USD už atvejus ir 0,01 USD už tarp zonų išėjimą. Ištrinti duomenų bazių sankaupas iš „YugaByte DB Enterprise“ sąsajos buvo lengva, o sustabdžius VM egzempliorių, kuriame veikia administravimo ir orkestravimo sąsaja, nebesikaupė didelių mokesčių.

Greičiau, geriau, paskirstyta

Apskritai „YugaByte DB“ veikė taip, kaip buvo reklamuojama. Šiuo metu jis yra naudingas kaip greitesnis, geresnis, platinamas Redis ir Cassandra. Galų gale tai taip pat turėtų būti geresnė „PostgreSQL“, nors, mano manymu, tai užtrunka ilgai (metus, o ne mėnesius), ypač kai jūs bandote sureguliuoti reliacinius prisijungimus.

„YugaByte DB“ dar nekonkuruoja su „Google Cloud Spanner“, „CockroachDB“ ar „SQL“ sąsaja su „Azure Cosmos DB“, nes trūksta patobulintos SQL sąsajos. Jis dar nekonkuruoja su „Neo4j“ ar grafikų sąsaja su „Cosmos DB“, nes trūksta grafikų duomenų bazių palaikymo. Jis konkuruoja su „Redis“, „Cassandra“ ir su „Cassandra“ suderinama sąsaja su „Cosmos DB“.

Ar turėtumėte patys išbandyti „YugaByte DB“? Jei jums reikia išplatintos „Redis“ ar „Cassandra“ versijos arba turite pakeisti „MongoDB“ visame pasaulyje paskirstytu scenarijumi, tada taip. „YugaByte“ DB taip pat galėtų būti naudojama standartizuoti vienoje duomenų bazėje keliems tikslams, pavyzdžiui, „Cassandra“ duomenų bazės derinimui su „Redis“ talpykla, kaip tai padarė „YugaByte“ klientas „Narvar“. „YugaByte DB“ taip pat prideda aukštos kokybės antrinius indeksus ir JSON tipą prie „Cassandra“, padidindama jo naudingumą kaip sandorių duomenų bazę.

Ar norite naudoti „YugaByte DB“ atvirojo kodo, ar įmonės versiją, priklauso nuo jūsų biudžeto. Apskritai, jei esate startuolis, tikriausiai norite atvirojo kodo versijos. Jei esate įsitvirtinusi pasaulinė įmonė, turinti daug sandorių duomenų bazių programų, ypač jei jums reikia dažnai keisti klasterius aukštyn ir žemyn, galite pasinaudoti papildomomis įmonės versijos funkcijomis.

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