【问题标题】:Does periodic short polling scale on the server?定期短轮询是否会在服务器上扩展?
【发布时间】:2016-03-25 05:44:33
【问题描述】:

我们正在开发一个允许用户向其他用户发送半实时事件的网站。当用户有新事件时,UI 将显示一个图标(非常标准的东西)。

我已经读到定期短轮询的扩展性不如 websockets,因为它给 web 服务器带来了更大的压力。我不太清楚为什么会这样?

我们使用的是 tomcat NIO(它没有每个线程的一对一连接比率)。据我了解,Tomcat NIO 非常擅长用少量线程处理较长的 HTTP 连接超时。

因此,如果定期轮询时间小于连接超时,则轮询不应创建另一个 TCP 握手,因为它只会重用现有的 HTTP 1.1 连接。

因此,上述内容似乎不会对服务器造成太大压力。它可能不像长轮询或 websocket 那样实时,但我不明白为什么它不应该扩展(假设服务器可以快速响应指示是否有新事件的响应——我们使用内存中的并发哈希图,所以这应该很快,不需要访问数据库)。

我错过了什么吗?

谢谢, -亚当

【问题讨论】:

    标签: java ajax tomcat comet


    【解决方案1】:

    短轮询可能不像长轮询和网络套接字那样流行,但它在任何地方都可以使用。

    Trello(由一些与 SO 相同的人支持)通常使用 Web 套接字,但当他们在发布当天在其 Web 套接字实现中遇到严重错误时,他们通过短轮询保存:

    我们在发布后立即遇到了问题。我们的 WebSocket 服务器实现在 TechCrunch 中断的突然和大量实际使用中开始表现得非常奇怪,我们很高兴能够通过调整活动和空闲轮询间隔恢复到普通轮询并调整服务器性能。它使我们能够在一周内从 300 名用户增加到 50,000 名用户时优雅地降级。我们现在又回到了 WebSockets,但拥有一个有效的短轮询系统似乎仍然是一个非常谨慎的后备方案。

    完整的story 非常值得一读。

    我要特别强调,

    1. 使用 HAProxy 终止客户端连接。这意味着内部 Web 服务器可以免受缓慢和行为不端的客户端的影响,并且由于 HAProxy 的可扩展性/效率,重复创建连接的开销不再是问题;
    2. Trello 的轮询频率是可调整的,这意味着在负载较重的情况下,他们可以告诉所有客户端减少轮询频率,从而用响应能力来提高容量。

    至少在巴西有很多零售交易平台使用短轮询,轮询间隔非常短,可以快速发布股票价格,并定期支持数千个并发用户。

    与长轮询和 Web 套接字不同,短轮询不需要持久连接,因此中间使用 HAProxy 之类的东西,您的最大“连接”数实际上可能大于硬件支持的并发套接字数(尽管那时您可能会看到响应能力有所下降)。

    【讨论】:

    • 这是否意味着使用强大的服务器,短轮询将能够处理多达 50,000 个用户?
    • 对于 50k 用户,您可能会使用 3-5 台服务器,但这实际上取决于您的硬件和代码。
    • 你能检查我的问题并帮助我做一个近似值。谢谢 :) stackoverflow.com/questions/43314203/…
    • @almostabeginner 我写了 3-5 个服务器,假设你想要近乎实时的更新(比如每 250 毫秒)。我看到了你的问题,但在我回答之前它被删除了。如果您仅每 20 秒更新一次,那么您可以使用 1 台服务器。我见过 1 台服务器支持 10k+ 用户,每 250 毫秒更新一次。重要的是,在您调用 poll 时运行的代码速度很快(理想情况下,只检查内存。您可以有一个后台进程或 pub-sub 使该内存保持最新)。
    • 有人否决了我的问题,因为它太宽泛了。无论如何,这个答案对我来说真的很清楚,谢谢。
    猜你喜欢
    • 2014-08-24
    • 2012-07-31
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 2018-12-30
    • 2011-06-03
    相关资源
    最近更新 更多