定期短轮询是否在服务器上扩展?
Does periodic short polling scale on the server?
我们正在开发一个站点,允许用户向其他用户发送半实时事件。 UI 将在用户有新事件时显示一个图标(非常标准的东西)。
我了解到定期短轮询的扩展性不如 websockets,因为它会给 Web 服务器带来更大的压力。我不太清楚为什么会这样?
我们正在使用 tomcat NIO(每个线程没有一对一的连接比率)。据我了解,Tomcat NIO 非常擅长用少量线程处理较长的 HTTP 连接超时。
因此,如果定期轮询时间小于连接超时,则轮询不必创建另一个 TCP 握手,因为它只会重用现有的 HTTP 1.1 连接。
因此,以上似乎不会对服务器造成太大的压力。它可能不像长轮询或 websockets 那样实时,但我不明白为什么它不应该扩展(假设服务器可以快速响应指示是否有新事件的响应——我们使用内存中的并发 hashmap,所以这应该非常快,不需要数据库访问)。
我错过了什么吗?
谢谢,
-亚当
短轮询可能不如长轮询和网络套接字那么流行,但它在任何地方都有效。
Trello(由与 SO 相同的一些人支持)通常使用网络套接字,但是当他们在发布当天的网络套接字实现中遇到严重错误时,他们通过短轮询得救了:
We hit a problem right after launch. Our WebSocket server implementation started behaving very strangely under the sudden and heavy real-world usage of launching at TechCrunch disrupt, and we were glad to be able to revert to plain polling and tune server performance by adjusting the active and idle polling intervals. It allowed us to degrade gracefully as we increased from 300 to 50,000 users in under a week. We’re back on WebSockets now, but having a working short-polling system still seems like a very prudent fallback.
完整的 story 非常值得一读。
我要特别强调,
- 使用HAProxy终止客户端连接。这意味着内部 Web 服务器免受缓慢和行为不端的客户端的影响,并且由于 HAProxy scalability/efficiency,重复创建连接的开销不再是一个问题;
- Trello 的轮询频率是可调的,这意味着在重负载下,他们可以告诉所有客户端降低轮询频率,从而以响应速度换取增加的容量。
至少在巴西有很多零售交易平台使用短轮询,以非常短的轮询间隔来快速发布股票价格,并定期支持数千个并发用户。
与长轮询和网络套接字不同,短轮询不需要持久连接,因此在中间使用 HAProxy 之类的东西,您的最大 "connections" 数量实际上可能大于支持的并发套接字数量您的硬件(尽管那时您可能会发现响应速度有所下降)。
我们正在开发一个站点,允许用户向其他用户发送半实时事件。 UI 将在用户有新事件时显示一个图标(非常标准的东西)。
我了解到定期短轮询的扩展性不如 websockets,因为它会给 Web 服务器带来更大的压力。我不太清楚为什么会这样?
我们正在使用 tomcat NIO(每个线程没有一对一的连接比率)。据我了解,Tomcat NIO 非常擅长用少量线程处理较长的 HTTP 连接超时。
因此,如果定期轮询时间小于连接超时,则轮询不必创建另一个 TCP 握手,因为它只会重用现有的 HTTP 1.1 连接。
因此,以上似乎不会对服务器造成太大的压力。它可能不像长轮询或 websockets 那样实时,但我不明白为什么它不应该扩展(假设服务器可以快速响应指示是否有新事件的响应——我们使用内存中的并发 hashmap,所以这应该非常快,不需要数据库访问)。
我错过了什么吗?
谢谢, -亚当
短轮询可能不如长轮询和网络套接字那么流行,但它在任何地方都有效。
Trello(由与 SO 相同的一些人支持)通常使用网络套接字,但是当他们在发布当天的网络套接字实现中遇到严重错误时,他们通过短轮询得救了:
We hit a problem right after launch. Our WebSocket server implementation started behaving very strangely under the sudden and heavy real-world usage of launching at TechCrunch disrupt, and we were glad to be able to revert to plain polling and tune server performance by adjusting the active and idle polling intervals. It allowed us to degrade gracefully as we increased from 300 to 50,000 users in under a week. We’re back on WebSockets now, but having a working short-polling system still seems like a very prudent fallback.
完整的 story 非常值得一读。
我要特别强调,
- 使用HAProxy终止客户端连接。这意味着内部 Web 服务器免受缓慢和行为不端的客户端的影响,并且由于 HAProxy scalability/efficiency,重复创建连接的开销不再是一个问题;
- Trello 的轮询频率是可调的,这意味着在重负载下,他们可以告诉所有客户端降低轮询频率,从而以响应速度换取增加的容量。
至少在巴西有很多零售交易平台使用短轮询,以非常短的轮询间隔来快速发布股票价格,并定期支持数千个并发用户。
与长轮询和网络套接字不同,短轮询不需要持久连接,因此在中间使用 HAProxy 之类的东西,您的最大 "connections" 数量实际上可能大于支持的并发套接字数量您的硬件(尽管那时您可能会发现响应速度有所下降)。