Redis Шардинг

Redis Sarding



Когато за първи път започнете да използвате Redis, лесно е да повярвате, че никога няма да се наложи да го мащабирате извън настройките по подразбиране. Проблемът е, че с нарастването на вашето приложение в крайна сметка ще имате нужда от повече памет, процесор и пропускателна способност, за да поддържате вашите бизнес нужди. В тази статия ще ви покажем как клъстерът Redis се мащабира с шардинг, за да ви даде допълнителния капацитет, от който се нуждаете, за да управлявате бизнеса си гладко и да растете в бъдещето. Ще научим конкретно как клъстерът Redis осигурява висока производителност с шардинг.

Мащабируемост

Има два общи подхода за мащабиране на сървър: вертикално мащабиране и хоризонтално мащабиране. Вертикалното мащабиране или увеличаване на мащаба е мястото, където добавяте повече мощност и ресурси към вашия сървър, като повече процесори, памет и съхранение, което е скъпо. От друга страна, хоризонталното мащабиране е добавяне на множество възли към вашия съществуващ набор от ресурси. Това се нарича мащабиране. Така че, въз основа на вашите ограничения и изисквания, от вас зависи дали да имате единичен по-голям сървърен екземпляр или да разположите множество сървърни възли.

Да приемем, че имате 100 GB RAM и трябва да съхранявате 200 GB данни. В този случай имате два избора:







  • Увеличете мащаба, като добавите повече RAM към системата
  • Разширете мащаба, като добавите друг сървърен екземпляр със 100 GB RAM

Ако сте достигнали максималното ограничение на RAM в рамките на вашата инфраструктура, тогава мащабирането е идеалният подход. В допълнение, мащабирането ще увеличи пропускателната способност на базата данни с огромен марж.





Redis Шардинг

Известен факт е, че Redis работи с една нишка. Така че Redis не е в състояние да използва няколко ядра на процесора на вашия сървър за обработка на команди. Следователно добавянето на повече CPU ядра не ви дава много производителност или производителност с Redis. Не е така при разделянето на вашите данни между множество сървърни инстанции. Добавянето на няколко сървъра и разпределянето на набора от данни между тях позволява паралелната обработка на клиентски заявки, което увеличава пропускателната способност. В допълнение, общата производителност може да нарасне почти линейно.





Този подход за разделяне или разпространение на данни между множество сървъри с оглед на мащабирането се нарича шардинг . Извикват се всички сървъри, които съхраняват части от данни парчета .



Как се прави шардинг — Алгоритмично шардинг

Едно от основните проблеми с шардинга беше как да се намери даден ключ сред множество Redis възли. Тъй като даден ключ може да бъде съхранен във всички налични шардове, запитването към всички шардове за намиране на конкретен ключ не е най-добрият вариант. Така че трябва да има начин да се съпостави всеки ключ към конкретен шард и Redis използва стратегия за алгоритмично шардинг.

Най-често срещаният подход е да се изчисли хеш стойност, като се използва името на Redis ключ и модул. След това го разделете на наличните Redis шардове в системата.

HASH_SLOT = CRC16 (ключ) мод 16384

Това е доста добро решение, стига общият брой на фрагментите да е постоянен. Всеки път, когато добавите нов екземпляр на Reids сървър, получената стойност за даден ключ може да се промени, тъй като общият брой сегменти се е увеличил. В крайна сметка ще поиска грешен сегмент на Redis. Следователно трябва да следвате процеса на повторно споделяне, като изчислявате новия шард за всеки ключ и прехвърляте данни към правилния сървър, което е тромаво и не е тривиална задача, ако общият ви брой шардове се увеличава от време на време.

Redis използва нов логически обект, наречен a хеш слот за да предотвратите този проблем. Няколко хеш слота са налични за даден шард, а един хеш слот може да съдържа множество Redis ключове. Има 16384 хеш слота в клъстер на база данни на Redis, който остава непроменен. Делението по модул се извършва с броя на хеш слотовете вместо с броя на фрагментите. Той осигурява правилната позиция на хеш слота за посочения ключ, дори когато броят на фрагментите се е увеличил. Той опростява процеса на повторно споделяне, като премества хеш слотовете от един шард в новия, който разделя данните между различните екземпляри на Redis според изискването.

Предимства на Redis Sharding

Разделянето на Redis позволява няколко предимства за вашата система от бази данни с минимални промени.

Висока производителност

Тъй като Redis е еднонишков, обработката на множество клиентски заявки не може да обработва паралелно с помощта на множество процесорни ядра. Така че добавянето на нови шардове или сървърни екземпляри гарантира, че можете да извършвате операции на Redis паралелно. Той увеличава операциите в секунда във вашата база данни Redis, което в крайна сметка ви осигурява висока производителност.

Висока наличност

С подхода за шардинг клъстерът Redis може да настрои архитектура главна реплика, която гарантира висока наличност и издръжливост.

Прочетете репликите

Шардингът ви позволява да запазите точно копие на вашите данни и да предоставите операции за четене чрез отделни екземпляри на Redis, което повишава производителността на изпълнението на вашата заявка за четене.

Освен тези предимства, шардингът може да причини ситуации на разделяне на мозъка, когато имате четен брой сегменти в клъстера Redis. Така че се препоръчва да поддържате нечетен брой фрагменти във вашия Redis клъстер.

Заключение

За да обобщим, шардингът на Redis разделя данни между множество сървъри, което позволява мащабиране и висока производителност за вашата база данни. Както беше обсъдено, Redis използва алгоритмична стратегия за шардинг, за да насочи клиентските заявки към правилния шард. Това има някои недостатъци, когато общият брой на фрагментите се увеличи. Така че, вместо общия брой фрагменти, Redis използва броя на хеш слотовете, за да изчисли подходящия шард. С въведеното шардинг базите данни на Redis осигуряват висока достъпност, висока производителност и висока производителност.