Redis Sharding

Redis Sharding



Când începeți să utilizați pentru prima dată Redis, este ușor de crezut că nu va trebui niciodată să-l scalați dincolo de setările implicite. Problema este că, pe măsură ce aplicația dvs. crește, în cele din urmă veți avea nevoie de mai multă memorie, procesor și capacitate de transfer pentru a vă susține nevoile afacerii. În acest articol, vă vom arăta cum clusterul Redis se scalează cu fragmentarea pentru a vă oferi capacitatea suplimentară de care aveți nevoie pentru a vă gestiona afacerea fără probleme și a crește în viitor. Vom afla în mod special cum clusterul Redis oferă un randament ridicat cu fragmentare.

Scalabilitate

Există două abordări comune pentru scalarea unui server: scalarea verticală și scalarea orizontală. Scalare sau scalare verticală este locul în care adăugați mai multă putere și resurse serverului dvs., cum ar fi mai multe procesoare, memorie și stocare, ceea ce este costisitor. Pe de altă parte, scalarea orizontală adaugă mai multe noduri la pool-ul de resurse existent. Aceasta se numește scalare. Deci, pe baza limitărilor și cerințelor dvs., depinde de dvs. să aveți o singură instanță de server mai mare sau să implementați mai multe noduri de server.

Să presupunem că aveți 100 GB de RAM și trebuie să dețineți 200 GB de date. În acest caz, aveți două opțiuni:







  • Creșteți adăugând mai multă memorie RAM la sistem
  • Extindeți prin adăugarea unei alte instanțe de server cu 100 GB de RAM

Dacă ați atins limita maximă de RAM din infrastructura dvs., atunci scalarea este abordarea ideală. În plus, extinderea va crește debitul bazei de date cu o marjă uriașă.





Redis Sharding

Este un fapt cunoscut că Redis operează pe un singur fir. Deci, Redis nu este capabil să utilizeze mai multe nuclee ale procesorului serverului dumneavoastră pentru a procesa comenzi. Prin urmare, adăugarea mai multor nuclee de procesor nu vă oferă mult debit sau performanță cu Redis. Nu este cazul împărțirii datelor dvs. între mai multe instanțe de server. Adăugarea mai multor servere și distribuirea setului de date între acestea permit procesarea în paralel a cererilor clienților, ceea ce crește debitul. În plus, performanța generală poate crește aproape liniar.





Această abordare de împărțire sau distribuire a datelor între mai multe servere având în vedere scalarea este numită fragmentare . Sunt apelate toate serverele care stochează porțiuni de date cioburi .



Cum se realizează fragmentarea — Fragmentarea algoritmică

Una dintre preocupările majore legate de sharding a fost modul de a localiza o anumită cheie între mai multe noduri Redis. Deoarece o anumită cheie poate fi stocată în orice fragment disponibil, interogarea tuturor fragmentelor pentru a găsi o anumită cheie nu este cea mai bună opțiune. Deci, ar trebui să existe o modalitate de a mapa fiecare cheie la un anumit fragment, iar Redis utilizează o strategie de fragmentare algoritmică.

Cea mai obișnuită abordare este calcularea unei valori hash folosind numele cheii Redis și modulo. Apoi, împărțiți-l la fragmentele Redis disponibile în sistem.

HASH_SLOT = CRC16(cheie) mod 16384

Este o soluție destul de bună atâta timp cât numărul total de cioburi este constant. Ori de câte ori adăugați o nouă instanță de server Reids, valoarea rezultată pentru o anumită cheie se poate modifica, deoarece numărul total de fragmente a crescut. Va sfârși prin a interoga fragmentul Redis greșit. Prin urmare, ar trebui să urmați procesul de redistribuire calculând noul fragment pentru fiecare cheie și transferând date pe serverul corect, ceea ce este greoi și nu este o sarcină banală dacă numărul total de fragmente crește din când în când.

Redis folosește o nouă entitate logică numită a slot hash pentru a preveni această problemă. Mai multe sloturi hash sunt disponibile pentru un anumit shard, iar un singur slot hash poate deține mai multe chei Redis. Există 16384 de sloturi hash într-un cluster de baze de date Redis care rămâne neschimbat. Împărțirea modulo se face cu numărul de sloturi hash în loc de numărul de fragmente. Oferă poziția corectă a slotului hash pentru cheia specificată chiar și atunci când numărul de fragmente a crescut. Simplifică procesul de redistribuire prin mutarea sloturilor hash dintr-un fragment în cel nou, care împarte datele în diferite instanțe Redis, conform cerințelor.

Beneficiile Redis Sharding

Redis sharding oferă mai multe beneficii sistemului dumneavoastră de baze de date cu modificări minime.

Debit ridicat

Deoarece Redis are un singur thread, procesarea cererilor multiple ale clientului nu poate procesa în paralel folosind mai multe nuclee CPU. Deci, adăugarea de noi fragmente sau instanțe de server garantează că puteți efectua operațiuni Redis în paralel. Mărește operațiunile pe secundă din baza de date Redis, ceea ce vă oferă în cele din urmă un randament ridicat.

Valabilitate ridicată

Cu abordarea sharding, clusterul Redis poate configura o arhitectură master-replica care asigură disponibilitate și durabilitate ridicate.

Citiți replici

Partajarea vă permite să păstrați o copie exactă a datelor și să furnizați operațiuni de citire prin instanțe Redis separate, ceea ce crește performanța execuției interogării de citire.

În afară de aceste beneficii, sharding-ul poate provoca situații de split-brain atunci când aveți un număr par de fragmente în clusterul Redis. Prin urmare, se recomandă păstrarea unui număr impar de fragmente în clusterul dvs. Redis.

Concluzie

Pentru a rezuma, Redis sharding este împărțirea datelor între mai multe servere, ceea ce permite scalarea și debitul ridicat pentru baza de date. După cum sa discutat, Redis folosește o strategie de fragmentare algoritmică pentru a direcționa cererile clientului către fragmentul corect. Acest lucru are unele dezavantaje atunci când numărul total de cioburi crește. Deci, în loc de numărul total de fragmente, Redis folosește numărul de sloturi hash pentru a calcula fragmentul corespunzător. Odată cu introducerea sharding-ului, bazele de date Redis oferă disponibilitate ridicată, debit ridicat și performanță ridicată.