Як Redis Cluster масштабується горизонтально?
Redis Cluster масштабується горизонтально за рахунок розподілу ключів по множині вузлів (master'ів), де кожен вузол зберігає частину загального набору даних.
Ось як це влаштовано:
1. Дані розбиваються на 16384 хеш-слоти
-
Redis Cluster ділить увесь простір ключів на 16384 логічних слоти.
-
Кожен master-вузол отримує певну кількість цих слотів. Наприклад:
javascriptmaster1 → 0-5460 master2 → 5461-10922 master3 → 10923-16383 -
Коли клієнт записує чи читає ключ, Redis обчислює хеш (
CRC16(key) % 16384) і визначає, у якому слоті він має бути.
Результат: кожен вузол зберігає лише частину даних, а не весь обсяг.
2. Додавання нових вузлів
Коли даних стає більше:
- адміністратор додає новий вузол (master) до кластера,
- і Redis перерозподіляє частину слотів з наявних master'ів на новий.
Це робиться за допомогою команди:
redis-cli --cluster reshard <host>:<port>Під час міграції дані автоматично переносяться між вузлами, не вимагаючи зупинки кластера.
3. Балансування навантаження
Кожен вузол зберігає приблизно однакову кількість слотів, тому навантаження за пам'яттю й операціями рівномірно розподілене.
Якщо якийсь вузол перевантажений - слоти можна перемістити вручну чи автоматично.
4. Читання з реплік
Кожен master має одну чи кілька реплік, які можна використовувати для масштабування читання. Таким чином:
master → запис
replicas → читання5. Масштабування без єдиної точки відмови
Redis Cluster не має центрального координатора: усі вузли знають про розподіл слотів і можуть перенаправляти запити один одному.
Клієнт підключається до будь-якого вузла, і той за потреби повертає команду MOVED, вказуючи правильний вузол.
Підсумок
Redis Cluster масштабується горизонтально, тому що дозволяє додавати нові вузли, перерозподіляючи хеш-слоти й дані між ними.
Це забезпечує:
- лінійне зростання продуктивності при додаванні серверів,
- рівномірне навантаження,
- і відмовостійкість за рахунок реплік.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.