通过Web支持与Erlang的多个套接字连接



假设我有一个API应用程序,它可以通过web连接到用户应用程序。现在,比如说,有10000名用户通过他们的客户端应用程序连接到它。

我想知道,我如何管理10000个同时连接?我的意思是,我的系统中需要有10000个端口才能连接,比如1000-11000?

如果我使用nginx或apache作为反向代理,它将如何工作?

不,您不需要10000个端口。这个问题有点宽泛,因为我们不知道您的硬件配置。

如果您有多个服务器,则可以使用将代理连接的多个上游服务器相对轻松地完成此操作。在每台服务器上,您都将绑定到一个unix套接字,以减少连接的开销(因此您也不使用额外的端口)。

Nginx配置必须根据您运行的硬件(如工作进程和工作连接的数量)进行调整。您还必须配置keep_alive超时和缓存策略。启用压缩可能是有益的,但如果设置得太高,可能会消耗太多的CPU周期。再说一遍,它依赖于硬件。

另一件需要注意的事情是您的网关接口(例如wsgi、fcgi、uWSGI等)。这些接口也有需要调整的配置。理论上,这些连接接口可以各自绑定到自己的套接字,因此您可以模拟在一台服务器上拥有多个应用程序服务器。然而,这不会改善情况。

最后一条评论:如果您运行的是一台服务器,并且希望实现10000个并发连接,那么在大多数情况下,Nginx将能够处理流量。瓶颈出现在你的应用服务器上。很多时候它都无法处理负载。在这种情况下,请尝试优化您的代码库或获取另一台服务器(或升级硬件)。

请参阅这篇关于Nginx调谐的文章。我不能评论Apache的设置。

总之,如果使用unix套接字,那么传入连接只需要一个端口。如果你要代理连接到绑定在不同端口的应用服务器,你需要2个或更多。

免责声明:我不是专家,但我还是试着回答。

最新更新