亿级连接应用:Jetty集群与Haproxy优化策略

需积分: 49 24 下载量 38 浏览量 更新于2024-08-24 收藏 1.92MB PPT 举报
本文档主要探讨了如何设计和实现第一版方案,以构建能够支持上千万HTTP长连接的应用。作者张乐伟与韩彰分享了他们的经验和策略,重点关注了硬件负载、软件负载均衡以及解决在高并发场景下遇到的挑战。 首先,硬件负载方面,文章提到了使用Jetty集群作为基础架构。Jetty是一款轻量级的Web服务器,集群化的目的是为了分散大量的连接请求,提高处理能力。同时,Haproxy被作为负载均衡器部署,它支持多种负载均衡算法,如轮询(RR)、最少连接(LeastConnection)、IP哈希(Iphash)、URI哈希(Urihash)和URL参数哈希(url_paramhash),以确保请求的高效分发。 文章特别强调了Session sticky策略,即通过设置session粘性,使得客户端的会话保持在特定的后端服务器上,这对于减少网络开销和提高性能至关重要。Haproxy还支持虚拟主机功能,以及一致性哈希算法,有助于保持请求的稳定路由。 然而,随着连接数量的增长,如达到Jetty支持的4万个连接以上,系统面临的主要瓶颈是连接数限制和内存管理。每30秒断开一次连接并重新建立会导致大量内存占用,特别是当这些连接主要在Old代内存区域时,由于全GC(Full Garbage Collection)的频繁发生,应用程序会遭受长时间暂停。为优化这个问题,作者提出了使用并发标记清除(Concurrent Mark-Sweep,CMS)垃圾回收策略,通过扩大年轻代(包括Eden、S0和S1区)来减少Old代的内存压力。 此外,文档中还提及了多页面交互的解决方案,如每个页面独立连接和Flash方案(如FlashDB和LocalConnection),以及通过轮询cookie来维护长连接状态。然而,这些方法并非所有浏览器都支持良好,尤其是对于HTML5和部分旧版本浏览器,兼容性是一个挑战。 这篇文档提供了构建大流量HTTP长连接应用的第一版方案,包括硬件选择、负载均衡策略和内存管理优化,同时也揭示了在实际应用中需要注意的问题和潜在挑战。这对于开发和运维人员理解和实现高性能、高并发的Web服务具有很高的参考价值。