扩展Heroku和Node.js上的websockets

时间:2013-11-01 23:11:55

标签: node.js heroku websocket horizontal-scaling

假设我有一个大型应用程序在Heroku上处理有意义数量的websockets连接。为了应对如此大的需求,dynos的数量增加到N

Heroku的路由器如何在正在运行的dynos中分发新的传入websockets连接?

换句话说,如果其中一个dynos在websockets连接中被最大化,那么Heroku的路由器会将所有新传入的请求偏离其他(据称)不那么繁忙的dynos吗?或者它仍然会使用随机分配as stated in the documentation for http incoming connections

这肯定是有意义的,因为websockets连接是第一个实例中的http连接。但是,在N运行的dynos之间均匀地扩展大量持久连接会相当复杂。

有人确认吗?

2 个答案:

答案 0 :(得分:1)

您链接的页面显示“路由器使用随机选择算法在Web dynos上进行HTTP请求负载平衡。”这似乎毫不含糊。请注意,Heroku在这个问题上遇到了Rap Genius的问题,尽管它与旧的Bamboo堆栈有关。

通常,通过添加dynos,您应该能够避免任何一个dyno过载,因为websockets实际上并不为每个支持的其他连接使用额外的RAM。在最坏的情况下,较为繁忙的dynos应该会遭受更高的延迟。

答案 1 :(得分:0)

让我们假设您托管了N台服务器。

每个服务器都不知道其他服务器的存在。

因此,您需要以另一层方式部署服务器体系结构。这个额外的层可以管理将哪个请求发送到哪个服务器。

您可以使用nginx。 Nginx可以充当负载平衡器或反向代理。这可以帮助您将请求路由到服务器。您还可以配置将请求路由到特定服务器的方式和时间。