Производительность Redis на многоядерном процессоре

Я просматриваю redis, чтобы предоставить мне промежуточное хранилище кеш-памяти с большим количеством вычислений вокруг заданных операций, таких как пересечение и объединение.

Я просмотрел веб-сайт redis и обнаружил, что redis не предназначен для многоядерного процессора. Мой вопрос: почему это так?

Кроме того, если да, то как мы можем 100% использовать ресурсы ЦП с redis на многоядерных процессорах.

Ответы

Ответ 1

Я просмотрел веб-сайт redis и обнаружил, что redis не предназначен для многоядерного процессора. Мой вопрос: почему это так?

Это дизайнерское решение.

Redis является однопоточным с epoll/kqueue и неограниченно масштабируется с точки зрения ввода-вывода concurrency. - @antirez (создатель Redis)

Причиной выбора подхода, управляемого событиями, является то, что синхронизация между потоками сопряжена с затратами как на программное обеспечение (сложность кода), так и на аппаратный уровень (переключение контекста). Добавьте к этому, что узким местом Redis обычно является сеть, а не процессор. С другой стороны, однопоточная архитектура имеет свои преимущества (например, гарантию атомарности).

Поэтому циклы событий кажутся хорошим дизайном для эффективной и масштабируемой системы, такой как Redis.

Кроме того, если да, то как мы можем 100% использовать ресурсы ЦП с помощью redis на многоядерных процессорах.

Redis подходит для масштабирования по нескольким ядрам sharding, в основном вместе с Twemproxy.

Однако, если по какой-то причине вы все еще хотите использовать многопоточный подход, посмотрите Thredis, но убедитесь, что вы понимаете последствия того, что его автор (например, вы не можете использовать его как мастер репликации).

Ответ 2

Сервер Redis - однопоточный. Но это позволяет достичь 100% -ного использования ресурсов ЦП с использованием узлов Redis (ведущий и/или ведомый).

  • Операции чтения можно масштабировать, используя конфигурацию master/slave Redis с одним ведущим. Один из ядер процессора, используемый для master node и всех остальных для ведомых устройств.

  • Операции записи можно масштабировать, используя конфигурацию кластера Redis multi-master. Несколько процессорных ядер, используемых для основных узлов и всех остальных для ведомых устройств.

Redisson - Redis based framework для Java обеспечивает полную поддержку кластера Redis. Работает с AWS Elasticache и Azure Redis Cache. Он включает в себя обнаружение ведущего/ведомого и обновление топологии.