Redis Sharding

Redis Sharding



Kada prvi put počnete koristiti Redis, lako je povjerovati da ga nikada nećete morati skalirati izvan zadanih postavki. Problem je u tome što će vam, kako vaša aplikacija raste, na kraju trebati više memorije, CPU-a i propusnog kapaciteta za podršku vašim poslovnim potrebama. U ovom ćemo vam članku pokazati kako se klaster Redis skalira pomoću dijeljenja kako bi vam pružio dodatni kapacitet koji vam je potreban za glatko vođenje vašeg poslovanja i rast u budućnosti. Posebno ćemo naučiti kako Redis klaster pruža visoku propusnost s dijeljenjem.

Skalabilnost

Dva su uobičajena pristupa skaliranju poslužitelja: vertikalno skaliranje i horizontalno skaliranje. Okomito skaliranje ili povećanje je mjesto gdje svom poslužitelju dodajete više snage i resursa, kao što je više CPU-a, memorije i pohrane, što je skupo. S druge strane, horizontalno skaliranje je dodavanje više čvorova vašem postojećem skupu resursa. To se zove skaliranje. Dakle, na temelju vaših ograničenja i zahtjeva, na vama je da imate jednu veću instancu poslužitelja ili postavite više poslužiteljskih čvorova.

Pretpostavimo da imate 100 GB RAM-a i trebate držati 200 GB podataka. U ovom slučaju imate dva izbora:







  • Povećajte veličinu dodavanjem više RAM-a sustavu
  • Skalirajte dodavanjem druge instance poslužitelja sa 100 GB RAM-a

Ako ste dosegli maksimalno ograničenje RAM-a unutar svoje infrastrukture, skaliranje je idealan pristup. Osim toga, skaliranje će značajno povećati propusnost baze podataka.





Redis Sharding

Poznata je činjenica da Redis radi na jednoj niti. Dakle, Redis nije sposoban koristiti više jezgri CPU-a vašeg poslužitelja za obradu naredbi. Stoga vam dodavanje više CPU jezgri ne daje veliku propusnost ili performanse s Redisom. To nije slučaj s dijeljenjem vaših podataka među više instanci poslužitelja. Dodavanje nekoliko poslužitelja i raspodjela skupa podataka između njih omogućuje paralelnu obradu zahtjeva klijenata, što povećava propusnost. Osim toga, ukupna izvedba može se povećati skoro linearno.





Ovaj pristup dijeljenja ili distribucije podataka među više poslužitelja imajući na umu skaliranje naziva se usitnjavanje . Pozivaju se svi poslužitelji koji pohranjuju dijelove podataka krhotine .



Kako se radi dijeljenje — Algoritamsko dijeljenje

Jedna od glavnih briga kod dijeljenja bila je kako locirati dati ključ među više Redis čvorova. Budući da se dati ključ može pohraniti u bilo koji dostupni shard, postavljanje upita svim shardovima da se pronađe određeni ključ nije najbolja opcija. Dakle, trebao bi postojati način mapiranja svakog ključa u određeni shard, a Redis koristi strategiju algoritamskog dijeljenja.

Najčešći pristup je izračunavanje hash vrijednosti korištenjem imena i modula Redis ključa. Zatim ga podijelite s dostupnim Redis shardovima u sustavu.

HASH_SLOT = CRC16 (ključ) mod 16384

To je sasvim dobro rješenje sve dok je ukupan broj krhotina konstantan. Kad god dodate novu instancu poslužitelja Reids, rezultirajuća vrijednost za dani ključ može se promijeniti jer se ukupni broj fragmenata povećao. Na kraju će postaviti upit za pogrešan Redis shard. Stoga biste trebali slijediti postupak ponovnog dijeljenja izračunavanjem novog sharda za svaki ključ i prijenosom podataka na ispravan poslužitelj, što je glomazan i nije trivijalan zadatak ako se vaš ukupni broj shardova s ​​vremena na vrijeme povećava.

Redis koristi novi logički entitet nazvan a hash slot kako biste spriječili ovaj problem. Za određeni shard dostupno je nekoliko hash utora, a jedan hash utor može sadržavati više Redis ključeva. Postoji 16384 hash mjesta u Redis klasteru baze podataka koji ostaje nepromijenjen. Modulo dijeljenje vrši se s brojem hash utora umjesto broja fragmenata. Omogućuje točan položaj utora za raspršivanje za navedeni ključ čak i kada se broj krhotina povećao. Pojednostavljuje proces ponovnog dijeljenja premještanjem hash utora s jednog sharda na novi koji dijeli podatke na različite instance Redisa prema zahtjevu.

Prednosti Redis Shardinga

Redis dijeljenje omogućuje nekoliko prednosti vašem sustavu baze podataka uz minimalne promjene.

Visoka propusnost

Budući da je Redis jednonitni, obrada višestrukih zahtjeva klijenata ne može se obraditi paralelno koristeći više CPU jezgri. Dakle, dodavanje novih shardova ili instanci poslužitelja jamči da možete paralelno izvoditi Redis operacije. Povećava broj operacija u sekundi u vašoj Redis bazi podataka, što vam na kraju daje visoku propusnost.

Visoka dostupnost

S pristupom dijeljenja, Redis klaster može postaviti arhitekturu master-replika koja osigurava visoku dostupnost i trajnost.

Čitajte replike

Sharding vam omogućuje da zadržite točnu kopiju svojih podataka i omogućite operacije čitanja putem zasebnih instanci Redisa, što povećava izvedbu vašeg izvršavanja upita za čitanje.

Osim ovih prednosti, dijeljenje može uzrokovati situacije podijeljenog mozga kada imate paran broj fragmenata u Redis klasteru. Dakle, preporučuje se držanje neparnog broja fragmenata u vašem Redis klasteru.

Zaključak

Ukratko, Redis sharding dijeli podatke između više poslužitelja, što omogućuje skaliranje i visoku propusnost za vašu bazu podataka. Kao što je spomenuto, Redis koristi algoritamsku strategiju dijeljenja kako bi klijentske zahtjeve usmjerio na ispravan shard. Ovo ima neke nedostatke kada se ukupan broj fragmenata povećava. Dakle, umjesto ukupnog broja shardova, Redis koristi broj hash utora za izračun odgovarajućeg sharda. Uz uvedeno dijeljenje, Redis baze podataka pružaju visoku dostupnost, visoku propusnost i visoku izvedbu.