Redis Stream 50k поддержки потребителей параллельно - требования к емкости - PullRequest
0 голосов
/ 16 апреля 2020

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

1 Ответ

2 голосов
/ 19 апреля 2020

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

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

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

    • Предполагая, что вы настроите хост Linux, отредактируете /etc/sysctl.conf и установите высокий net.core.somaxconn ( RabbitMQ предлагает 4096). Обратитесь к документации конфигурации tcp-backlog в 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. Redis является (в основном) однопоточным и не будет использовать все ресурсы вашего ЦП, если вы используете один экземпляр в многоядерной среде.

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

Пояснение по памяти Overcommit (vm.overcommit_memory)

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

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

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