【问题标题】:Support multiple socket connections with Erlang via Web支持通过 Web 与 Erlang 的多个套接字连接
【发布时间】:2016-12-04 07:34:50
【问题描述】:

假设我有一个开放的 API 应用程序可以通过网络连接到用户应用程序。现在,假设有 10.000 名用户使用他们的客户端应用程序连接到它。

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

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

【问题讨论】:

    标签: sockets nginx erlang


    【解决方案1】:

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

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

    必须根据您正在运行的硬件(例如工作进程和工作连接的数量)调整 Nginx 配置。您还必须配置 keep_alive 超时和缓存策略。启用压缩可能是有益的,但如果将其设置得太高,它可能会消耗过多的 CPU 周期。同样,它取决于硬件。

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

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

    请参阅post 以了解 Nginx 的调优。我无法评论 Apache 设置。

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

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

    【讨论】:

      猜你喜欢
      • 2016-03-10
      • 1970-01-01
      • 2018-08-09
      • 2019-06-22
      • 2010-12-01
      • 2019-03-19
      • 2020-08-14
      • 2010-11-17
      • 1970-01-01
      相关资源
      最近更新 更多