Základní představení produktu
přesný název |
Apache Cassandra |
charakteristika |
konfigurovatelná peer to peer NoSQL databáze |
datový model |
strom |
míra konzistence dat |
individuálně nastavitelná |
licence, upravitelnost |
Apache verze 2, snadný hacking |
škálovatelnost |
za plného provozu neomezeně horizontálně škálovatelné |
multiplatformnost |
multiplatformní (platforma Java) |
vývoj |
intenzivní, prioritní projekt (top level) |
kompatibilní s |
Hadoop, J2EE, Ganglia... |
vizuální nástroje |
ne mnoho |
web projektu |
Je libo nekonzistentní data?
Kupodivu u webových aplikací často úzkostlivé lpění na striktní konzistenci nepatří k prioritám, což ilustruje následující příklad. V grafice „Líbí se mi“ vidím stále nulu, ačkoli se stránka před vteřinou zalíbila v Pittsburghu Tomáši Vokounovi a před minutou v Bostonu Jardovi Jágrovi. Já v Písku se dozvím o Vokounovi za osm vteřin a po dvaceti vteřinách i o Jágrovi. Databáze se zjevně výrazně zpozdila (neaktuální odpovědi), a navíc i obrátila pořadí. U takovýchto sdělení naštěstí nepřesnosti trvající v řádu desítek vteřin nijak nevadí, ostatně uživatelé si jich sotva všimnou.
Na druhou stranu bez konzistence si nelze představit provádění finančních transakcí, registraci uživatelských účtů, statistiku, archivaci, ... V Cassandře administrátor může určit individuálně míru konzistence jednotlivým skupinám záznamů. Vhodným nastavením vylepšuje konzistenci na úkor latence, respektive latenci na úkor konzistence.
Konzistence za latenci, latence za konzistenci
- Data se kopírují na určený počet počítačů, což funguje i jako jednoduchý zálohovací mechanismus.
- Počet úspěšně vytvořených replik pro dokončení zápisu je rovněž konfigurovatelný. Zápis se tak může považovat za úspěšný i před dosažením cílového počtu replik. Data jsou pak replikována automaticky „na pozadí" až do splnění kritéria celkového počtu replik. Díky tomu nezůstanou trvale málokrát replikovaná, leda by kopie byly smolně zničeny při selhání hardwaru.
- Každý záznam obsahuje i čas svého vytvoření. Z přečtených replik se zpracuje jen nejnovější replika, neboť mladší záznamy zahrnují pozdější úpravy. Nejmladší repliky zachycují nejaktuálnější stav.
Jak nebloudit mezi tisíci servery?
- Když, vzhledem k charakteru aplikace výrazně převažuje čtení nad zapisováním, vyplatí se výrazně zvýšit počet replik. S nastíněnou situací se setkáváme u webových publikačních platforem. (Autor obsahu touží, aby každý jeho text byl mnohokrát zhlédnut. Bez publika ztrácí motivaci pokračovat v tvorbě.)
- Cassandra může zohlednit fyzickou topologii sítě (datacentra, rackové skříně, ...). Sníží se tak frekvence neefektivní komunikace mezi vzdálenými uzly. Podmínka uložení každého záznamu do každého z datacenter předejde nedostupnosti při rozsáhlých výpadcích konektivity mezi datacentry.
- Nabízí se více hashovacích algoritmů. Podobné hashe pro podobné klíče mohou optimalizovat typické dotazy, ale mohou vyústit v asymetrickou zátěž a přetěžování některých uzlů. Kryptograficky dobrá hashování „rozhází“ data pseudonáhodně, čímž zabrání lokálnímu přetěžování. Nahodilost míst uložení však může zvyšovat celkový síťový provoz.
Datový model
- Sekundární indexy vracejí záznamy v columnfamily podle hodnoty. Tuto pomocnou strukturu se vyplatí definovat, když logika aplikace nepřipouští libovolné hodnoty. Třeba údaj o národnosti nabývá jen několika set možných hodnot.
- Nechcete-li mít Cassandru jen coby úložiště neuspořádaných posloupností bytů, můžete definovat u jednotlivých columnfamily validátory a komparátory.
- Limity byly zvoleny velkoryse.
- Mnohé informace mají jen omezenou časovou platnost. Jmenujme registrační odkaz zasílaný na mail, pravidelné zálohy, časově omezená práva přístupu k placenému obsahu, ... Nastavení TTL (time to live) zabezpečí, že po vypršení lhůty budou příslušná data ignorována a postupně smazána.
- Komunikuje se především vzdáleným voláním procedur (RPC, remote procedure call) skrz rozhraní Thrift. Cassandra rovněž disponuje jazykem CQL (Cassandra query language), jenž se svou syntaxí nápadně hlásí k tradici SQL.
- Při ukládání se nejprve požadavek archivuje v commitlogu, což zajišťuje trvalost (durability) operace, a následně se uloží do rychlé memtable. Z přeplněné memtable se data uvolní ve formě nového souboru formátu SSTable, více souborů SSTableů se „sumarizuje“ (compaction) do jednoho a nepotřebné soubory SSTable uklízí garbage collector. Vyhledávání v souboru SSTable optimalizuje Bloomův filtr.
Hadoop
Hadoop přináší především implementaci programovacího modelu MapReduce(), který slouží k masivní paralelizace výpočtu. Programátor definuje funkci Map() a funkci Reduce(). Funkce Reduce() rekurzí zpracuje multimnožinu výsledků "paralelní" funkce Map() pro dostupná data. Jednotlivá vyčíslování funkce Map() se vzájemně neblokují, obejdou se bez synchronizace a kalkulaci lze provést okamžitě v místě uložení zpracovávaných dat. Jinými slovy MapReduce "rozloží" výpočet přes celý cluster. Tento postup důvěrně znají příznivci funkcionálních jazyků (např. Lisp) a multiparadigmatických jazyků (např. Python), byť vzhledem k nejednotnosti terminologie pod jiným jménem. Kroku Map() se též říká agregátor, kumulátor, projekce, fold, komprese, ...
Cassandřina pro a proti
- Očekáváte velká množství současně zpracovávaných dat a dotazů. Pro cluster jste si přichystali alespoň několik desítek serverů.
- Vyžadujete velmi vysokou dostupnost služby. Některé dotazy se musí bezpodmínečně zpracovat, byť i za cenu ne zcela korektních výsledků.
- Vaše servery se liší hardwarem a softwarem. Databáze musí obstát v heterogenním prostředí.
- Oceníte minimální administraci při škálování a řešení různých incidentů.
- Postrádáte vyčerpávající představu o ukládaných datech. Volíte proto key-value úložiště, aby vás nesvazovala databázová schémata.
- Uvítáte absenci licenčních poplatků. Uvítáte upravitelnost zdrojových kódů.
- Cassandra nepodporuje složitější vyhledávání dat. Způsob uložení dat definuje i způsob vyhledávaní.
- Cassandra nezvládá komplikovanější zpracování dat.
- Cassandra není kompatibilní s SQL, neporadí si se softwarem pro platformou LAMP. Aplikační software si pravděpodobně budete muset vyvinout sami.
- Běžní IT experti neví nic o Cassandře. Využít Cassandřiny přednosti naplno (např. kompatibilita) dokáže jen specialista.
V perexu zmíněné reference vycházejí ze seznamu referencí v heslu Cassandra z anglické Wikipedie. Databáze se jmenuje podle starořecké věštkyně Kasandry, proto článek užívá posesivního adjektiva Cassandřin a skloňuje podle vzoru žena.