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.

  • ๐Ÿ•ธ๏ธ Peer-to-peer-design: Hver node er lige og udveksler tilstand via Gossip-protokollen, sรฅ der findes ingen master, der kan fejle.
  • ๐Ÿงฑ Opbevaringskomponenter: En skrivning lander i commit-loggen og memtabellen og flusher derefter til en uforanderlig SSTable pรฅ disken.
  • ๐Ÿ” Replikationsstrategi: SimpleStrategy passer til รฉt datacenter, mens NetworkTopologyStrategy placerer replikaer pr. datacenter og pr. rack.
  • ๐Ÿ”ข Replikationsfaktor: Tre kopier pรฅ tre noder er standardindstillingen for at fjerne et enkelt fejlpunkt.
  • โš–๏ธ Konsistensniveauer: Det valgte niveau pr. forespรธrgsel bestemmer, hvor mange replikaer der skal bekrรฆftes, fรธr klienten besvares.
  • ๐Ÿ” Lรฆs sti: Direkte, digest- og lรฆste reparationsanmodninger kombineres for at returnere aktuelle data og i det stille rette forรฆldede replikaer.

Cassandra ArchiTekturreplikering

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:

Cassandra Architecture
Cassandra Architecture diagram

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:

SimpleStrategy i Cassandra
SimpleStrategy i Cassandra

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:

Netvรฆrk Topologi Strategi i Cassandra
Netvรฆrk Topologi Strategi i Cassandra

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,

  1. Nรฅr skriveanmodning kommer til noden, logger den fรธrst og fremmest pรฅ commit-loggen.
  2. 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.
  3. Nรฅr mem-tabellen er fuld, tรธmmes data til SSTable-datafilen.
Skrive Operation i Cassandra
Skrive Operation i Cassandra

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.

  1. Direkte anmodning
  2. Sammenfatningsanmodning
  3. 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.

  1. memtable kontrolleres fรธrst, da de nyeste skrivninger endnu ikke er blevet ryddet.
  2. rรฆkkecache, hvis aktiveret, kan besvare hele anmodningen uden yderligere arbejde.
  3. 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.
  4. partitionsindeks og dens oversigt finder det nรธjagtige byte-offset i enhver SSTable, der overlever bloom-filtertjekket.
  5. 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.

Ofte Stillede Spรธrgsmรฅl

Hver node kontakter et par peers hvert sekund og deler status om sig selv og alle, den kender: liveness, load, schema version og token range. Sรฅdan forbliver en klynge koordineret uden en master.

Komprimering fletter flere SSTAbeller sammen til รฉn, keeping den nyeste version af hver kolonne og kasserer tombstone-markerede rรฆkker. Uden den ville en lรฆsning skulle berรธre gradvist flere filer.

Virtuelle noder opdeler hver fysisk maskines andel af tokenringen i mange smรฅ omrรฅder. Dette spreder data mere jรฆvnt og gรธr det langt hurtigere at tilfรธje eller erstatte en node end manuel tokentildeling.

AI kan anvende reglen om en lรฆsning plus skrivning, der er stรธrre end replikeringsfaktoren, og foreslรฅ en parring, men den acceptable stalitet for hver forespรธrgsel er en forretningsbeslutning, der skal angives fรธrst.

AI lรฆser nodetool-output og -mรฅlinger godt, sรฅ den er effektiv til at opdage hot-partitioner, tombstone-opbygning og komprimeringsefterslรฆb. Enhver konfigurationsรฆndring, den foreslรฅr, bรธr stadig testes pรฅ en staging-klynge.

Opsummer dette indlรฆg med: