Redis Sharding

Redis Sharding



Kad pirmo reizi sākat lietot Redis, ir viegli noticēt, ka jums nekad nevajadzēs to mērogot, pārsniedzot noklusējuma iestatījumus. Problēma ir tāda, ka, lietojumprogrammai augot, jums būs nepieciešams vairāk atmiņas, CPU un caurlaides jaudas, lai atbalstītu jūsu biznesa vajadzības. Šajā rakstā mēs parādīsim, kā Redis klasteris tiek mērogots ar sadalīšanu, lai sniegtu jums papildu jaudu, kas nepieciešama, lai netraucēti vadītu savu biznesu un attīstītos nākotnē. Mēs īpaši uzzināsim, kā Redis klasteris nodrošina lielu caurlaidspēju ar sadalīšanu.

Mērogojamība

Ir divas izplatītas pieejas servera mērogošanas noteikšanai: vertikālā mērogošana un horizontālā mērogošana. Vertikālā mērogošana vai palielināšana ir vieta, kur savam serverim pievienojat vairāk enerģijas un resursu, piemēram, vairāk CPU, atmiņas un krātuves, kas ir dārgi. No otras puses, horizontālā mērogošana ir vairāku mezglu pievienošana esošajam resursu kopumam. To sauc par mērogošanu. Tātad, pamatojoties uz jūsu ierobežojumiem un prasībām, jums ir jāizveido viena lielāka servera instance vai jāizvieto vairāki servera mezgli.

Pieņemsim, ka jums ir 100 GB RAM un jāuzglabā 200 GB datu. Šajā gadījumā jums ir divas izvēles:







  • Palieliniet apjomu, pievienojot sistēmai vairāk RAM
  • Mērogojiet, pievienojot citu servera gadījumu ar 100 GB RAM

Ja esat sasniedzis maksimālo RAM ierobežojumu savā infrastruktūrā, ideāla pieeja ir mērogošana. Turklāt mērogošana ievērojami palielinās datu bāzes caurlaidspēju.





Redis Sharding

Ir zināms fakts, ka Redis darbojas vienā pavedienā. Tātad, Redis nevar izmantot vairākus jūsu servera CPU kodolus, lai apstrādātu komandas. Tāpēc, pievienojot vairāk CPU kodolu, Redis nevar nodrošināt lielu caurlaidspēju vai veiktspēju. Tas neattiecas uz datu sadalīšanu vairākos servera gadījumos. Vairāku serveru pievienošana un datu kopas sadale starp tiem ļauj paralēli apstrādāt klientu pieprasījumus, kas palielina caurlaidspēju. Turklāt kopējā veiktspēja var palielināties gandrīz lineāri.





Šo pieeju datu sadalīšanai vai izplatīšanai starp vairākiem serveriem, ņemot vērā mērogošanu, sauc sadalīšana . Tiek izsaukti visi serveri, kas glabā datu daļas lauskas .



Kā tiek veikta sadalīšana — algoritmiskā sadalīšana

Viena no galvenajām problēmām saistībā ar sadalīšanu bija noteiktas atslēgas atrašana starp vairākiem Redis mezgliem. Tā kā doto atslēgu var glabāt jebkurā pieejamajā shardā, vaicājums visiem shardiem, lai atrastu konkrētu atslēgu, nav labākais risinājums. Tāpēc vajadzētu būt veidam, kā katru atslēgu saistīt ar noteiktu shardu, un Redis izmanto algoritmiskās sadalīšanas stratēģiju.

Visizplatītākā pieeja ir jaucējvērtības aprēķināšana, izmantojot Redis atslēgas nosaukumu un modulo. Pēc tam sadaliet to ar sistēmā pieejamajām Redis šķembām.

HASH_SLOT = CRC16(atslēgas) mod 16384

Tas ir diezgan labs risinājums, ja vien kopējais lauskas skaits ir nemainīgs. Ikreiz, kad pievienojat jaunu Reids servera gadījumu, noteiktās atslēgas iegūtā vērtība var mainīties, jo kopējais shardu skaits ir palielinājies. Beigās tiks vaicāts nepareizais Redis shards. Tāpēc jums vajadzētu sekot atkārtotas sadalīšanas procesam, aprēķinot katrai atslēgai jauno shardu un pārsūtot datus uz pareizo serveri, kas ir apgrūtinoši un nav mazsvarīgs uzdevums, ja jūsu kopējais shardu skaits laiku pa laikam palielinās.

Redis izmanto jaunu loģisko entītiju, ko sauc par a hash slots lai novērstu šo problēmu. Konkrētai šķembai ir pieejami vairāki jaukšanas sloti, un vienā jaukšanas slotā var būt vairākas Redis atslēgas. Redis datu bāzes klasterī ir 16384 jaucējvietas, kas paliek nemainīgas. Moduļu dalīšana tiek veikta ar jaucējvietu skaitu, nevis šķembu skaitu. Tas nodrošina pareizo jaucējvietas pozīciju norādītajai atslēgai pat tad, ja ir palielinājies shardu skaits. Tas vienkāršo atkārtotas sadalīšanas procesu, pārvietojot jaucējvietas no vienas sharda uz jauno, kas sadala datus dažādos Redis gadījumos atbilstoši prasībām.

Redis Sharding priekšrocības

Redis sadalīšana nodrošina vairākas priekšrocības jūsu datu bāzes sistēmai ar minimālām izmaiņām.

Augsta caurlaidspēja

Tā kā Redis ir viens pavediens, vairāku klientu pieprasījumu apstrādi nevar apstrādāt paralēli, izmantojot vairākus CPU kodolus. Tātad jaunu shardu vai servera gadījumu pievienošana garantē, ka varat veikt Redis darbības paralēli. Tas palielina darbību skaitu sekundē jūsu Redis datu bāzē, kas galu galā nodrošina augstu caurlaidspēju.

Augsta pieejamība

Izmantojot sadalīšanas pieeju, Redis klasteris var iestatīt galvenās kopijas arhitektūru, kas nodrošina augstu pieejamību un izturību.

Lasiet kopijas

Dalīšana ļauj saglabāt precīzu datu kopiju un nodrošināt lasīšanas darbības, izmantojot atsevišķus Redis gadījumus, kas palielina lasīšanas vaicājuma izpildes veiktspēju.

Neatkarīgi no šīm priekšrocībām sadalīšana var izraisīt smadzeņu šķelšanos, ja jums ir pāra skaits šķembu Redis klasterī. Tāpēc ir ieteicams Redis klasterī saglabāt nepāra skaitu lauskas.

Secinājums

Rezumējot, Redis sadalīšana sadala datus starp vairākiem serveriem, kas nodrošina datu bāzes mērogošanu un augstu caurlaidspēju. Kā apspriests, Redis izmanto algoritmisku sadalīšanas stratēģiju, lai klienta pieprasījumus norādītu uz pareizo fragmentu. Tam ir daži trūkumi, kad kopējais lauskas skaits palielinās. Tātad kopējā shardu skaita vietā Redis izmanto jaucējvietu skaitu, lai aprēķinātu atbilstošo shardu. Ieviešot sadalīšanu, Redis datu bāzes nodrošina augstu pieejamību, augstu caurlaidspēju un augstu veiktspēju.