Heroku上Websocket并发连接限制

11

一个Heroku dyno最多可以承载多少个websocket并发连接?

我在Cedar堆栈上使用Thin作为Web服务器,并使用Ruby框架。


取决于应用程序。 - Dávid Szabó
无论如何,Heroku路由器处理的同时请求数量都有一个上限。 - Alex Pinsky
4个回答

14

3

我再次向支持团队询问(因为最新的回答是在2016年),并且得到了类似的答案:

每个dyno可创建WebSocket连接的数量没有硬性限制,正如你所提到的,限制是每个路由器50倍的连接数。给出一个确切的数字很复杂,因为可用路由器的数量不是静态的。我们有一个路由器层,其中包含许多机器,每个路由器可以跟踪您应用程序中每个Dyno的50个连接。不幸的是,我们不会发布活跃路由器的数量,因为这个数字会随着我们的平台对当前入站流量做出反应而变化。

1500至2000是一个相当不错的平均估计值,理论上的上限应该在4500左右。一旦您耗尽了并发连接数,您将开始从Heroku收到H11错误。如果您期望有成千上万的并发用户,我建议您不仅要增加WebSocket连接的数量,还要有多于1个dyno,因为水平扩展能够为您的应用程序增加一些弹性。


2

我从Heroku的支持团队得到了答复:

您好,我们的路由器可以接受50个并发请求,超过这个数量将会发送H11错误。这意味着每个dyno最多可以处理50个打开的WebSockets。如果您还有任何疑问,请告诉我们。


4
这不对。我刚试了这个简单的应用程序:https://github.com/heroku-examples/ruby-ws-test,用它打开了250个选项卡(每个选项卡将在heroku日志中显示WebSocket连接已打开并保持打开状态),没有出现H11错误。希望能找到更好的方法来确定极限,但肯定比50多。 - diegopau
我已经取消了答案的接受。如果你找到真实的数字,请分享。 - Alex Pinsky
4
免费的 dyno 层资源没有限制。就同时连接而言,每个 Heroku 路由器实例存在一个理论极限,即50个连接,但我们目前不公布任何时候正在运行的路由器实例数量。一般来说,对于欧盟地区,您可以预计在任何给定时间有约1500个连接可用。后来他澄清了,这个限制适用于所有 dyno 类型,即使是付费的。 - Sourav Ghosh

0

这也与2021年Heroku文档相关:

请求并发性

每个路由器都维护一个内部的应用程序请求计数器。在Common Runtime上,路由器限制每个应用程序的并发请求数。但是,路由器之间没有协调,因此此请求限制是每个路由器的限制。每个路由器上的请求计数器最大大小为200n(其中n =您的应用程序运行的Web Dynos数量)。如果特定路由器上的请求计数器填满,则对该路由器的后续请求将立即返回H11(Backlog too deep)响应。

https://devcenter.heroku.com/articles/http-routing#request-concurrency

另请参阅:https://devcenter.heroku.com/articles/http-routing#simultaneous-connections


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接