@AlikDex

Разъяснения по работе RabbitMQ?

Начну с того, что не работал еще с ним. Но было желание попробовать. После чтения манов и нескольких уроков немного озадачился. И вот чем:
1) Получается, что на каждый тип задачи нужно создавать отдельный воркер, который запущен отдельно ото всех (причем запускать вручную\через крон). Т.е. если у нас штук 5 задач, то должно быть запущено 5 воркеров, верно? А если например сайтов 20 штук на сервере и каждый работает с задачами, то в итого в работе 100 воркеров, и каждый может зависнуть\крашнутся...

2) Не совсем понятно как разруливать ситуацию для нескольких сайтов на сервере в плане организации очередей и обменников. Т.е. запускать ли отдельный инстанс кролика для каждого сайта, либо использовать префиксы для наименований очередей\обменников.

3) может я вообще гоню, и эти очереди нужны тока на реальном хайлоаде для одного, много серверного приложения? Как бы есть несколько задач, которые неплохо было бы вынести в бекграунд, дабы страницы отдавались быстрее + делать пост обработку загруженных пользователем материалов. Но чет терзают смутные сомнения насчет этого кролика.
  • Вопрос задан
  • 251 просмотр
Решения вопроса 1
iqw
@iqw
Serior Software Engineer
1. Трактовка немного неверна, в кролике нету воркеров-задач, это из gearman. Там есть сообщения, обменники, очереди, консюмеры и продюсеры. Сообщения это не всегда задача, это может быть поток данных с другого приложения (не имеющего доступ к СУБД) для сохранения. В зависимости от технологий, которые Вы используете консюмеры выглядят немного по разному, например в php - действительно надо запускать каждый консюмер в 1 процессе (комманда), в java - можно запустить 1 процесс, который будет консюмить очередь и передавать сообщения в треды для обработки паралельно (вместо нескольких процессов). Разрулить ситуацию с поддержанием в запущенном состоянии нескольких комманд-консюмеров (в несколько процессов каждая) можно очень просто - supervisord. Это линуксовый софт, который конфигаеться на запуск определенной консольной команды и на количество ее инстансов, и следит за всеми. Выходит что у вас на каждый тип консюмера будет только по 1 supervisord конфигу, остальную работу по поддержанию в запущенном состоянии выполнит он. (Естесственно, если речь идет о пхп - надо хорошенько подебажить код консюмеров, чтобы избежать memory-leaks).

2. Зависит от мощностей сервера, нормальная практика - 1 реббит сервер для нескольких проектов, который позже сможет перерости в кластер (на определенных нагрузках), но и на машину с сайтами можно попробовать его насетапать и использовать как Вы и думали - с префиксами.

3. Очереди нужны там, где вы ощущаете что они помогут вам ускорить/стабилизировать приложение, пробуйте, экспериментируйте, и Вы увидите насколько хорошо кроль применим для Вашего типа задач.

P.S. Я только когда дописал ответ увидел что вопрос 2016 года, так что извините, если тема уже не актуальна)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы