我正在尝试扩展app服务器来处理每分钟20,000多个请求。

当我压力测试请求时,大多数请求都很容易处理20,000 rpm或更多。

但是,需要进行外部HTTP请求(例如,Facebook登录)的请求将服务器降至爬行(3,000 rpm)。

我在概念上了解我当前环境的限制 - 3个负载平衡服务器,每个服务器只有4个独角兽工作者只能在一次执行12个请求,即使它们都在等待HTTP请求。

我的选择更好的是什么?我想立刻处理更多的连接。

可能的解决方案,因为我理解它:

  1. 蛮力:使用更多的独角兽工作者(即更多RAM)和更多服务器。

  2. 将所有阻塞操作推入背景/工人流程以释放Web进程。客户需要定期调查,以查找他们的请求完成后。

  3. 移动到puma而不是独角兽(可能是从mri的rubinius),这样我就可以使用线程而不是进程 - 哪些可能(??)提高每个连接的内存使用情况,因此允许数量工人增加。

  4. 从根本上说,我正在寻找的是:有没有更好的方法来增加一个封锁/排队请求的单个工作者可以处理的方法,这样我可以增加每个服务器的连接数?

    例如,我听说讨论使用enfumachine使用薄。这是否可以打开可以放下它目前正在处理的Web请求的Rails工作者的可能性(因为那个是在外部服务器上等待),然后在它等待时拾取另一个请求?如果是这样,与独角兽和彪马相比,这是一个值得追求性能的途径吗? (它是否强烈依赖于应用程序的运行时活动?)

有帮助吗?

解决方案

Unicorn是一个单线程,多过程同步应用程序服务器。这类处理并不是一个很好的匹配。

听起来您的应用程序是I / O绑定。这争论以活动为导向的守护程序来处理您的请求。

我建议尝试eventMachine和EM-HTTP-Request和 Em-http-server

这将允许您使用异步向HTTP服务器和传出HTTP服务调用的传入请求。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top