Как ограничить отложенную работу, чтобы не разозлить Facebook API - PullRequest
7 голосов
/ 05 мая 2011

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

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

Спасибо

Ответы [ 2 ]

3 голосов
/ 05 мая 2011

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.

2 голосов
/ 05 мая 2011

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

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

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

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

Кен@ SimpleWorker

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...