使用Rails控制器接受大量请求的正确方法是什么?

时间:2017-02-19 05:43:42

标签: ruby-on-rails ruby-on-rails-4

我的应用控制器接受来自第三方API(webhooks)的请求,但当它变为400 RPM时,我的网站出现故障(客户太多)。我该怎么办?

class CallbacksController < ApplicationController
def acceptor
    if params['type'] == 'confirmation' # this type is rare. only when client switches on callback
      group_setting = GroupSetting.find_by_callback_token(params[:callback_token])
      if group_setting
        group_setting.update_attribute(:use_callback, true)
        GroupSetting.new.callback_start(group_setting.group, group_setting.user)
        render text: group_setting.response_string
      else
        render text:'ok'
      end
    else
      CallbackWorker.perform_async(params[:callback_token], params['type'],
                                       params['group_id'], params['object'],
                                       params['secret'])
      render text:'ok'
    end
  end
end

1 个答案:

答案 0 :(得分:0)

在我看来,你有一个Web服务器线程瓶颈。你能指定你使用的服务器吗?你可以制作Apache Benchmark并发布结果吗?也许有关您的设置的更多信息可能有所帮助。

如果您使用的是WEBrick,我建议您尝试使用PUMA

我还建议您查看可与NGINX或Passenger轻松集成的Unicorn,以帮助您平衡请求的负载。