Одновременные HTTP-запросы от одного работника Sidekiq? - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь взаимодействовать с Google Calendar API. Мои тесты пока показывают время отклика 5-10 секунд для вставки одного события, и мне может понадобиться экспортировать тысячи событий одновременно [не спрашивать] . Похоже, что это спам из моих очередей на неоправданное количество времени. (95% текущих заданий в этом приложении завершаются через <300 мс, поэтому это затруднит правильное распределение ресурсов.) </p>

В настоящее время я использую Фарадей в этом приложении для вызова других, более быстрых API Google. Вики Фарадея предлагает использовать Typhoeus для параллельных HTTP-запросов; однако использование Typhoeus с Sidekiq было признано «плохой идеей» по состоянию на 2014 год.

Тайфой все еще плохая идея? Если да, то разумно ли создавать N потоков в работнике Sidekiq, делать HTTP-запрос в каждом потоке, а затем ждать, пока все потоки не присоединятся? Есть ли какой-то другой способ выполнить эту чрезвычайно связанную задачу ввода-вывода, не бросая больше рабочих на проблему? Должен ли я попросить моего менеджера увеличить наши расходы на Sidekiq Enterprise? ;) Или я должен просто бросить эти задания в очередь с низким приоритетом и сказать нашим пользователям со смешными привычками, что им просто придется подождать?

1 Ответ

0 голосов
/ 14 мая 2018

Разумно использовать потоки внутри потоков заданий Sidekiq.Не имеет смысла создавать собственную инфраструктуру потоков.Вы можете использовать многоразовый пул потоков с гемами concurrent-ruby или parallel, вы можете использовать http-клиент, который является потокобезопасным и допускает параллельные запросы, и т. Д. HTTP.rb - это хороший вариант от Tony Arcieri, но простая старая сеть/ http тоже будет работать:

https://github.com/httprb/http/wiki/Thread-Safety

Просто помните, что есть несколько сложностей: задание может быть повторено, как вы обрабатываете ошибки, возникающие у HTTP-клиента?Если вы не разделяете эти запросы один на один с заданиями, вам может потребоваться отследить каждое из них, или идемпотентность станет проблемой.

И вы всегда можете увеличить количество потоков в Sidekiq Enterprise.: -D

...