Cassandra Architectură și factor de replicare

⚡ Rezumat inteligent

Cassandra Arhitectura distribuie datele între nodurile peer fără un singur punct de defecțiune, folosind gossip pentru coordonare și replicare pentru durabilitate. Această pagină acoperă fiecare componentă, atât strategiile de replicare, cât și nivelurile de consistență, precum și căile interne de scriere și citire.

  • 🕸️ Design peer-to-peer: Fiecare nod este egal și schimbă stare prin protocolul gossip, deci nu există niciun master care să poată eșua.
  • 🧱 Componente de stocare: O scriere ajunge în jurnalul de commit și în tabelul de memorizare, apoi este descărcată într-un tabel SSTable imuabil pe disc.
  • 🔁 Strategia de replicare: SimpleStrategy se potrivește unui singur centru de date, în timp ce NetworkTopologyStrategy plasează replici per centru de date și per rack.
  • 🔢 Factorul de replicare: Trei copii pe trei noduri reprezintă setarea standard pentru eliminarea oricărui punct unic de defecțiune.
  • 🇧🇷 Niveluri de consistență: Nivelul ales per interogare decide câte replici trebuie să confirme înainte ca clientul să primească un răspuns.
  • 🔍 Cale de citire: Cererile de reparare directe, digest și read se combină pentru a returna date actuale și a corecta în mod discret replicile învechite.

Cassandra ArchiReplicarea texturii

Cassandra este conceput pentru a se descurca Datele mari. CassandraCaracteristica principală a lui este de a stoca date pe mai multe noduri, fără un singur punct de defecțiune.

Motivul pentru acest tip de CassandraArhitectura lui a fost că defecțiunea hardware poate apărea în orice moment. Orice nod poate fi oprit. În caz de defecțiune pot fi utilizate datele stocate într-un alt nod. Prin urmare, Cassandra este proiectat cu arhitectura sa distribuită.

Cassandra stochează date pe diferite noduri cu o arhitectură de modă distribuită peer to peer.

Toate nodurile fac schimb de informații între ele folosind Protocol de bârfă. Bârfa este un protocol în Cassandra prin care nodurile pot comunica între ele.

Componente ale Cassandra Architectură

Există următoarele componente în Cassandra Architectura:

Cassandra Architectură
Cassandra ArchiDiagrama de tectură

Diagrama de mai sus imbrica componentele: nodurile se află într-un centru de date, centrele de date se află într-un cluster, iar jurnalul de commit-uri, memtable-ul și SSTable-ul se află în fiecare nod individual.

Nod

Nodul este locul unde sunt stocate datele. Este componenta de bază a Cassandra.

Data Center

O colecție de noduri se numește centru de date. Multe noduri sunt clasificate ca un centru de date.

Cluster

Clusterul este colecția multor centre de date.

Jurnal de comitere

Fiecare operație de scriere este scrisă în Commit Log. Jurnalul de confirmare este utilizat pentru recuperarea în caz de accident.

Mem-masa

După ce datele sunt scrise în Commit log, datele sunt scrise în Mem-table. Datele sunt scrise temporar în Mem-table.

SSTable

Când Mem-table atinge un anumit prag, datele sunt stocate într-un fișier de disc SSTable. SSTable-urile sunt imuabile, așadar o actualizare scrie o nouă versiune în loc să o editeze pe cea veche, iar un proces de fundal numit compactare îmbină ulterior aceste versiuni și elimină rândurile înlocuite.

Replicarea datelor în Cassandra

Deoarece poate apărea o problemă hardware sau legătura poate fi oprită în orice moment în timpul procesului de date, este necesară o soluție pentru a oferi o copie de rezervă atunci când a apărut problema. Deci, datele sunt replicate pentru a asigura niciun punct de eșec unic.

Cassandra plasează replici ale datelor pe diferite noduri pe baza acestor doi factori.

  • Unde să plasați următoarea replică este determinat de Strategia de replicare.
  • În timp ce numărul total de replici plasate pe diferite noduri este determinat de Factorul de replicare.

Un factor de replicare înseamnă că există o singură copie a datelor, în timp ce trei factori de replicare înseamnă că există trei copii ale datelor pe trei noduri diferite.

Pentru a vă asigura că nu există un singur punct de eșec, factorul de replicare trebuie să fie trei.

Există două tipuri de strategii de replicare în Cassandra.

SimplaStrategy în Cassandra

SimpluStrategy este utilizat atunci când aveți un singur centru de date. SimpleStrategy plasează prima replică pe nodul selectat de partitioner. După aceea, replicile rămase sunt plasate în sensul acelor de ceasornic în inelul Nod.

Iată reprezentarea picturală a SimpleStrategy:

SimplaStrategy în Cassandra
SimplaStrategy în Cassandra

NetworkTopologyStrategia în Cassandra

NetworkTopologyStrategy este utilizat atunci când aveți mai mult de două centre de date. În NetworkTopologyStrategy, replicile sunt setate pentru fiecare centru de date separat. NetworkTopologyStrategy plasează replici în sensul acelor de ceasornic în inel până când ajunge la primul nod dintr-un alt rack. Această strategie încearcă să plaseze replici pe diferite rafturi în același centru de date.

Acest lucru se datorează motivului pentru care uneori pot apărea defecțiuni sau probleme în rack. Apoi, replicile de pe alte noduri pot furniza date.

Iată reprezentarea grafică a strategiei de topologie a rețelei:

NetworkTopologyStrategia în Cassandra
NetworkTopologyStrategia în Cassandra

Factorul de replicare decide câte copii există. Câte dintre aceste copii trebuie să răspundă la o anumită solicitare este o setare separată, descrisă în continuare.

Niveluri de consistență în Cassandra

Nivelul de consistență este setat per interogare, nu per cluster, ceea ce face ca Cassandra reglabil. Acesta precizează câte replici trebuie să confirme o scriere sau să răspundă la o citire înainte ca coordonatorul să răspundă clientului. Un nivel scăzut returnează date mai rapid; un nivel înalt returnează date care sunt cu siguranță mai actuale.

Nivel comportament Utilizare tipică
ONE O replică trebuie să răspundă. Înregistrare în jurnal de mare randament unde o citire ocazională învechită este acceptabilă.
CVORUM Majoritatea tuturor replicilor trebuie să răspundă, calculat ca (RF / 2) + 1. Alegerea generală pentru consistență și disponibilitate echilibrate.
LOCAL_QUORUM Majoritatea replicilor din centrul de date local trebuie să răspundă. Clustere cu mai multe centre de date, deoarece evită latența între regiuni.
Toate colectiile Fiecare replică trebuie să răspundă. Rar. Un nod nefuncțional face ca solicitarea să eșueze complet.
orice (doar scrie) O predare cu indicii este considerată un succes chiar dacă nu este accesibilă nicio replică. Disponibilitate maximă la scriere, unde durabilitatea poate fi relaxată.

Consistența puternică este garantată atunci când nivelul de citire plus nivelul de scriere depășește factorul de replicare. Cu un factor de replicare de trei, scrierea la QUORUM și citirea la QUORUM îndeplinesc această regulă, deoarece doi plus doi este mai mare decât trei. Scrierea la UNU și citirea la UNU nu o fac, prin urmare, o citire poate returna o valoare mai veche.

Când o replică este inaccesibilă, coordonatorul stochează o aluzie și îl redă odată ce nodul revine, ceea ce reprezintă modul în care nivelul ANY și o mare parte din Cassandramunca de autovindecare a comportamentului.

Scrie Operație în Cassandra

Coordonatorul trimite o cerere de scriere către replici. Dacă toate replicile sunt în stare de funcționare, vor primi o cerere de scriere, indiferent de nivelul lor de consistență.

Nivel de consistență determină câte noduri vor răspunde înapoi cu confirmarea succesului.

Nodul va răspunde înapoi cu confirmarea succesului dacă datele sunt scrise cu succes în jurnalul de comitere și memTable.

De exemplu, într-un singur centru de date cu factor de replicare egal cu trei, trei replici vor primi cerere de scriere. Dacă nivelul de consistență este unul, doar o replică va răspunde cu confirmarea succesului, iar celelalte două vor rămâne latente.

Să presupunem că două replici rămase pierd date din cauza căderii nodurilor sau a unei alte probleme, Cassandra va face rândul consistent prin mecanismul de reparare încorporat în Cassandra.

Aici este explicat cum are loc procesul de scriere Cassandra,

  1. Când cererea de scriere vine la nod, în primul rând, se înregistrează în jurnalul de comitere.
  2. "Atunci Cassandra scrie datele în tabelul mem. Datele scrise în tabelul mem pentru fiecare solicitare de scriere sunt, de asemenea, scrise separat în jurnalul de comitere. Mem-table este o dată stocată temporar în memorie, în timp ce Commit log înregistrează înregistrările tranzacțiilor în scopuri de backup.
  3. Când mem-table este plin, datele sunt eliminate în fișierul de date SSTable.
Scrie Operație în Cassandra
Scrie Operație în Cassandra

Deoarece tabelele SSTable nu sunt niciodată editate pe loc, o ștergere nu elimină rândul imediat. În schimb, un marker numit piatră de mormânt este scris, iar rândul dispare doar atunci când compactarea rulează după perioada de grație. Acesta este motivul pentru care sarcinile de lucru cu ștergere intensă încetinesc citirile până când compactarea recuperează.

Citiți Operație în Cassandra

Există trei tipuri de solicitări de citire pe care un coordonator le trimite la replici.

  1. Cerere directă
  2. Cerere de rezumat
  3. Citiți cererea de reparație

Coordonatorul trimite cererea directă uneia dintre replici. După aceea, coordonatorul trimite cererea de rezumat la numărul de replici specificat de nivelul de consistență și verifică dacă datele returnate sunt date actualizate.

După aceea, coordonatorul trimite cererea de rezumat la toate replicile rămase. Dacă vreun nod oferă o valoare depășită, o solicitare de reparare a citirii în fundal va actualiza datele respective. Acest proces se numește mecanism de reparare a citirii.

În interiorul replicii care primește solicitarea directă, ordinea de căutare este concepută pentru a evita atingerea discului ori de câte ori este posibil.

  1. memorabilă este verificată prima, deoarece cele mai noi scrieri nu au fost încă șterse.
  2. cache de rânduri, dacă este activat, poate răspunde întregii solicitări fără alte eforturi.
  3. A filtru de înflorire este consultat pentru fiecare tabel SSTable. Răspunde cu siguranță nu este prezent sau este posibil prezent, ceea ce permite omiterea majorității tabelelor SSTable fără a le citi.
  4. indexul partiției și rezumatul său localizează offset-ul exact în octeți în orice SSTable care supraviețuiește verificării filtrului bloom.
  5. Fragmentele corespondente din mai multe tabele SSTable sunt îmbinate, cea mai recentă marcaj temporal câștigând pentru fiecare coloană.

Filtrul bloom este pasul care menține citirile rapide pe măsură ce datele cresc, deoarece elimină aproape fiecare SSTable din considerare înainte de a avea loc orice căutare pe disc. Aplicarea acestor mecanisme pe mai multe mașini este acoperită în Cassandra grup tutorial.

Întrebări frecvente

Fiecare nod contactează câțiva colegi în fiecare secundă și împărtășește informații despre sine și despre toți cei pe care îi cunoaște: starea de funcționare, încărcarea, versiunea schemei și intervalele de tokenuri. Acesta este modul în care un cluster rămâne coordonat fără un master.

Compactarea îmbină mai multe tabele SST într-una singură, keeping cea mai nouă versiune a fiecărei coloane și eliminând rândurile blocate. Fără aceasta, o citire ar trebui să atingă progresiv mai multe fișiere.

Nodurile virtuale împart cota fiecărei mașini fizice din inelul de tokenuri în mai multe intervale mici. Acest lucru distribuie datele mai uniform și face ca adăugarea sau înlocuirea unui nod să fie mult mai rapidă decât atribuirea manuală de tokenuri.

IA poate aplica regula citire plus scriere mai mare decât factorul de replicare și poate sugera o pereche, dar învechirea acceptabilă pentru fiecare interogare este o decizie de afaceri care trebuie furnizată mai întâi.

AI citește bine ieșirea și metricile nodetool, așa că este eficientă în detectarea partițiilor fierbinți, a acumulărilor de tombstone și a restanțelor de compactare. Orice modificare de configurație pe care o propune ar trebui testată în continuare pe un cluster de staging.

Rezumați această postare cu: