Programování

Recenze YugaByte: Cassandra a Redis v planetárním měřítku

Během mých desetiletí, kdy jsem byl vývojářem databázových aplikací, jsem si ve svých nejdivočejších snech nikdy nepředstavoval, že budu mít někdy přístup k transakční, planetární, distribuované databázi, natož, že bych mnoho z nich porovnával. Ale s Google Cloud Spanner, CockroachDB, Azure Cosmos DB, Neo4j Enterprise a nejnověji YugaByte DB, které jsou v produkci k dispozici, je tento jednorázový sen o potrubí nyní docela skutečný.

Stručně řečeno, Google Cloud Spanner nabízí škálovatelnou, distribuovanou a silně konzistentní databázi SQL jako službu, která dokáže zpracovat přibližně 2 000 zápisů za sekundu a 10 000 čtení za sekundu na uzel, se střední latencí asi pět milisekund. Chcete-li zrychlit čtení, která nepotřebují absolutně aktuální data, můžete požádat Spanner o zastaralá čtení, protože podporuje dotazy týkající se cestování v čase. Spanner používá dialekt Google SQL a běží pouze na Google Cloud Platform.

CockroachDB je open-source SQL databáze podobná Spanneru, která podporuje drátový protokol PostgreSQL a dialekt PostgreSQL SQL. CockroachDB je postaven na RocksDB, transakčním a konzistentním úložišti klíč-hodnota s otevřeným zdrojovým kódem. Stejně jako Spanner podporuje dotazy týkající se cestování v čase. CockroachDB může běžet na jakémkoli cloudu, v kontejnerech Docker s orchestrací nebo bez ní nebo na serverech nebo virtuálních počítačích s Linuxem. Podniková verze CockroachDB přidává geografické dělení, řízení přístupu na základě rolí a podporu.

Azure Cosmos DB je globálně distribuovaná, horizontálně rozdělená multimodální databáze jako služba. Nabízí čtyři datové modely (klíč-hodnota, rodina sloupců, dokument a graf) a pět nastavitelných úrovní konzistence (silná, omezená stálost, relace, konzistentní předpona a případ). Nabízí pět sad API: SQL (dialekt), kompatibilní s MongoDB, kompatibilní s Azure Table, graf (Gremlin) a kompatibilní s Apache Cassandra. Běží pouze na cloudu Microsoft Azure.

Neo4j je škálovatelná a použitelná databáze grafů, která používá dotazovací jazyk Cypher. Můžete nainstalovat jeho otevřenou verzi bez clusterů ve Windows, MacOS a Linux, v kontejnerech Docker a ve virtuálních počítačích. Neo4j Enterprise podporuje vysokou dostupnost a kauzální klastry; kauzální clustery umožňují asynchronně aktualizované clusty přečtených replik, což umožňuje vysoký výkon pro geograficky distribuovaná nasazení.

Zadejte Yugabyte DB

YugaByte DB, který je předmětem této recenze, je transakční, vysoce výkonná databáze s otevřeným zdrojovým kódem pro aplikace na planetě, která podporuje tři sady API: YCQL, kompatibilní s Apache Cassandra Query Language (CQL); YEDIS, kompatibilní s Redis; a PostgreSQL (aktuálně neúplné a v beta verzi). YugaWare je orchestrační vrstva pro YugaByte DB Enterprise Edition. YugaWare rychle pracuje na roztočení a zbourání distribuovaných klastrů na Amazon Web Services, Google Cloud Platform a (kvůli Q4 2018) Microsoft Azure. YugaByte DB implementuje vícesměrné řízení souběžnosti (MVCC), ale zatím nepodporuje dotazy týkající se cestování v čase.

YugaByte DB je postaven na vylepšené vidlici úložiště klíčů a hodnot RocksDB. YugaByte DB 1.0 dodáván v květnu 2018.

Dvě z klíčových technologií používaných k zajištění konzistence a rychlosti distribuovaných transakčních databází jsou shoda algoritmů clusteru a synchronizace hodin uzlů. Google Cloud Spanner a Azure Cosmos DB používají konsenzuální algoritmus Paxos navržený Leslie Lamportovou. CockroachDB a YugaByte DB používají Raftův konsensuální algoritmus navržený Diegem Ongarem a Johnem Ousterhoutem.

Google Cloud Spanner používá proprietární rozhraní API TrueTime společnosti Google založené na GPS a atomových hodinách. Azure Cosmos DB, CockroachDB a YugaByte DB používají časová razítka hybridních logických hodin (HLC) a synchronizaci hodin Network Time Protocol (NTP).

Cíle designu YugaByte

Zakladateli společnosti YugaByte - Kannan Muthukkaruppan, Karthik Ranganathan a Michail Bautin - byli komisaři Apache HBase, první inženýři Apache Cassandra a stavitelé platformy NoSQL Facebooku (založené na Apache HBase). Jejich cílem pro YugaByte DB byl distribuovaný databázový server filozoficky mezi Azure Cosmos DB a Google Cloud Spanner; to znamená, že chtěli kombinovat multimodel a vysoce výkonné atributy Cosmos DB s transakcemi ACID a globální konzistencí Spanner. Dalším způsobem, jak popsat jejich cíl, je to, že chtěli, aby YugaByte DB byla transakční, vysoce výkonná a v měřítku planety najednou.

Proces rozdělili do pěti kroků, jejichž stavba trvala zhruba šest měsíců. Prvním krokem bylo vytvoření silně konzistentní verze RocksDB, vysoce výkonného úložiště klíčů a hodnot napsaného v C ++, přidáním konsensuálního protokolu Raft, shardování a vyvažování zátěže a odstranění protokolování transakcí, zálohování v čase, a zotavení, které bylo nutné implementovat ve vyšší vrstvě.

Dalším krokem bylo vytvoření logického strukturovaného úložiště klíčů k dokumentům přidáním neprimitivních a vnořených typů, jako jsou řádky, mapy, sbírky a JSON. Pak přidali zásuvnou vrstvu API, jako je Azure Cosmos DB, implementovali rozhraní API kompatibilní s Cassandrou a Redis a odložili rozhraní API API kompatibilní s PostgreSQL na pozdější fázi. Pak přišly rozšířené dotazovací jazyky.

YugaByte Cloud Query Language (YCQL) rozšiřuje Cassandra API o podporu distribuovaných transakcí, silně konzistentních sekundárních indexů a JSON. YugaByte Dictionary Service (YEDIS) je rozhraní Redis kompatibilní s API s přídavkem vestavěné perzistence, automatického dělení a lineární škálovatelnosti. YEDIS volitelně umožňuje časově konzistentní čtení s nízkou latencí z nejbližšího datového centra, zatímco silné operace zápisu udržují globální konzistenci. YEDIS také obsahuje nový datový typ časové řady.

A konečně, s verzí 1.0, YugaByte DB Enterprise přidává vrstvu pro orchestraci, zabezpečení a monitorování nasazení na úrovni produkce napříč více regiony a více cloudy a ukládá distribuované zálohy do konfigurovatelného koncového bodu, jako je Amazon S3. Podpora PostgreSQL zůstává neúplná a na úrovni beta-testu.

Distribuované ACID transakce

S rizikem úplného zjednodušení procesu se pokusím shrnout způsob, jakým YugaByte provádí distribuované transakce ACID. KYSELINA (což znamená atomicita, konzistence, izolace a trvanlivost) se dříve považovala za vlastnost omezenou na databáze SQL.

Předpokládejme, že odešlete dotaz YCQL obsahující aktualizace uvnitř transakce, například spárovaný debet a kredit, které oba musí být přerušeny, pokud jeden selže, aby byla zachována konzistence finanční databáze. YugaByte DB přijímá transakci ve správci transakcí bez státní příslušnosti, z nichž jeden běží na každém uzlu v klastru. Správce transakcí se poté z důvodu výkonu pokusí naplánovat transakci na serveru tabletu, který vlastní většinu dat, ke kterým transakce přistupuje.

Správce transakcí přidá záznam transakce s jedinečným ID do tabulky stavu transakce. Pak to píše prozatímní záznamy všem tabletům odpovědným za klíče, které se transakce pokouší upravit. Pokud existují konflikty, jedna z konfliktních transakcí je odvolána.

Jakmile jsou všechny prozatímní záznamy úspěšně zapsány, správce transakcí požádá tablet stavu transakce, aby nahradil všechny prozatímní záznamy běžnými záznamy pomocí časového razítka položky „transakce potvrzena“ ve svém protokolu Raft. Nakonec tablet stavu transakce odešle požadavky na vyčištění každému z tabletů, které se zúčastnily transakce.

Aby se zlepšil výkon, YugaByte agresivně ukládá informace o probíhajících transakcích, implementuje jemnozrnné zámky a používá hybridní časové leasingové leasingy, které klientům brání ve čtení zastaralých hodnot od starých vůdců. Jednořádkové transakce ACID jsou optimalizovány tak, aby měly nízkou latenci, pokud nedojde ke konfliktní operaci. Distribuované transakce ACID zachovávají správnost na úkor vyšších latencí.

YCQL, YEDIS a PostgreSQL

YugaByte zahrnuje téměř kompletní implementaci CQL a některá rozšíření. Jedno obrovské zlepšení oproti Cassandře je, že YugaByte je silně konzistentní, zatímco Cassandra je nakonec konzistentní. Další vylepšení jsou pro distribuované transakce, silně konzistentní sekundární indexy a JSON. YugaByte překonává Cassandru pro každou operaci kromě skenování na krátkou vzdálenost, alespoň částečně kvůli její silné konzistenci, která umožňuje jediné čtení namísto čtení kvora potřebného v Cassandře.

Cassandra podporuje čtyři primitivní datové typy, které v YugaByte dosud nejsou podporovány: datum, čas, n-tice a varint. YugaByte má také určitá omezení výrazů.

Implementace Redis společnosti YugaByte postrádá datový typ seznamu, ale přidává datový typ časové řady. Přidává integrovanou vytrvalost, automatické dělení a lineární škálovatelnost, stejně jako schopnost číst z nejbližšího datového centra pro nízkou latenci.

Implementace PostgreSQL společnosti YugaByte není příliš daleko. Právě teď postrádá příkazy, výrazy UPDATE a DELETE a výraz SELECT postrádá klauzuli join.

Instalace a testování YugaByte

Open-source YugaByte DB můžete nainstalovat ze zdrojového kódu, z tarballů na MacOS, Centos 7 a Ubuntu 16.04 nebo novějších a z obrázků Dockeru na Dockeru nebo Kubernetes. Poté můžete vytvořit clustery a otestovat tři API dotazů a některé ukázkové generátory pracovního vytížení.

Rozhodl jsem se nainstalovat YugaByte DB Enterprise na Google Cloud Platform. I když bylo potřeba podniknout více manuálních kroků, než bych si přál, byl jsem schopen projít svou instalací a testy za jediné odpoledne poté, co jsem získal licenční klíč Enterprise Edition.

Jakmile byla instance YugaWare spuštěna na instanci čtyř CPU v Google Cloud, nakonfiguroval jsem Google Cloud Platform jako poskytovatele cloudu pro svůj databázový klastr.

Pak jsem vytvořil tříuzlový klastr instancí osmi CPU v regionu USA-východ.

Spustil jsem zátěžové testy pomocí API CQL i Redis.

Byl jsem schopen dotazovat se na data CQL i Redis z příkazového řádku.

Také jsem vytvořil tříuzlový klastr v různých oblastech po celém světě (níže). Vytváření to trvalo déle (asi 45 minut) a mělo se podle očekávání mnohem vyšší latence zápisu. Rychlost světla bohužel nemůžete obejít.

Náklady na YugaByte

Cena tříuzlové licence YugaByte DB Enterprise Edition začíná na 40 000 $ ročně. Kromě toho musíte zohlednit náklady na servery. U tříuzlového klastru na Google Cloud Platform využívající instance virtuálních počítačů s osmi CPU se tyto náklady pohybují v rozmezí 800 až 900 USD měsíčně plus síťový provoz, možná 11 000 USD ročně.

Moje vlastní náklady na odpolední testování byly 0,38 $ za instance a 0,01 $ za mezizónový výstup. Odstranění databázových klastrů z rozhraní YugaByte DB Enterprise bylo snadné a jakmile jsem zastavil instanci virtuálního počítače se spuštěným rozhraním pro správu a orchestraci, již nehromadil významné poplatky.

Rychlejší, lepší, distribuované

Celkově YugaByte DB fungoval jako inzerovaný. V tomto okamžiku svého vývoje je to užitečné jako rychlejší, lepší a distribuovanější Redis a Cassandra. Mělo by to být nakonec také lepší PostgreSQL, i když podle mých zkušeností to trvá dlouho (spíše než měsíce), zvláště když se dostanete do bodu, kdy se snažíte vyladit relační spojení.

YugaByte DB dosud nekonkuruje Google Cloud Spanner, CockroachDB nebo rozhraní SQL pro Azure Cosmos DB kvůli nedostatku komplexního rozhraní SQL. Dosud nekonkuruje Neo4j nebo grafickému rozhraní Cosmos DB kvůli nedostatku podpory databáze grafů. Konkuruje Redis, Cassandra a Cassandra kompatibilní rozhraní s Cosmos DB.

Měli byste vyzkoušet YugaByte DB sami? Pokud potřebujete distribuovanou verzi Redis nebo Cassandra, nebo potřebujete nahradit MongoDB pro globálně distribuovaný scénář, pak ano. YugaByte DB lze také použít ke standardizaci jedné databáze pro více účelů, jako je kombinace databáze Cassandra s ukládáním do mezipaměti Redis, jak to udělal zákazník YugaByte Narvar. YugaByte DB také přidává do Cassandry vysoce výkonné sekundární indexy a typ JSON, čímž zvyšuje jeho užitečnost jako transakční databáze.

To, zda chcete verzi YugaByte DB s otevřeným zdrojem nebo pro podniky, závisí na vašem rozpočtu. Obecně platí, že pokud jste startup, pravděpodobně budete chtít verzi open source. Pokud jste zavedenou globální společností s mnoha transakčními databázovými aplikacemi, zejména pokud potřebujete často škálovat clustery nahoru a dolů, můžete těžit z dalších funkcí podnikové verze.