一个Heroku dyno最多可以承载多少个websocket并发连接?
我在Cedar堆栈上使用Thin作为Web服务器,并使用Ruby框架。
您可以在单个dyno上维护大约6,000个打开的连接。
创建超过160个连接/秒将导致H11错误(积压太深)。
请查看此链接:
http://veldstra.org/2013/10/25/heroku-websocket-performance-test.html
我再次向支持团队询问(因为最新的回答是在2016年),并且得到了类似的答案:
每个dyno可创建WebSocket连接的数量没有硬性限制,正如你所提到的,限制是每个路由器50倍的连接数。给出一个确切的数字很复杂,因为可用路由器的数量不是静态的。我们有一个路由器层,其中包含许多机器,每个路由器可以跟踪您应用程序中每个Dyno的50个连接。不幸的是,我们不会发布活跃路由器的数量,因为这个数字会随着我们的平台对当前入站流量做出反应而变化。
1500至2000是一个相当不错的平均估计值,理论上的上限应该在4500左右。一旦您耗尽了并发连接数,您将开始从Heroku收到H11错误。如果您期望有成千上万的并发用户,我建议您不仅要增加WebSocket连接的数量,还要有多于1个dyno,因为水平扩展能够为您的应用程序增加一些弹性。
我从Heroku的支持团队得到了答复:
您好,我们的路由器可以接受50个并发请求,超过这个数量将会发送H11错误。这意味着每个dyno最多可以处理50个打开的WebSockets。如果您还有任何疑问,请告诉我们。
这也与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