Как ограничить отложенную работу, чтобы не злить API Facebook

Я создаю приложение, которое будет много работать с API-интерфейсом Facebook. Я узнал, что у них есть ограничение скорости 600 запросов каждые 600 секунд.

Я использую отложенную работу для всей фоновой обработки. Каков хороший способ запланировать отложенную работу, чтобы оставаться в рамках ограничения скорости fb api? Есть ли какие-то хитрости с отложенной работой или мне нужно создать отдельный процессор фоновых задач, чтобы не превысить лимит скорости?

Спасибо


person AnApprentice    schedule 05.05.2011    source источник
comment
Если ответ решил ваш вопрос, не забудьте принять его, установив флажок рядом с ответом.   -  person Larry K    schedule 15.08.2011
comment
Я создаю приложение, которое будет много работать с API-интерфейсом Facebook. Я узнал, что у них есть ограничение скорости 600 запросов каждые 600 секунд. Откуда вы взяли эту информацию и насколько она достоверна? Большое спасибо, Уэс   -  person Wes Gamble    schedule 13.09.2011


Ответы (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 был поставлен в очередь, и планировал следующий запуск run_at как минимум на секунду больше.

Преимущество: вы сможете чередовать другие задачи, не относящиеся к FB, с вызовами API FB.

person Larry K    schedule 05.05.2011

Немного бессовестный плагин, но вы можете попробовать SimpleWorker, облачную фоновую обработку / рабочую очередь для приложений Ruby. Вы можете запланировать одно или несколько заданий, чтобы выйти из очереди и использовать API FB, когда вам нужно. Все планирование и управление очередями осуществляется SimpleWorker, а обработка также выполняется в облаке.

Он создан именно для такого типа использования.

Предлагаем вам также проверить гем mini_fb для работы с FB (Appoxy является создателем и сопровождающим).

Дайте нам знать, если вам нужна помощь.

Кен @ SimpleWorker

person frommww    schedule 05.05.2011