Редис, раздался или нет?

Вопрос 1: Я знаю, что Redis загружает все данные в память, тем самым улучшая скорость чтения/записи. Итак, означает ли это, что если объем моей памяти равен 2 ГБ, максимальный размер набора данных не должен превышать 2 ГБ? Теперь в моей базе данных есть данные 100G+, память моего сервера не может быть больше 32G, поэтому Redis мне больше не подходит?

Вопрос 2: Redis - это распределенная система или нет? Когда я использую Google для поиска свойства redis CAP, он говорит, что Redis не является распределенной системой, поэтому он не имеет никакого отношения к CAP , Но из Википедии говорится, что она имеет архитектуру мастер-раб, один мастер со многими рабами. Как запутанно.

Ответы

Ответ 1

Что касается вопроса 1, Redis - это хранилище в памяти с некоторыми возможностями настойчивости. Весь ваш набор данных должен соответствовать памяти. Поэтому один экземпляр ограничен максимальной памятью вашего сервера. Теперь вы можете также очертить данные несколькими экземплярами Redis, работающими на нескольких серверах. При условии, что у вас есть бюджет для этого, вполне возможно хранить 100 ГБ - 1 ТБ данных в наборе красных шкал. Обратите внимание, что осколок не является автоматическим: он должен быть реализован клиентом или приложением. Он также создает некоторые ограничения на операции, которые вы можете выполнять с вашими данными (например, на серверной стороне было бы невозможно вычислить пересечения двух наборов, размещенных в разных экземплярах Redis).

Что касается вопроса 2, один экземпляр Redis не является распределенной системой. Это удаленный централизованный магазин. Теперь, используя несколько экземпляров Redis, вы можете создать распределенную систему. Поскольку это подход "по-своему", вы можете решить сделать его системой CP или AP.

Один экземпляр может реплицировать свою активность на подчиненные экземпляры (которые, следовательно, в конечном итоге согласуются с мастером). Приложение может выбрать всегда подключение к мастеру для чтения и записи. В этом случае вы можете получить систему CP. Он также может записывать на master и читать из всех экземпляров (включая ведомые), чтобы вы могли получить систему AP. Я сказал "может", потому что он требует некоторой значительной работы для создания таких систем поверх Redis.

Вы можете комбинировать разметку и репликацию master/slave для создания распределенной системы, в которой вы нуждаетесь. Однако Redis предоставляет базовые кирпичи для этого. В частности, он очень мало подходит для устранения отказоустойчивости и HA (и обращается к P в теореме CAP). IMO, Redis sentinel недостаточно для поддержки конфигурации HA Redis, поскольку он охватывает только управление ролями. Вам нужно дополнить его менеджером ресурсов и добавить много логики в клиент/приложение.

Существует текущий проект под названием Redis Cluster, целью которого является предоставление минималистической готовой к использованию распределенной системы, но все еще не хватает вещи, и пока не используется для производственных целей.

Если вам нужен готовый дистрибутив, Redis, вероятно, не очень хороший вариант. Вы будете лучше обслуживаться Cassandra, Riak, MongoDB, Couchbase, Aerospike, MySQL Cluster, Oracle NoSQL и т.д. Однако, если вы хотите создать свою собственную специализированную систему, Redis - отличный компонент для разработки.