Programovanie

Recenzia YugaByte: Cassandra a Redis na planéte

Počas svojich desaťročí, keď som pracoval ako vývojár databázových aplikácií, nikdy som si vo svojich najdivokejších snoch nepredstavoval, že budem mať niekedy prístup k transakčnej, planétovej, distribuovanej databáze, natoľko, že budem veľa z nich porovnávať. Ale s Google Cloud Spanner, CockroachDB, Azure Cosmos DB, Neo4j Enterprise a najnovšie s YugaByte DB, ktoré sú k dispozícii vo výrobe, je tento jednorazový sen o potrubí skutočne skutočný.

Stručne povedané, Google Cloud Spanner ponúka škálovateľnú, distribuovanú a silne konzistentnú databázu SQL ako službu, ktorá dokáže spracovať okolo 2 000 zápisov za sekundu a 10 000 čítaní za sekundu na každý uzol, so strednou latenciou približne päť milisekúnd. Ak chcete urýchliť čítanie, ktoré nepotrebuje úplne aktuálne údaje, môžete požiadať program Spanner o zastarané čítania, pretože podporuje dotazy týkajúce sa cestovania v čase. Spanner používa Google dialekt jazyka SQL a beží iba na Google Cloud Platform.

CockroachDB je kľúčová open-source databáza SQL, ktorá podporuje drôtový protokol PostgreSQL a dialekt PostgreSQL SQL. CockroachDB je postavený na RocksDB, transakčnom a konzistentnom úložisku kľúč - hodnota s otvoreným zdrojom. Rovnako ako kľúč podporuje aj dotazy na cestovanie v čase. CockroachDB môže bežať na akomkoľvek cloude, v kontajneroch Docker s orchestráciou alebo bez nej, alebo na serveroch alebo virtuálnych počítačoch Linux. Podniková verzia aplikácie CockroachDB pridáva geografické rozdelenie, kontrolu prístupu na základe rolí a podporu.

Azure Cosmos DB je globálne distribuovaná, horizontálne rozdelená, multimodálna databáza ako služba. Ponúka štyri dátové modely (kľúč - hodnota, rodina stĺpcov, dokument a graf) a päť nastaviteľných úrovní konzistencie (silná, obmedzená stagnácia, relácia, konzistentná predpona a prípad). Ponúka päť súborov API: SQL (dialekt), kompatibilné s MongoDB, kompatibilné s Azure Table, grafové (Gremlin) a kompatibilné s Apache Cassandra. Funguje iba na cloude Microsoft Azure.

Neo4j je škálovateľná a prežiteľná databáza grafov, ktorá používa dopytovací jazyk Cypher. Môžete nainštalovať jeho otvorenú verziu bez klastrov v systéme Windows, MacOS a Linux, v kontajneroch Docker a vo virtuálnych počítačoch. Neo4j Enterprise podporuje vysokú dostupnosť a kauzálne klastre; kauzálne klastre umožňujú asynchrónne aktualizované klastre prečítaných replík, čo umožňuje vysoký výkon pre geograficky distribuované nasadenia.

Zadajte Yugabyte DB

YugaByte DB, ktorý je predmetom tejto recenzie, je transakčná, vysoko výkonná databáza s otvoreným zdrojovým kódom pre aplikácie na planéte, ktorá podporuje tri sady API: YCQL, kompatibilná s jazykom Apache Cassandra Query Language (CQL); YEDIS, kompatibilný s Redis; a PostgreSQL (momentálne neúplné a v beta verzii). YugaWare je orchestračná vrstva pre YugaByte DB Enterprise Edition. YugaWare rýchlo pracuje na roztočení a zbúraní distribuovaných klastrov v službách Amazon Web Services, Google Cloud Platform a (kvôli Q4 2018) Microsoft Azure. YugaByte DB implementuje viacsmerné riadenie súbežnosti (MVCC), ale zatiaľ nepodporuje dotazy týkajúce sa cestovania v čase.

YugaByte DB je postavený na vrchole vylepšenej vidlice úložiska kľúčov a hodnôt RocksDB. YugaByte DB 1.0 dodaný v máji 2018.

Dve z kľúčových technológií používaných na zabezpečenie konzistencie a rýchlosti distribuovaných transakčných databáz sú algoritmy konsenzu klastra a synchronizácia hodín uzlov. Google Cloud Spanner a Azure Cosmos DB používajú algoritmus konsenzu Paxos navrhnutý Leslie Lamportovou. CockroachDB a YugaByte DB používajú algoritmus konsenzu Raft navrhnutý Diegom Ongarom a Johnom Ousterhoutom.

Google Cloud Spanner používa proprietárne rozhranie API TrueTime spoločnosti Google založené na GPS a atómových hodinách. Azure Cosmos DB, CockroachDB a YugaByte DB používajú časové značky hybridných logických hodín (HLC) a synchronizáciu hodín Network Time Protocol (NTP).

Ciele návrhu YugaByte

Zakladateľmi spoločnosti YugaByte - Kannan Muthukkaruppan, Karthik Ranganathan a Michail Bautin - boli vydavatelia Apache HBase, skorí inžinieri Apache Cassandra a stavitelia platformy NoSQL spoločnosti Facebook (založené na Apache HBase). Ich cieľom pre YugaByte DB bol distribuovaný databázový server filozoficky medzi Azure Cosmos DB a Google Cloud Spanner; to znamená, že chceli kombinovať multimodel a vysoko výkonné atribúty Cosmos DB s transakciami ACID a globálnou konzistenciou Spannera. Ďalším spôsobom, ako opísať ich cieľ, je to, že chceli, aby bol YugaByte DB naraz transakčný, vysoko výkonný a na planéte.

Proces rozdelili do piatich krokov, ktorých výstavba trvala približne šesť mesiacov. Prvým krokom bolo vytvorenie silne konzistentnej verzie RocksDB, vysoko výkonného úložiska kľúčov a hodnôt napísaného v C ++, pridaním konsenzuálneho protokolu Raft, delením a vyvážením záťaže a odstránením protokolovania transakcií, zálohovania v čase, a zotavenie, ktoré bolo potrebné implementovať do vyššej vrstvy.

Ďalším krokom bolo vybudovanie logu štruktúrovaného ukladacieho priestoru kľúča k dokumentu s pridaním neprimitívnych a vnorených typov, ako sú riadky, mapy, zbierky a JSON. Potom pridali zásuvnú vrstvu API, ako je Azure Cosmos DB, implementovali API kompatibilné s Cassandrou a Redis a odložili Post API API kompatibilné s PostgreSQL na neskoršiu fázu. Potom prišli rozšírené dotazovacie jazyky.

YugaByte Cloud Query Language (YCQL) rozširuje Cassandra API o podporu distribuovaných transakcií, silne konzistentné sekundárne indexy a JSON. YugaByte Dictionary Service (YEDIS) je Redis-kompatibilné API s pridaním zabudovanej perzistencie, automatického delenia a lineárnej škálovateľnosti. YEDIS voliteľne umožňuje časovo konzistentné čítanie s nízkou latenciou z najbližšieho dátového centra, zatiaľ čo silné operácie zápisu zachovávajú globálnu konzistenciu. YEDIS obsahuje aj nový dátový typ časových radov.

A konečne, s verziou 1.0, YugaByte DB Enterprise pridáva vrstvu na orchestráciu, zabezpečenie a monitorovanie nasadenia na úrovni výroby vo viacerých regiónoch a viacerých cloudoch a ukladá distribuované zálohy do konfigurovateľného koncového bodu, ako je Amazon S3. Podpora PostgreSQL zostáva neúplná a na úrovni beta-testu.

Distribuované ACID transakcie

S rizikom úplného zjednodušenia procesu mi dovoľte pokúsiť sa zhrnúť spôsob, akým YugaByte vykonáva distribuované transakcie ACID. KYSELINA (čo znamená atomicita, konzistencia, izolácia a trvanlivosť) sa zvykla považovať za vlastnosť obmedzenú na databázy SQL.

Predpokladajme, že v transakcii zadáte dopyt YCQL obsahujúci aktualizácie, napríklad spárovaný debet a kredit, ktoré sa musia obidve prerušiť, ak zlyhajú, aby sa zachovala konzistencia finančnej databázy. YugaByte DB prijíma transakcie v bezstavovom správcovi transakcií, z ktorých jeden beží na každom uzle v klastri. Správca transakcií sa potom z dôvodu výkonu pokúsi naplánovať transakciu na serveri tabletu, ktorý vlastní väčšinu údajov, ku ktorým transakcia pristupuje.

Správca transakcií pridá záznam o transakcii s jedinečným ID do tabuľky stavu transakcie. Potom sa píše provizórne záznamy všetkým tabletom zodpovedným za kľúče, ktoré sa transakcia snaží upraviť. Ak dôjde ku konfliktu, jedna z konfliktných transakcií sa vráti späť.

Po úspešnom zápise všetkých dočasných záznamov požiada správca transakcií tablet so stavom transakcie o nahradenie všetkých dočasných záznamov bežnými záznamami pomocou časovej pečiatky záznamu „transakcia potvrdená“ vo svojom protokole Raft. Nakoniec tablet so stavom transakcie odošle žiadosti o vyčistenie každému z tabletov, ktoré sa zúčastnili transakcie.

Aby sa zlepšil výkon, YugaByte agresívne ukladá informácie o prebiehajúcich transakciách, implementuje jemnozrnné zámky a používa hybridné časové leasingové leasingy, aby zabránila klientom čítať zastarané hodnoty od starých vodcov. Jednoriadkové transakcie ACID sú optimalizované tak, aby mali nízku latenciu, keď nedôjde ku konfliktu. Distribuované transakcie ACID zachovávajú správnosť na úkor vyšších latencií.

YCQL, YEDIS a PostgreSQL

YugaByte obsahuje takmer úplnú implementáciu CQL a niektoré rozšírenia. Jedno obrovské zlepšenie oproti Cassandre je, že YugaByte je silne konzistentný, zatiaľ čo Cassandra je nakoniec konzistentný. Ďalšie vylepšenia sú pre distribuované transakcie, silne konzistentné sekundárne indexy a JSON. YugaByte prekonáva Cassandru pri každej operácii okrem skenovania na krátku vzdialenosť, aspoň čiastočne kvôli jej silnej konzistencii, ktorá umožňuje jediné čítanie namiesto čítania kvóra potrebného v Cassandre.

Cassandra podporuje štyri primitívne dátové typy, ktoré v aplikácii YugaByte zatiaľ nie sú podporované: dátum, čas, n-tica a varinta. YugaByte má tiež určité obmedzenia týkajúce sa výrazov.

Implementácia Redis spoločnosťou YugaByte postráda dátový typ zoznamu, ale pridáva dátový typ časových radov. Pridáva zabudovanú vytrvalosť, automatické delenie a lineárnu škálovateľnosť, ako aj schopnosť čítať z najbližšieho dátového centra pre nízku latenciu.

Implementácia PostgreSQL od YugaByte nie je príliš ďaleko. Momentálne mu chýbajú príkazy, výrazy UPDATE a DELETE a v príkaze SELECT chýba klauzula join.

Inštalácia a testovanie YugaByte

Open-source program YugaByte DB môžete nainštalovať zo zdrojového kódu, z tarballov v systémoch MacOS, Centos 7 a Ubuntu 16.04 alebo novších a z obrázkov Docker v Docker alebo Kubernetes. Potom môžete vytvoriť klastre a otestovať tri API dotazov a niektoré vzorové generátory pracovného zaťaženia.

Rozhodol som sa nainštalovať YugaByte DB Enterprise na Google Cloud Platform. Aj keď bolo treba urobiť viac manuálnych krokov, ako by som si želal, bol som schopný prejsť mojou inštaláciou a testami za jediné popoludnie po získaní licenčného kľúča Enterprise Edition.

Keď bola inštancia YugaWare spustená na inštancii so štyrmi procesormi v službe Google Cloud, nakonfiguroval som Google Cloud Platform ako poskytovateľa cloudu pre môj databázový klaster.

Potom som vytvoril trojuzlový klaster inštancií ôsmich CPU v regióne USA-východ.

Spustil som záťažové testy pomocou CQL aj Redis API.

Z príkazového riadku som bol schopný dopytovať údaje CQL aj Redis.

Tiež som vytvoril klaster s tromi uzlami v rôznych regiónoch rozmiestnených po celom svete (dole). Vytváranie to trvalo dlhšie (asi 45 minút) a malo sa podľa očakávania oveľa vyššia latencia zápisu. Rýchlosť svetla, bohužiaľ, nemôžete obísť.

YugaByte náklady

Cena trojuzlovej licencie YugaByte DB Enterprise Edition začína na 40 000 USD ročne. Okrem toho musíte zohľadniť náklady na servery. V prípade klastra s tromi uzlami na platforme Google Cloud Platform, ktorý využíva inštancie VM s ôsmimi procesormi, sa tieto náklady pohybujú v rozmedzí od 800 do 900 dolárov mesačne plus sieťová prevádzka, možno 11 000 dolárov ročne.

Moje vlastné náklady na popoludnie testovania boli 0,38 USD za inštancie a 0,01 USD za medzizónový výstup. Odstránenie databázových klastrov z rozhrania YugaByte DB Enterprise bolo jednoduché a akonáhle som zastavil inštanciu VM so spusteným administračným a orchestračným rozhraním, už mi nehrozili významné poplatky.

Rýchlejšie, lepšie, distribuované

Celkovo YugaByte DB fungoval tak, ako inzeroval. V tomto okamihu svojho vývoja je to užitočné ako rýchlejšia, lepšia a distribuovanejšia Redis a Cassandra. Nakoniec by to mal byť tiež lepší PostgreSQL, aj keď podľa mojich skúseností to trvá dlho (skôr než roky), zvlášť keď sa dostanete do bodu, keď sa pokúsite vyladiť relačné spojenia.

YugaByte DB zatiaľ nekonkuruje rozhraniu Google Cloud Spanner, CockroachDB ani rozhraniu SQL pre Azure Cosmos DB, pretože nemá prepracované rozhranie SQL. Zatiaľ nesúťaží s Neo4j alebo grafickým rozhraním pre Cosmos DB pre nedostatok podpory databázy grafov. Konkuruje Redis, Cassandra a Cassandra kompatibilné rozhranie s Cosmos DB.

Mali by ste vyskúšať YugaByte DB sami? Ak potrebujete distribuovanú verziu Redis alebo Cassandra alebo potrebujete nahradiť MongoDB pre globálne distribuovaný scenár, potom áno. YugaByte DB by sa tiež mohol použiť na štandardizáciu jednej databázy na rôzne účely, napríklad na kombinovanie databázy Cassandra s ukladaním do vyrovnávacej pamäte Redis, ako to urobil zákazník spoločnosti YugaByte Narvar. YugaByte DB tiež pridáva do Cassandry vysoko výkonné sekundárne indexy a typ JSON, čím zvyšuje svoju užitočnosť ako transakčnej databázy.

To, či chcete verziu YugaByte DB s otvoreným zdrojovým kódom alebo pre podniky, závisí od vášho rozpočtu. Všeobecne platí, že ak ste startup, pravdepodobne by ste chceli verziu open source. Ak ste zavedenou globálnou spoločnosťou s mnohými transakčnými databázovými aplikáciami, najmä ak potrebujete často škálovať klastre hore a dole, mohli by ste využiť ďalšie funkcie podnikovej verzie.

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