构建支撑千万级Http长连接的应用实践

需积分: 49 24 下载量 101 浏览量 更新于2024-08-23 收藏 1.92MB PPT 举报
"本文主要探讨了如何构建支持上千万HTTP长连接的应用,涉及的技术包括Comet Long Pooling、Comet Streaming以及WebSocket,并分析了不同浏览器对这些技术的支持情况。此外,文章还提到了多页面交互的挑战,以及在实现过程中采用的硬件负载均衡解决方案如Jetty集群和Haproxy。在面临连接数、QPS(每秒查询率)和内存等性能瓶颈时,文章详细讨论了GC(垃圾收集)优化策略,特别是CMS并发GC的原理和调优方法。" HTTP长连接是网络通信中的一个重要概念,它允许客户端与服务器之间保持一个持久的连接,而不是每次请求都创建新的连接。这种技术能够显著减少TCP连接的建立和关闭带来的延迟,提高效率。文中提到了三种HTTP长连接的实现方式: 1. **Comet Long Pooling**:这是一种服务器推送技术,客户端向服务器发起请求后,服务器保持连接不关闭,直到有新的数据可发送时才返回响应。这种方式在某些浏览器支持较好,但可能受限于HTTP连接的超时设置。 2. **Comet Streaming**:与Long Polling类似,但服务器通过发送空格或换行符来保持连接开放,这样可以避免超时问题。然而,不是所有浏览器都支持此技术。 3. **WebSocket**:WebSocket是HTML5引入的一种标准,提供了全双工的通信通道,允许服务器和客户端双向传输数据,且浏览器支持度相对较高。但是,对于不支持WebSocket的旧版浏览器,需要考虑其他兼容性方案。 在多页面交互的场景下,由于每个页面可能需要独立的连接,这会带来连接管理的复杂性。文中提到使用Flash方案、轮询cookie等方式来解决这个问题。同时,为了应对高并发的挑战,采用了Jetty集群和Haproxy作为软件负载均衡器,实现连接的分发和处理。 Haproxy作为7层负载均衡器,提供了多种负载均衡策略,如轮询(RR)、最少连接(LeastConnection)、IP哈希(Iphash)、Urihash、url_paramhash和基于Session的粘滞会话(Sessionsticky),以及虚拟主机支持和一致性哈希。然而,随着连接数的增加,Jetty服务器和Haproxy都面临着性能瓶颈,特别是内存管理和垃圾收集的问题。 在面对内存瓶颈时,文章深入探讨了GC(垃圾收集)的优化,特别提到了CMS(Concurrent Mark-Sweep GC)并发垃圾收集器。虽然CMS可以减少应用程序暂停时间,但在高并发情况下,第一步和第三步的标记仍然可能导致较长的暂停。因此,优化策略包括扩大年轻代(Eden, S0, S1)的大小,确保对象不会快速晋升到老年代,从而减少Full GC的发生,降低应用暂停的影响。 构建支持上千万HTTP长连接的应用需要综合考虑技术选型、浏览器兼容性、负载均衡策略、性能优化及内存管理等多个方面,确保系统在高并发环境下稳定高效地运行。
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部