Redis Sharding

Redis Sharding



Keď prvýkrát začnete používať Redis, je ľahké uveriť, že ho nikdy nebudete musieť škálovať nad rámec predvolených nastavení. Problém je v tom, že ako vaša aplikácia rastie, budete nakoniec potrebovať viac pamäte, CPU a priepustnosti na podporu vašich obchodných potrieb. V tomto článku vám ukážeme, ako sa klaster Redis škáluje pomocou shardingu, aby vám poskytol dodatočnú kapacitu, ktorú potrebujete na bezproblémové fungovanie vášho podnikania a rast do budúcnosti. Konkrétne sa dozvieme, ako klaster Redis poskytuje vysokú priepustnosť pri zdieľaní.

Škálovateľnosť

Existujú dva bežné prístupy k škálovaniu servera: vertikálne škálovanie a horizontálne škálovanie. Vertikálne škálovanie alebo škálovanie je miesto, kde pridáte viac energie a zdrojov do vášho servera, ako je viac CPU, pamäte a úložného priestoru, čo je nákladné. Na druhej strane, horizontálne škálovanie je pridávanie viacerých uzlov do vášho existujúceho fondu zdrojov. Toto sa nazýva škálovanie. Na základe vašich obmedzení a požiadaviek je teda na vás, či budete mať jednu väčšiu inštanciu servera alebo nasadíte viacero serverových uzlov.

Predpokladajme, že máte 100 GB RAM a potrebujete mať 200 GB dát. V tomto prípade máte dve možnosti:







  • Škálujte pridaním viac pamäte RAM do systému
  • Škálujte pridaním ďalšej inštancie servera so 100 GB RAM

Ak ste dosiahli maximálny limit RAM v rámci vašej infraštruktúry, potom je škálovanie ideálnym prístupom. Okrem toho škálovanie výrazne zvýši priepustnosť databázy.





Redis Sharding

Je známy fakt, že Redis funguje na jedinom vlákne. Redis teda nie je schopný využívať viaceré jadrá CPU vášho servera na spracovanie príkazov. Pridanie ďalších jadier CPU vám preto s Redis neprinesie veľkú priepustnosť ani výkon. Toto nie je prípad rozdelenia údajov medzi viacero inštancií servera. Pridanie viacerých serverov a distribúcia dátovej sady medzi nimi umožňuje paralelné spracovanie požiadaviek klientov, čo zvyšuje priepustnosť. Okrem toho sa celkový výkon môže zvýšiť takmer lineárne.





Tento prístup rozdelenia alebo distribúcie údajov medzi viaceré servery s ohľadom na škálovanie sa nazýva úlomky . Volajú sa všetky servery, ktoré uchovávajú časti údajov črepy .



Ako sa robí Sharding — Algoritmické Sharding

Jedným z hlavných problémov shardingu bolo, ako nájsť daný kľúč medzi viacerými uzlami Redis. Keďže daný kľúč môže byť uložený v ľubovoľných dostupných zlomkoch, dotazovanie sa na všetky zlomky s cieľom nájsť konkrétny kľúč nie je najlepšou voľbou. Takže by mal existovať spôsob, ako namapovať každý kľúč na konkrétny fragment a Redis používa stratégiu algoritmického shardingu.

Najbežnejším prístupom je výpočet hodnoty hash pomocou názvu kľúča Redis a modulu. Potom ho vydeľte dostupnými úlomkami Redis v systéme.

HASH_SLOT = CRC16(kľúč) mod 16384

Je to celkom dobré riešenie, pokiaľ je celkový počet úlomkov konštantný. Vždy, keď pridáte novú inštanciu servera Reids, výsledná hodnota pre daný kľúč sa môže zmeniť, pretože sa zvýšil celkový počet zlomkov. Skončí to dotazovaním na nesprávny zlomok Redis. Preto by ste mali postupovať podľa procesu opätovného spracovania tak, že vypočítate nový zlomok pre každý kľúč a prenesiete údaje na správny server, čo je ťažkopádna a nie triviálna úloha, ak sa váš celkový počet zlomkov z času na čas zvyšuje.

Redis používa novú logickú entitu s názvom a hash slot aby sa tomuto problému zabránilo. Pre daný fragment je k dispozícii niekoľko hash slotov a jeden hash slot môže obsahovať viacero kľúčov Redis. V databázovom klastri Redis je 16384 hash slotov, ktoré zostávajú nezmenené. Rozdelenie modulo sa vykonáva podľa počtu hash slotov namiesto počtu fragmentov. Poskytuje správnu polohu hash slotu pre špecifikovaný kľúč, aj keď sa počet zlomkov zvýšil. Zjednodušuje proces reshardingu presunutím hash slotov z jedného fragmentu do nového, ktorý rozdeľuje údaje medzi rôzne inštancie Redis podľa požiadaviek.

Výhody Redis Sharding

Redis sharding umožňuje niekoľko výhod pre váš databázový systém s minimálnymi zmenami.

Veľký prietok

Keďže Redis je jednovláknový, spracovanie viacerých požiadaviek klientov nemôže spracovať paralelne pomocou viacerých jadier CPU. Takže pridanie nových častí alebo inštancií servera zaručuje, že môžete vykonávať operácie Redis paralelne. Zvyšuje počet operácií za sekundu vo vašej databáze Redis, čo vám nakoniec poskytuje vysokú priepustnosť.

Vysoká dostupnosť

S prístupom sharding môže klaster Redis nastaviť architektúru master-replika, ktorá zaisťuje vysokú dostupnosť a trvanlivosť.

Prečítajte si Repliky

Zdieľanie vám umožňuje uchovávať presnú kópiu vašich údajov a poskytovať operácie čítania prostredníctvom samostatných inštancií Redis, čo zvyšuje výkon vykonávania vášho dotazu na čítanie.

Okrem týchto výhod môže sharding spôsobiť rozštiepené mozgy, keď máte párny počet fragmentov v klastri Redis. Preto sa odporúča ponechať nepárny počet zlomkov vo vašom klastri Redis.

Záver

Aby som to zhrnul, Redis sharding je rozdelenie údajov medzi viacero serverov, čo umožňuje škálovanie a vysokú priepustnosť vašej databázy. Ako už bolo uvedené, Redis používa stratégiu algoritmického shardingu na nasmerovanie požiadaviek klientov na správny fragment. To má určité nevýhody, keď sa zvyšuje celkový počet úlomkov. Takže namiesto celkového počtu zlomkov používa Redis na výpočet príslušného zlomku počet hash slotov. Vďaka zavedeniu shardingu poskytujú databázy Redis vysokú dostupnosť, vysokú priepustnosť a vysoký výkon.