【发布时间】:2016-12-04 07:34:50
【问题描述】:
假设我有一个开放的 API 应用程序可以通过网络连接到用户应用程序。现在,假设有 10.000 名用户使用他们的客户端应用程序连接到它。
我想知道,如何管理 10000 个同时连接?我的意思是,我的系统中是否需要有 10000 个端口才能连接,例如 1000-11000?
如果我使用 nginx 或 apache 作为反向代理,它将如何工作?
【问题讨论】:
假设我有一个开放的 API 应用程序可以通过网络连接到用户应用程序。现在,假设有 10.000 名用户使用他们的客户端应用程序连接到它。
我想知道,如何管理 10000 个同时连接?我的意思是,我的系统中是否需要有 10000 个端口才能连接,例如 1000-11000?
如果我使用 nginx 或 apache 作为反向代理,它将如何工作?
【问题讨论】:
不,您不需要 10000 个端口。这个问题有点笼统,因为我们不知道您的硬件配置。
如果您有多个服务器,则可以使用您将代理连接的多个上游服务器相对轻松地完成此操作。在这些服务器中的每一个上,您都将绑定到一个 unix 套接字以减少连接的开销(因此您也不会使用额外的端口)。
必须根据您正在运行的硬件(例如工作进程和工作连接的数量)调整 Nginx 配置。您还必须配置 keep_alive 超时和缓存策略。启用压缩可能是有益的,但如果将其设置得太高,它可能会消耗过多的 CPU 周期。同样,它取决于硬件。
要注意的另一件事是您的网关接口(例如 wsgi、fcgi、uWSGI 等)。这些也有需要调整的配置。理论上,这些连接接口都可以绑定到自己的套接字,因此您可以模拟在单个服务器上拥有多个应用程序服务器。但是,这不会改善这种情况。
最后一条评论: 如果你在运行单个服务器并且想要达到 10000 个并发连接,Nginx 将能够在大多数情况下处理流量。瓶颈出现在您的应用服务器上。很多时候它无法处理负载。在这种情况下,请尝试优化您的代码库或购买另一台服务器(或升级硬件)。
请参阅post 以了解 Nginx 的调优。我无法评论 Apache 设置。
总之,如果您使用的是 unix 套接字,则传入连接只需要一个端口。如果您要将连接代理到绑定在不同端口上的应用服务器,则需要 2 个或更多。
免责声明: 我不是专家,但我还是尝试回答。
【讨论】: