Команда инженеров AdminRemix использует Bull в сочетании с Hirefire, чтобы справиться с любой нагрузкой, которая может быть возложена на наших потребителей пользователями. И то, и другое хорошо сработало для нас, поскольку мы продолжаем масштабировать наше приложение на Heroku.

Настройка быка
Вы всегда можете узнать больше о Bull из его документации, но мы использовали упрощенный подход, задокументированный ниже в коде, и тот, который не ясен при просмотре официальной документации. Мы работали над этим решением после настройки основных примеров, описанных в разделе Начало работы, но вскоре обнаружили, что нам нужен более простой интерфейс с лучшей масштабируемостью.
Вы можете видеть из сути, что теперь у нас есть доступ для экспорта нашего объекта QUEUES, дающего доступ ко всем нашим очередям Bull в одном экспорте. Это очищает то, что нам нужно импортировать в другие файлы. Теперь нам просто нужно настроить наш основной рабочий метод-потребитель. Использование объекта QUEUES.
Мы разрешаем любому рабочему серверу брать задание из очереди, то есть, когда нагрузка позволяет запустить один сервер, он может обрабатывать любое количество заданий, а когда у нас одновременно работает 10/15 потребителей, мы можем быстро обрабатывать все задания в очереди. Единственным недостатком этого метода является то, что один продолжительный поток может заблокировать рабочий сервер. В настоящее время у нас нет этой проблемы, но если вы внедряете подобную стратегию, это следует учитывать.
Настройка Hirefire
Hirefire — это сервис SAAS, упрощающий автомасштабирование динамометров Heroku. Вы можете использовать API-интерфейс Heroku и написать этот код самостоятельно, но мы подписываемся под мантрой сосредоточения внимания на вашем основном продукте. Справочные документы для Hirefire оставляют желать лучшего при работе с nodejs. При настройке автоматического масштабирования рабочих серверов вам потребуется настроить конечную точку, которая будет возвращать массив сервера и количество элементов в его очереди. Мы используем простой фрагмент кода ниже. Вы можете использовать этот же метод, чтобы иметь несколько серверов worker и масштабировать их независимо.
Конечная точка возвращает общее количество quantity заданий, оставшихся на worker сервере. Если это число превысит то, что вы настроили, Hirefire автоматически масштабирует ваш worker сервер до заданного вами максимального числа.
Заключение
Если вы используете производственные серверы на Heroku и вам необходимо масштабировать потребителей, объединение Bull и Hirefire — это простое решение, позволяющее масштабировать вашу рабочую нагрузку в соответствии с любым спросом.