Как ограничить отложенную работу, чтобы не разозлить Facebook API
Я создаю приложение, которое будет очень популярно на графике Facebook. Я узнал, что у них ограничение скорости 600 запросов каждые 600 секунд.
Я использую отложенную работу для всей моей фоновой обработки. Какой хороший способ запланировать отложенную работу, чтобы остаться ниже предела скорости fb api? Есть ли какие-то хитрости с отложенной работой или мне нужно создать отдельный процессор фоновых задач, чтобы не превышать мой предел скорости?
Спасибо
2 ответа
600 запросов каждые 600 секунд - 1 в секунду в среднем.
Не очень быстро!
1) В зависимости от размера и размера вашей компании, я бы посоветовался с FB, чтобы узнать, сможете ли вы повысить лимит для вас.
2) Вы можете придерживаться DelayedJob, не нужно заново изобретать колесо. Вам просто нужно изменить планировщик.
В моей установке DelayedJob я использую столбец "run_at" больше, чем просто для установки времени для повторного выполнения заданий - я также использую его как время для запуска задания в первую очередь. Вы также можете использовать его, чтобы ограничить вашу работу.
Изменено в файле DelayedJob job.rb:
# added run_at param
# eg Delayed::Job.enqueue NewsletterJob.new('lorem ipsum...'), 0,
# Delayed::Job.db_time_now + 15.minutes
def self.enqueue(object, priority = 0, run_at = nil)
unless object.respond_to?(:perform)
raise ArgumentError, 'Cannot enqueue items which do not respond to perform'
end
Job.create(:payload_object => object, :priority => priority,
:run_at => run_at)
end
Для вашей цели я бы отслеживал последний раз, когда вызов API FB ставился в очередь, и планировал следующий, чтобы он выполнялся - хотя бы на секунду больше.
Преимущество: вы сможете чередовать другие задачи, не относящиеся к FB, с вызовами API FB.
Немного позорный плагин, но вы можете попробовать SimpleWorker, облачную фоновую обработку / рабочую очередь для приложений Ruby. Вы можете запланировать одно или несколько заданий на выход из очереди и попадание в API FB, когда это необходимо. SimpleWorker выполняет все планирование и управление очередями, а обработка также выполняется в облаке.
Он построен именно для этого типа использования.
Предлагаем вам также проверить гем mini_fb для работы с FB (Appoxy является создателем и сопровождающим).
Дайте нам знать, если вам нужна помощь.
Кен @ SimpleWorker