构建支撑千万级Http长连接的应用实践
需积分: 49 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长连接的应用需要综合考虑技术选型、浏览器兼容性、负载均衡策略、性能优化及内存管理等多个方面,确保系统在高并发环境下稳定高效地运行。
点击了解资源详情
172 浏览量
357 浏览量
172 浏览量
2019-04-21 上传
498 浏览量
113 浏览量
197 浏览量

鲁严波
- 粉丝: 27

最新资源
- 掌握MasterPage母版页技巧,提升Web开发效率
- BBSGood论坛美化商业版功能升级详解
- 迷宫发电机:内置相位器的电平发生器探索
- 华中科技大学数据库课设:图书管理系统设计与实现
- VC++实现SEGY地震数据格式文件读取
- 生成SQLserver存储过程访问的C#代码方法二
- 基于eureca.io实现的Phaser CS222-Starstruck多人游戏
- Arduino红外遥控教程:IRremote文件的使用
- WRK Visual Studio 2008项目文件教程:编译与学习指南
- 提升效率的5k6涂鸦天堂2005版本解析
- 轻松制作Gif动画:使用Gif图片编辑软件
- CS监听模式中的ReceiveCallBack函数详解与应用
- Phaser游戏开发:Webpack+Babel样板快速入门指南
- 深入解析Visual C++ 2008 Feature Pack的运行时组件
- KeeSkySystem v1.0 Alpha:新一代安全便捷BLOG系统
- C#代码自动生成SQLserver存储过程访问