首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >美洲豹能同时缓冲多少请求?

美洲豹能同时缓冲多少请求?
EN

Stack Overflow用户
提问于 2018-03-20 22:43:30
回答 1查看 2.1K关注 0票数 3

我理解Puma相对于其他Rails web服务器的一个好处是它如何处理慢客户端。虽然美洲狮服务器接收和下载(可能比较慢)请求,但它仍然可以接收和下载其他请求,这些请求可能下载得更快,并在慢请求完成之前传递给工作人员处理。

但我找不到任何信息,如果有的话,有什么限制这一点。

可以同时下载任意数量的请求吗?如果同时收到1000个慢请求,那么第1001次请求会不会首先到达一个美洲豹工人,前提是它不是慢请求?

我想我通常感兴趣的是多个慢请求对其他请求的影响,包括彼此之间的影响--因为我正在开发一个可能涉及大量“慢请求”(通过3G从手机上传图像)的应用程序。

这篇伟大的文章 by @nate-berkopec原则上帮助解释了Puma如何帮助处理慢客户端:“那么,在集群模式下,Puma可以处理慢请求(这要感谢一个单独的主进程,其职责是下载请求并传递它们).”任何更多的光明,任何人都可以离开将是非常欢迎的。

EN

回答 1

Stack Overflow用户

发布于 2018-03-22 19:01:48

有许多考虑因素,例如IO轮询系统、内存和并发问题。

IO投票系统

编辑(2020年9月9日):到目前为止,Puma服务器正在nio4r上运行,不应该再受制于select系统调用的限制(其中文件描述符值限制在1023)。

据我所知,美洲狮使用select系统调用(与碘或乘客不同,后者也保护您不受慢客户端的影响,但使用kqueueepoll)。

select系统调用在大多数系统上是有限的(通常高达1024个客户机/ maxfd)。我认为这会造成一个限制。

但是,我知道Puma正在努力用既可移植又有效的东西来替换select系统调用(比如利用nio4r gem)。

我不知道这是否已经实现了,但它将打破这一限制,并可能提高性能。

内存

慢客户机仍然消耗内存,因为它们缓慢地用头数据填充缓冲区,或者缓慢地下载已发送的缓冲数据(将缓冲区保存在内存中直到下载完成为止)。

内存限制总是会增加限制,以减缓客户端的处理。

一些限制可以提升,例如使用X发送静态文件(支持碘,以及当Puma或乘客在nginx下运行时).但这并不是你能解决的问题。

并发性

Puma在Ruby的GIL (全局指令锁)中处理慢客户端。这意味着在Puma处理慢速客户端时,其他线程/指令都无法执行。

这通常不是问题,但是足够多的慢客户端会增加上下文切换和系统调用的成本。这可能会(潜在地)大大降低服务器的速度。

乘客和碘在GIL之外执行缓慢的客户端缓冲,允许这些系统调用真正并发(当多个CPU核可用时)。

这将缓解这一问题,但不能完全解决这个问题。

结论和注意事项

最大的问题通常是IO投票系统。这方面的解决方案在Puma的路线图上(也许已经实现了,我不确定)。

其他问题(内存限制和并发限制)相对来说不太重要,但如果不使用语言扩展(碘服务器用C编写,客运用C++编写),就不能减轻这些问题。

由于Puma (目前)不需要任何语言扩展(除了它在C和Java中集成的HTTP解析器),这些问题仍然存在。

我应该指出,我是碘HTTP/Websocket服务器的作者,所以我有点偏颇。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49395334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档