Я пытаюсь укрепить свое понимание того, что означает blocking
с точки зрения запросов к веб-серверу и когда разумно передавать запросы отдельному работнику (например, sidekiq).
Рассмотрим следующие примеры:
Войти с Facebook
def sign_in response = Faraday.get("https://graph.facebook.com/me?fields=id,email&access_token=#{some_token}") user_info = JSON.parse(response.body) @user = User.find_by(uid: user_info["id"]) ... end
Отправить push-уведомление через Google Firebase
def send_push_notification ... fcm = FCM.new(FCM_KEY) registration_ids = [recipient_token] resp = fcm.send(registration_ids, data: {body: notification_params[:body]}) ... end
В обоих примерах веб-запросы к сторонней службе являются синхронными и, возможно, дорогостоящими. Интуитивно я бы попытался обработать эти случаи с помощью отдельного работника, потому что они блокируют основное приложение. Но я не уверен на 100 %, что означает блокировка. Означает ли это, что когда 100 пользователей пытаются sign_in
и каждый вызов Faraday.get
занимает 1 секунду, всем пользователям потребуется 100 секунд для входа в систему?