Как ограничить отложенную работу, чтобы не разозлить 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

Другие вопросы по тегам