Задержка - это здорово, я рекомендую это от всей души.Добавьте драгоценный камень HireFire, чтобы сделать его еще лучше - этот драгоценный камень автоматически увеличивает число рабочих процессов при накоплении невыполненных заданий и отключает рабочих, когда не нужно выполнять никаких заданий.Однако, если вы используете HireFire, не планируйте выполнение заданий в будущем - просто ставьте их в очередь, когда вы хотите, чтобы они выполнялись, возможно, в грабли, выполняемой дополнением Heroku Cron.(HireFire не запустит рабочие процессы правильно, если вы попытаетесь запланировать задания на будущее.)
Вы можете настроить максимальное количество работников, которое будет использовать HireFire, и то, как оно добавляет работников в качестве невыполненного задания.рабочие места растет.Это позволяет очень легко масштабировать.Вам нужно будет выбрать подходящий «размер зерна» для ваших заданий очистки / разбора (сколько сотен или тысяч пользователей должно быть обработано за одно задание).Затем внутри задачи Cron разделите всех пользователей на группы соответствующего размера, поставьте в очередь фоновое задание для каждой группы и дайте HireFire запустить соответствующее количество рабочих процессов, чтобы быстро завершить все задания.
Этодо сих пор остается проблема минимизации затрат на динамочасНедавно я столкнулся с той же проблемой на сайте Rails, который я создавал ...
Сайт извлекает данные из различных веб-сервисов, используя delayed_job
фоновых рабочих.Я получил увеличение производительности почти в 10 раз для этого задания извлечения данных, запустив несколько HTTP-запросов параллельно, используя утилиту параллельного преобразования карт, которую я построил сам.
Я намерен еще немного поработать над этимВнедрение map-уменьшает, но если вы хотите использовать его сейчас, добро пожаловать: https://github.com/alexdowad/showcase/blob/master/ruby-threads/threads.rb
Чем выше ваше соотношение времени ожидания / обработки, тем больше вы выиграете.Дайте мне знать, если вам нужен пример кода фоновой работы, который использует эту утилиту.