Мне нужно было знать, подходит ли система управления очередью laravel 5 для крупных проектов (около 100 000 пользователей). Я хочу каждый день делать что-то вроде сообщений (а не спама :)).
Является ли redis достаточно хорошим для этой работы (в очереди)? Или лучше использовать lib, специально предназначенный для очередей (например, beanstalkd)?Является ли система очереди laravel подходящей для больших проектов?
ответ
Чтобы быть справедливым и попытаться опубликовать разумный ответ на этот вопрос, мы должны рассмотреть следующие вопросы:
- Число абонентов
- Содержания быть доставлены
- системных ресурсов, необходимых для одновременные очереди
100 000 подписных электронных писем потребуют хранения 100 000 x [данных] в ОЗУ, поэтому позволяет усреднить длину адреса электронной почты до 32 символов (байт эс).
100000 х 32 байт = 3.2MB
Конечно, система очереди Laravel в serialises объекты, поэтому фактическое использование памяти, вероятно, будет выше (память Redis используется для очереди Laravel), но не достаточно, чтобы беспокоиться.
я советовал в прошлом, что, казалось бы, успешной установки для отправки Помеченные сообщения электронной почты будет работать на следующем: минимум
- 2GB RAM
- 2 процессоров/ядер
Система очередей Laravel работает не слишком с налогом на сервере. Как всегда, масштабируйте с требованиями.
Программное обеспечение для таких (с использованием Laravel) будет состоять из следующих действий:
- Redis
- Supervisor
Настройка Redis в качестве водителя очереди Laravel в. Не забудьте указать composer require predis/predis
.
Вам также потребуется создать миграцию для хранения неудавшихся заданий. Laravel имеет один встроенный по умолчанию:
php artisan queue:failed-table
php artisan migrate
После установки супервизора, создайте файл конф в /etc/supervisor/conf.d
так, что руководитель может подобрать по конфигурации для вашей очереди:
touch /etc/supervisor/conf.d/myprojectqueue.conf
nano /etc/supervisor/conf.d/myprojectqueue.conf
Здесь вы найдете конфигурацию, соответствующую вашей среде нт.В следующем демо создан, 4 бегунов очереди будут выполняться на очереди сразу:
[program:myprojectqueue]
command=php /path/to/project/artisan queue:listen --tries=1
directory=/path/to/project
stdout_logfile=/path/to/project/storage/logs/supervisord.log
redirect_stderr=true
autostart=true
autorestart=true
numprocs = 4
process_name = %(program_name)s%(process_num)s
Сохраните файл конф. Начать/перезапустить диспетчер.
Для получения дополнительной информации:
https://laravel.com/docs/master/queues
https://laravel.com/docs/master/queues#supervisor-configuration
Спасибо @ Justin. Это был полный и убедительный ответ. Я попробовал очередную очередь laravel с redis. И я тоже проверял коды ларавелла. Я понял, что laravel самостоятельно управляет очередью, а redis - только база данных с поддержкой. Я думаю, что это делает очередь медленнее. Просто хотел узнать, о чем я хочу, чтобы реализовать систему управления очередями, отделенную от моего основного проекта. Например, с использованием python (django) и сельдерея? Или с cpp и beanstalk? –
Почему провалить? Вы можете просто не отвечать, если вы ничего не знаете об этом. –