Redis Sharding

Redis Sharding



Když poprvé začnete používat Redis, je snadné uvěřit, že jej nikdy nebudete muset škálovat nad výchozí nastavení. Problém je v tom, že jak vaše aplikace roste, budete nakonec potřebovat více paměti, CPU a kapacity propustnosti pro podporu vašich obchodních potřeb. V tomto článku vám ukážeme, jak se klastr Redis škáluje pomocí shardingu, aby vám poskytl dodatečnou kapacitu, kterou potřebujete k hladkému chodu vašeho podnikání a růstu do budoucnosti. Konkrétně se dozvíme, jak cluster Redis poskytuje vysokou propustnost se shardingem.

Škálovatelnost

Existují dva běžné přístupy ke škálování serveru: vertikální škálování a horizontální škálování. Vertikální škálování nebo škálování je místo, kde přidáte více energie a zdrojů vašemu serveru, jako je více CPU, paměti a úložiště, což je nákladné. Na druhou stranu horizontální škálování přidává více uzlů do vašeho stávajícího fondu zdrojů. Tomu se říká škálování. Na základě vašich omezení a požadavků je tedy na vás, zda budete mít jednu větší instanci serveru nebo nasadíte více serverových uzlů.

Předpokládejme, že máte 100 GB RAM a potřebujete pojmout 200 GB dat. V tomto případě máte dvě možnosti:







  • Škálujte přidáním více paměti RAM do systému
  • Škálujte přidáním další instance serveru se 100 GB RAM

Pokud jste dosáhli maximálního limitu RAM ve vaší infrastruktuře, pak je škálování ideální přístup. Navíc škálování výrazně zvýší propustnost databáze.





Redis Sharding

Je známou skutečností, že Redis funguje na jediném vlákně. Redis tedy není schopen využívat více jader CPU vašeho serveru ke zpracování příkazů. Přidání dalších jader CPU vám proto s Redisem nepřinese velkou propustnost ani výkon. To není případ rozdělení dat mezi více instancí serveru. Přidání několika serverů a distribuce datové sady mezi nimi umožňuje paralelní zpracování požadavků klientů, což zvyšuje propustnost. Celkový výkon se navíc může zvyšovat téměř lineárně.





Tento přístup rozdělení nebo distribuce dat mezi více serverů s ohledem na škálování se nazývá stříhání . Jsou volány všechny servery, které ukládají části dat střepy .



Jak se provádí Sharding — Algoritmické Sharding

Jedním z hlavních problémů se shardingem bylo, jak najít daný klíč mezi více uzly Redis. Vzhledem k tomu, že daný klíč může být uložen v libovolných dostupných útržcích, dotazování na všechny útržky za účelem nalezení konkrétního klíče není nejlepší možností. Měl by tedy existovat způsob, jak namapovat každý klíč na konkrétní fragment a Redis používá strategii algoritmického shardingu.

Nejběžnějším přístupem je výpočet hodnoty hash pomocí názvu klíče Redis a modulu. Poté jej vydělte dostupnými úlomky Redis v systému.

HASH_SLOT = CRC16(klíč) mod 16384

Je to docela dobré řešení, pokud je celkový počet střepů konstantní. Kdykoli přidáte novou instanci serveru Reids, výsledná hodnota pro daný klíč se může změnit, protože se zvýšil celkový počet fragmentů. Skončí to dotazováním na nesprávný úlomek Redis. Proto byste měli následovat proces předělání tak, že spočítáte nový shard pro každý klíč a přenesete data na správný server, což je těžkopádný a není to triviální úkol, pokud se váš celkový počet fragmentů čas od času zvyšuje.

Redis používá novou logickou entitu nazvanou a hash slot abyste tomuto problému zabránili. Pro daný fragment je k dispozici několik hash slotů a jeden hash slot může obsahovat více klíčů Redis. V databázovém clusteru Redis je 16384 hash slotů, které zůstávají nezměněny. Dělení modulo se provádí podle počtu hash slotů místo počtu shardů. Poskytuje správnou polohu hash slotu pro zadaný klíč, i když se počet střepů zvýšil. Zjednodušuje proces reshardingu přesunem hash slotů z jednoho fragmentu do nového, který rozděluje data mezi různé instance Redis podle požadavku.

Výhody Redis Sharding

Redis sharding přináší několik výhod vašemu databázovému systému s minimálními změnami.

Vysoká propustnost

Vzhledem k tomu, že Redis je jednovláknový, zpracování více požadavků klientů nemůže zpracovávat paralelně pomocí více jader CPU. Přidání nových shardů nebo instancí serveru tedy zaručuje, že můžete provádět operace Redis paralelně. Zvyšuje počet operací za sekundu ve vaší databázi Redis, což vám nakonec poskytuje vysokou propustnost.

Vysoká dostupnost

Pomocí přístupu sharding může cluster Redis nastavit architekturu hlavní repliky, která zajišťuje vysokou dostupnost a trvanlivost.

Přečtěte si Repliky

Sdílení vám umožňuje uchovávat přesnou kopii vašich dat a poskytovat operace čtení prostřednictvím samostatných instancí Redis, což zvyšuje výkon provádění vašeho dotazu na čtení.

Kromě těchto výhod může sharding způsobit situace rozděleného mozku, když máte v clusteru Redis sudý počet fragmentů. Doporučuje se tedy ponechat v clusteru Redis lichý počet fragmentů.

Závěr

Abychom to shrnuli, Redis sharding je rozdělení dat mezi více serverů, což umožňuje škálování a vysokou propustnost vaší databáze. Jak již bylo zmíněno, Redis používá algoritmickou strategii shardingu k nasměrování požadavků klientů na správný fragment. To má určité nevýhody, když se celkový počet úlomků zvýší. Redis tedy místo celkového počtu shardů používá počet hash slotů pro výpočet příslušného shardu. Díky zavedení shardingu poskytují databáze Redis vysokou dostupnost, vysokou propustnost a vysoký výkon.