Redis stream 50k customer support parallel - требования к емкости
Каковы требования к емкости Redis для поддержки 50 тыс. Потребителей в одной группе потребителей для параллельного приема и обработки сообщений? Вам нужно протестировать инфраструктуру для того же сценария, и вам необходимо понять, что именно нужно.
1 ответ
Отказ от ответственности: я работал в компании, которая использовала Redis в довольно крупном масштабе (вероятно, меньше потребителей, чем ваш случай, но наши потребители были очень активны), однако я не был из команды инфраструктуры, но я участвовал в некоторых задачах DevOps.
Не думаю, что вы найдете точное число, поэтому постараюсь поделиться некоторыми советами и приемами, которые помогут вам:
Обязательно прочтите всю страницу администратора Redis. Там много полезной информации. Оттуда я выделю несколько советов:
- Предполагая, что вы настроите хост Linux, отредактируйте
/etc/sysctl.conf
и установить высокийnet.core.somaxconn
(RabbitMQ предлагает4096
). Проверьте документациюtcp-backlog
config в 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
чтобы сделать его постоянным после перезагрузки.
- Предполагая, что вы настроите хост Linux, отредактируйте
По моему опыту, 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 указывает ядру всегда возвращать успех на запрос памяти приложения. Это так же странно и страшно, как кажется.