【问题标题】:Recommendations on apache tuning for chat application聊天应用程序的 apache 调优建议
【发布时间】:2011-02-18 12:08:19
【问题描述】:

我有一个聊天应用程序 (xmpp / muc),它将由 apache 提供服务(我们以后可能会更改为 nginx,但现在不容易做到)。如果一个用户在 2 个房间中,他将有 2 到 4 个到服务器的活动连接(长轮询连接),所以如果我们每个房间有 200 个用户并且我们有 5 个房间,那么应该设置什么 ServerLimit、MaxClients到?例如,这些是默认值:

服务器限制 256

MaxClients 256

MaxRequestsPerChild 4000

谢谢,

【问题讨论】:

  • 您可以查看 mpm_event_module。它在 apache 2.2 中是实验性的,但它绝对可以帮助你。我不确定它是否支持 ssl。

标签: chat xmpp apache


【解决方案1】:

如果您使用 BOSH 之类的东西来建立 Web->XMPP 连接,则每个用户应该只有一个到 XMPP 服务器的连接。每个 MUC 房间活动都将以用户的 JID 作为目标发送到 XMPP 服务器,这将导致服务器将其发送到适当的 BOSH 连接。存在感也一样。

对 Apache 设置进行负载平衡所需的信息与对任何长轮询连接进行负载平衡相同 - XMPP 不会添加任何奇异的东西。 XMPP BOSH 连接是到您的 Web 服务器的长轮询连接,然后将其发送到到 XMPP 服务器的持久连接 - 导致每个用户连接打开 2 个套接字。

【讨论】:

    【解决方案2】:

    我猜这是一个 pre-fork Apache....

    如果您有 1000 个并发聊天连接,那么您至少需要 1000 个网络服务器(假设您也将提供静态内容,并且您说每个存在会导致 2 个连接 - 所以您可以将 1000 个加倍) - 256 的 ServerLimit/MaxClients 不会削减它,您可能需要大约 2200 来支持这一点(但没有硬指标很难给出准确的数字)。

    这是一个大得离谱的数额。为了支持这一点,我会寻找 3 个盒子,每个盒子在网络服务器启动之前都有大约 2Gb 的可用内存。

    MaxRequestsPerChild 并不是真正相关的,只是您想要一些流程周转,尤其是在您使用长轮询时。

    这是 COMET 不是一个好主意的原因之一。使用 AJAX 轮询会更有效率。假设这不是您可以更改的,您可能想看看使用内存效率略高的线程 Apache 网络服务器,

    C.

    【讨论】:

    • 很抱歉,只是因为 Apache 不能有效地处理 Comet,这并不是一个坏主意。它也不会使 AJAX 轮询更受欢迎,因为它会产生更多的数据库负载。到目前为止,让 1000 个客户端长轮询 2 分钟比每秒处理 1000 个请求(如果您想要实时)要高效得多。此外,如果您计算出它们每 5 秒才出现一次,那么您仍然可以得到 200 RPS!这给你带来了可怕的数据库负载!
    • 仅仅因为它不起作用就不是一个坏主意吗?真的吗?将产生更多的数据库负载”不 - 什么样的人会尝试通过数据库进行中继聊天?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 2011-07-10
    • 1970-01-01
    • 2016-03-19
    • 2015-06-14
    • 2023-04-07
    • 1970-01-01
    相关资源
    最近更新 更多