构建支撑千万级HTTP长连接的应用实践
需积分: 49 21 浏览量
更新于2024-08-24
收藏 1.92MB PPT 举报
"本文主要探讨了如何构建支持上千万HTTP长连接的应用,涉及技术包括Comet、Long Pooling、Streaming和WebSocket。文章作者通过分析Web旺旺的实现,阐述了在处理大规模长连接时遇到的问题及解决方案,如硬件负载均衡、软件负载均衡策略以及GC优化等。"
在构建支持上千万HTTP长连接的应用时,首先需要理解HTTP长连接的几种实现方式。Comet技术是一种服务器推送技术,它允许服务器主动向客户端发送数据,而不是等待客户端发起新的请求。这通常通过Long Pooling(长轮询)和Streaming(流式传输)来实现。Long Pooling是客户端保持一个打开的HTTP连接,直到服务器有新数据时才返回响应;Streaming则是在连接保持打开状态期间,服务器不断发送数据到客户端。
WebSocket是HTML5引入的一种协议,它提供了一种双向通信机制,允许服务器和客户端进行全双工通信,从而更高效地处理长连接。然而,WebSocket的兼容性问题需要考虑,因为不是所有浏览器都支持。
在实现大规模长连接服务时,通常会遇到负载均衡问题。文章中提到了Jetty集群配合Haproxy进行负载分发。Haproxy作为7层负载均衡器,可以基于多种策略分配请求,如轮询(RR)、最少连接(LeastConnection)、IP哈希(Iphash)、Urihash、url_paramhash、Head(“name”)和Session sticky等。Session sticky策略有助于维持用户会话的连续性,避免因请求分配到不同服务器导致的会话丢失。
硬件负载均衡方面,文章提到了LVS(Linux Virtual Server),它作为4层负载均衡器,处理网络四层的TCP/UDP报文。同时,文章指出,连接数、QPS(每秒查询率)和内存是系统性能的主要瓶颈。例如,Jetty服务器可能支持超过4万个连接,但每秒处理的请求量和内存使用情况也需考虑。在大量连接下,内存管理成为关键,尤其是垃圾回收(GC)问题。
针对GC优化,文章提到使用CMS(Concurrent Mark-Sweep GC)并发标记清除算法,尽管它可以减少停顿时间,但在某些阶段仍需要暂停应用,这可能导致性能下降。因此,调整堆内存分配,如增大Eden、S0和S1区域,避免数据进入Old区,可以有效减轻GC压力并减少Full GC的发生,从而提高应用的稳定性和响应速度。
构建支持大量HTTP长连接的应用需要综合考虑技术选择、负载均衡策略和性能优化,特别是在内存管理和垃圾回收方面,以确保服务的高可用性和高性能。
2019-04-21 上传
160 浏览量
484 浏览量
104 浏览量
2024-05-23 上传
274 浏览量
2021-05-22 上传
点击了解资源详情
韩大人的指尖记录
- 粉丝: 33
- 资源: 2万+
最新资源
- git-sizer:为Git存储库计算各种大小指标,并标记可能导致问题的指标
- 电影评论
- Right-Click Search IMDb-crx插件
- 易语言超级列表框首字母排序
- a-A-Homewoks
- Varnish-Directadmin:Directadmin 的清漆缓存
- Eco Search-crx插件
- 易语言超级列表框选择多项内容
- 新建文件夹_海洋_motherw78_海图
- Burst Search-crx插件
- rpush:从任何子reddit向专用的Pushbullet频道发送近乎实时的更新
- 培训项目:仅用于培训
- dtmoney
- 基于戴维南模型_扩展卡尔曼_SOC估算_soc卡尔曼_soc卡尔曼_电池SOC估算_电池SOC_SOC估算
- xcode-git-cfbundleversion:使用短的 Git 修订字符串更新 Info.plist 文件中的 CFBundleVersion
- express-swagger-example:用于演示Express API文档的示例项目