Cassandra Architecture & Replikationsfaktor
โก Smart opsummering
Cassandra Arkitekturen distribuerer data pรฅ tvรฆrs af peer-noder uden et enkelt fejlpunkt (Single Point of Failure), hvor Gossip bruges til koordinering og replikering for holdbarhed. Denne side dรฆkker alle komponenter, bรฅde replikeringsstrategier, konsistensniveauer og de interne skrive- og lรฆsestier.

Cassandra er designet til at hรฅndtere Big data. Cassandra's hovedfunktion er at gemme data pรฅ flere noder uden et enkelt fejlpunkt.
ร rsagen til denne slags Cassandra's arkitektur var, at hardwarefejlen kan opstรฅ nรฅr som helst. Enhver node kan vรฆre nede. I tilfรฆlde af fejl kan data gemt i en anden node bruges. Derfor, Cassandra er designet med sin distribuerede arkitektur.
Cassandra gemmer data pรฅ forskellige noder med en peer to peer distribueret modearkitektur.
Alle knudepunkter udveksler information med hinanden vha Sladder protokol. Sladder er en protokol i Cassandra hvormed noder kan kommunikere med hinanden.
Komponenter af Cassandra Architecture
Der er fรธlgende komponenter i Cassandra Archilรฆre:

Diagrammet ovenfor indlejrer komponenterne: noder sidder inde i et datacenter, datacentre sidder inde i en klynge, og commit-loggen, memtablen og SSTablen sidder inde i hver enkelt node.
Node
Node er det sted, hvor data gemmes. Det er den grundlรฆggende komponent af Cassandra.
Data Center
En samling af noder kaldes datacenter. Mange noder er kategoriseret som et datacenter.
Cluster
Klyngen er samlingen af โโmange datacentre.
Commit Log
Hver skriveoperation skrives til Commit Log. Commit log bruges til crash recovery.
Mem-bord
Efter data skrevet i Commit log, skrives data i Mem-tabel. Data skrives midlertidigt i Mem-tabel.
SSTable
Nรฅr en Mem-tabel nรฅr en bestemt tรฆrskel, flyttes dataene til en SSTable-diskfil. SSTables er uforanderlige, sรฅ en opdatering skriver en ny version i stedet for at redigere den gamle, og en baggrundsproces kaldet komprimering fletter senere disse versioner og kasserer de erstattede rรฆkker.
Datareplikering i Cassandra
Da hardwareproblem kan opstรฅ, eller linket kan vรฆre nede pรฅ et hvilket som helst tidspunkt under dataprocessen, er en lรธsning pรฅkrรฆvet for at give en backup, nรฅr problemet er opstรฅet. Sรฅ data replikeres for at sikre, at der ikke er et enkelt fejlpunkt.
Cassandra placerer replikaer af data pรฅ forskellige noder baseret pรฅ disse to faktorer.
- Hvor den nรฆste replika skal placeres, bestemmes af Replikeringsstrategi.
- Mens det samlede antal replikaer placeret pรฅ forskellige noder bestemmes af Replikationsfaktor.
En replikeringsfaktor betyder, at der kun er en enkelt kopi af data, mens tre replikeringsfaktor betyder, at der er tre kopier af dataene pรฅ tre forskellige noder.
For at sikre, at der ikke er et enkelt fejlpunkt, replikationsfaktor skal vรฆre tre.
Der er to slags replikeringsstrategier i Cassandra.
SimpleStrategy i Cassandra
Simpel Strategi bruges, nรฅr du kun har รฉt datacenter. SimpleStrategy placerer den fรธrste replika pรฅ den node, der er valgt af partitioneren. Derefter placeres resterende replikaer med uret i Node-ringen.
Her er den billedlige reprรฆsentation af SimpleStrategy:

Netvรฆrk Topologi Strategi i Cassandra
Netvรฆrkstopologistrategi bruges, nรฅr du har mere end to datacentre. I NetworkTopologyStrategy indstilles replikaer for hvert datacenter separat. NetworkTopologyStrategy placerer replikaer i urets retning i ringen, indtil den nรฅr den fรธrste node i et andet rack. Denne strategi forsรธger at placere replikaer pรฅ forskellige racks i det samme datacenter.
Dette skyldes, at der nogle gange kan opstรฅ fejl eller problemer i stativet. Sรฅ kan replikaer pรฅ andre noder levere data.
Her er den billedlige reprรฆsentation af netvรฆrkstopologistrategien:

Replikeringsfaktoren bestemmer, hvor mange kopier der findes. Hvor mange af disse kopier der skal besvare en given anmodning, er en separat indstilling, som beskrives nedenfor.
Konsistensniveauer i Cassandra
Konsistensniveauet indstilles pr. forespรธrgsel snarere end pr. klynge, hvilket er det, der gรธr Cassandra justerbar. Den angiver, hvor mange replikaer der skal kvittere for en skrivning eller svare pรฅ en lรฆsning, fรธr koordinatoren svarer klienten. Et lavt niveau returnerer hurtigere; et hรธjt niveau returnerer data, der er mere sikkert aktuelle.
| Niveau | Adfรฆrd | Typisk brug |
|---|---|---|
| ONE | รn replika skal svare. | Hรธjkapacitetslogning, hvor en lejlighedsvis forรฆldet aflรฆsning er acceptabel. |
| KVORUM | Et flertal af alle replikaer skal svare, beregnet som (RF / 2) + 1. | Det generelle valg for afbalanceret konsistens og tilgรฆngelighed. |
| LOKAL_KVORUM | Et flertal af replikaerne i det lokale datacenter skal reagere. | Klynger med flere datacentre, fordi det undgรฅr latenstid pรฅ tvรฆrs af regioner. |
| ALLE | Enhver replika skal svare. | Sjรฆlden. รn node nede fรฅr anmodningen til at mislykkes fuldstรฆndigt. |
| NOGEN (kun skriver) | En antydet overdragelse tรฆller som succes, selvom ingen replika er tilgรฆngelig. | Maksimal skrivetilgรฆngelighed, hvor holdbarheden kan lempes. |
Stรฆrk konsistens garanteres, nรฅr lรฆseniveauet plus skriveniveauet overstiger replikationsfaktoren. Med en replikationsfaktor pรฅ tre opfylder skrivning ved QUORUM og lรฆsning ved QUORUM denne regel, fordi to plus to er stรธrre end tre. Skrivning ved EN og lรฆsning ved EN gรธr det ikke, og en lรฆsning kan derfor returnere en รฆldre vรฆrdi.
Nรฅr en replika ikke kan nรฅs, gemmer koordinatoren en vink og afspiller det igen, nรฅr noden vender tilbage, hvilket er sรฅdan niveauet ALLE og meget af Cassandras selvhelbredende adfรฆrdsarbejde.
Skrive Operation i Cassandra
Koordinatoren sender en skriveanmodning til replikaer. Hvis alle replikaerne er oppe, vil de modtage skriveanmodning uanset deres konsistensniveau.
Konsistensniveau bestemmer, hvor mange noder der vil svare tilbage med succesbekrรฆftelsen.
Noden vil svare tilbage med succesbekrรฆftelsen, hvis data er skrevet med succes til commit-loggen og memTabel.
For eksempel vil tre replikaer modtage skriveanmodninger i et enkelt datacenter med en replikeringsfaktor lig med tre. Hvis konsistensniveauet er รฉt, vil kun รฉn replika svare tilbage med succesbekrรฆftelsen, og de resterende to vil forblive i dvale.
Antag, at hvis de resterende to replikaer mister data pรฅ grund af knudepunkter eller et andet problem, Cassandra vil gรธre rรฆkken ensartet ved den indbyggede reparationsmekanisme i Cassandra.
Her er det forklaret, hvordan skriveprocessen foregรฅr i Cassandra,
- Nรฅr skriveanmodning kommer til noden, logger den fรธrst og fremmest pรฅ commit-loggen.
- Derefter Cassandra skriver dataene i mem-tabellen. Data skrevet i mem-tabellen pรฅ hver skriveanmodning skriver ogsรฅ i commit-log separat. Mem-table er en midlertidigt gemt data i hukommelsen, mens Commit-log logger transaktionsposterne til sikkerhedskopieringsformรฅl.
- Nรฅr mem-tabellen er fuld, tรธmmes data til SSTable-datafilen.

Da SSTAbeller aldrig redigeres pรฅ stedet, fjerner en sletning ikke rรฆkken med det samme. I stedet bruges en markรธr kaldet en gravsten er skrevet, og rรฆkken forsvinder kun, nรฅr komprimeringen kรธrer efter respitperioden. Det er derfor, at tunge sletningsbelastninger forsinker lรฆsningen, indtil komprimeringen indhenter den.
Lรฆs Operation i Cassandra
Der er tre typer lรฆseanmodninger, som en koordinator sender til replikaer.
- Direkte anmodning
- Sammenfatningsanmodning
- Lรฆs reparationsanmodning
Koordinatoren sender direkte anmodning til en af โโreplikaerne. Derefter sender koordinatoren sammenfatningsanmodningen til det antal replikaer, der er angivet af konsistensniveauet, og kontrollerer, om de returnerede data er opdaterede data.
Derefter sender koordinatoren en sammenfatningsanmodning til alle de resterende replikaer. Hvis en node giver en forรฆldet vรฆrdi, vil en anmodning om baggrundslรฆsereparation opdatere disse data. Denne proces kaldes lรฆsereparationsmekanisme.
Inde i den replika, der modtager den direkte anmodning, er opslagsrรฆkkefรธlgen designet til at undgรฅ at berรธre disken, hvor det er muligt.
- memtable kontrolleres fรธrst, da de nyeste skrivninger endnu ikke er blevet ryddet.
- rรฆkkecache, hvis aktiveret, kan besvare hele anmodningen uden yderligere arbejde.
- A blomstringsfilter konsulteres for hver SSTable. Den svarer absolut ikke til stede eller muligvis til stede, hvilket gรธr det muligt at springe de fleste SSTAbeller over uden at lรฆse dem.
- partitionsindeks og dens oversigt finder det nรธjagtige byte-offset i enhver SSTable, der overlever bloom-filtertjekket.
- Matchende fragmenter fra flere SSTAbeller flettes sammen, hvor det seneste tidsstempel vinder for hver kolonne.
Bloom-filteret er det trin, der holder lรฆsninger hurtige, efterhรฅnden som data vokser, fordi det fjerner nรฆsten alle SSTables fra overvejelse, fรธr der finder en disksรธgning sted. Anvendelse af disse mekanikker pรฅ tvรฆrs af flere maskiner er dรฆkket i Cassandra klynge tutorial.
