Redis stream 50k customer support parallel - требования к емкости

Каковы требования к емкости Redis для поддержки 50 тыс. Потребителей в одной группе потребителей для параллельного приема и обработки сообщений? Вам нужно протестировать инфраструктуру для того же сценария, и вам необходимо понять, что именно нужно.

1 ответ

Отказ от ответственности: я работал в компании, которая использовала Redis в довольно крупном масштабе (вероятно, меньше потребителей, чем ваш случай, но наши потребители были очень активны), однако я не был из команды инфраструктуры, но я участвовал в некоторых задачах DevOps.

Не думаю, что вы найдете точное число, поэтому постараюсь поделиться некоторыми советами и приемами, которые помогут вам:

  • Обязательно прочтите всю страницу администратора Redis. Там много полезной информации. Оттуда я выделю несколько советов:

    • Предполагая, что вы настроите хост Linux, отредактируйте /etc/sysctl.conf и установить высокий net.core.somaxconn(RabbitMQ предлагает4096). Проверьте документациюtcp-backlogconfig в redis.conf для объяснения этого.
    • Предполагая, что вы настроите хост Linux, отредактируйте /etc/sysctl.conf и установить vm.overcommit_memory = 1. Подробное объяснение читайте ниже.
    • Предполагая, что вы настроите хост Linux, отредактируйте /etc/sysctl.conf и установить fs.file-max. Это очень важно для вашего варианта использования. Предел открытых файловых дескрипторов / файловых дескрипторов - это, по сути, максимальное количество файловых дескрипторов (каждый клиент представляет файловый дескриптор), который может обрабатывать SO. Пожалуйста, проверьте документацию Redis по этому поводу. Документация RabbitMQ также содержит некоторую полезную информацию об этом.
    • Если вы отредактируете /etc/sysctl.conf файл, запустить sysctl -p перезагрузить его.
    • "Обязательно отключите функцию ядра Linux, прозрачные огромные страницы, это отрицательно повлияет как на использование памяти, так и на задержку. Это можно сделать с помощью следующей команды: echo never > /sys/kernel/mm/transparent_hugepage/enabled."Добавьте эту команду также в /etc/rc.local чтобы сделать его постоянным после перезагрузки.
  • По моему опыту, Redis не очень требователен к ресурсам, поэтому я считаю, что у вас не будет проблем с процессором. Память напрямую связана с тем, сколько данных вы собираетесь в ней хранить.

  • Если вы настраиваете сервер с большим количеством ядер, рассмотрите возможность использования более одного Redis Server. Redis (в основном) однопоточный и не будет использовать все ресурсы вашего процессора, если вы используете один экземпляр в многоядерной среде.

Сервер Redis также предупреждает о неправильных / рискованных конфигурациях при запуске (извините за старый образ):

Пояснение по поводу избыточной памяти (vm.overcommit_memory)

Установка overcommit_memory на 1 говорит Linux, что нужно расслабиться и выполнить форк более оптимистично, и это действительно то, что вы хотите для Redis [из Redis FAQ]

Есть три возможных настройки для vm.overcommit_memory.

  • 0 (ноль): проверьте, достаточно ли доступной памяти, и, если да, разрешите выделение. Если памяти недостаточно, отклоните запрос и верните ошибку в приложение.
  • 1 (один): разрешить выделение памяти сверх физической RAM плюс swap, как определено vm.overcommit_ratio. Вvm.overcommit_ratioПараметр - это процент, добавляемый к объему ОЗУ при принятии решения о том, сколько ядро ​​может переопределить. Например,vm.overcommit_ratio 50 и 1 ГБ ОЗУ означало бы, что ядро ​​позволит выделить до 1,5 ГБ, плюс swap, памяти до того, как запрос не будет выполнен.
  • 2 (два): эквивалент ядра "все ставки отключены", значение 2 указывает ядру всегда возвращать успех на запрос памяти приложения. Это так же странно и страшно, как кажется.
Другие вопросы по тегам