Ответ
Redis поддерживает как вертикальное, так и горизонтальное масштабирование. Основные подходы к горизонтальному масштабированию (увеличению количества серверов) включают:
-
Репликация (Primary-Replica)
- Что это: Создание копий (реплик) основного узла (primary). Все операции записи идут на primary, а затем асинхронно копируются на реплики.
- Зачем: Масштабирование операций чтения (read scaling) и обеспечение высокой доступности (high availability). Если primary узел падает, одна из реплик может быть повышена до нового primary.
- Ограничение: Не решает проблему масштабирования записи или нехватки памяти для хранения всего набора данных.
-
Redis Sentinel
- Что это: Система мониторинга и автоматического аварийного переключения (failover) для конфигураций с репликацией.
- Зачем: Обеспечивает высокую доступность. Sentinel следит за состоянием primary узла и, в случае его отказа, автоматически выбирает и повышает реплику до нового primary, перенаправляя клиентов.
-
Redis Cluster (Шардирование)
- Что это: Встроенное решение для горизонтального распределения данных по нескольким узлам (шардам). Набор данных делится на 16384 хеш-слота, которые распределяются между узлами кластера.
- Зачем: Масштабирование операций записи (write scaling) и объема хранимых данных. Позволяет хранить датасет, который не помещается в память одного сервера.
- Пример создания кластера:
# Создать кластер из 6 узлов (3 мастера и 3 реплики) redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1
-
Шардирование на стороне клиента
- Что это: Логика распределения ключей по разным инстансам Redis реализуется в коде приложения.
- Зачем: Дает полный контроль над распределением данных, но усложняет приложение и требует ручного управления при добавлении/удалении узлов.