基于JSESSION
基于JSESSION 摘 要:该文研究在运营商营业web服务器的特殊前提下,以负载均衡最优 化为需求,以F5负载均摊服务器为研究平台,分析常用的轮循、权重轮循、响应 速度、连接数、处理能力五种负载均衡算法在这种特殊需求下的表现,找到实用 性较强的处理能力均衡算法。最终打破负载均衡固有思维,在以IP地址为单位的 均衡算法之外,提出了以JSESSION_ID为单位的新的负载均衡算法—— JSESSION_ID算法。该算法在F5负载均衡服务器性能强大的情况下,表现远远优 于任何算法。中图分类号:TP368 文献标识码:A 文章编号:1672-3791(2014)12(a) -0011-02 目前各电信运营商营业网点的数量星罗棋布,提供的服务越来越多样化。BS 架构的web页面登陆方式以其对终端要求低、无需安装维护客户端、操作界面友 好,成为主流的营业服务系统基础架构。合理利用web服务器,必须用到负载均 衡算法。
1 负载均衡算法在电信运营商营业系统中的意义 负载均衡(LB Load Balance)建立在现有网络结构之上。它提供了一种廉 价有效透明的方法,扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据 处理能力、提高网络的灵活性和可用性。
营业web服务一般采用本地负载均衡(Local LB)。这种方案能有效地解决 数据流量过大、网络负荷过重的问题,并且即使是服务器扩充升级,也只是简单 地增加一个新的服务器到服务群中,而不需改变现有网络结构、停止现有服务。
2 五种常用的LB算法在实际应用中的表现与选择 在实际的应用过程中,选择适合的LB算法有利于web服务器合理利用。
2.1 LB算法的基本原则 会话保持策略。即:访问终端在一定时间(可在LB服务器上设定)内再次访 问的情况下,会优先于LB算法,将访问终端直接指向上次访问的web服务器。
2.2 营业web服务与网站web的差异(1)服务器承载内容高度统一。营业web服务承载内容相对稳定,且内容高 度一致,多服务器的目的仅是承载大量终端的访问及数据交互。
(2)服务器面向人群相对固定。营业web服务仅允许营业人员通过固定终端 进行访问,持续登录,对“会话保持”的要求较高。
(3)数据传输量大且集中。营业web提供的业务受理和查询的功能。每台访 问终端在短时间内瞬时产生大量的数据传输和链接请求。
2.3 各LB算法在营业web服务使用中的情况 (1)轮循均衡(Round Robin):将来自网络的请求,从1至N循环分配给服 务器组的服务器(N为服务器数量)。RR算法为最基本的均衡算法。
(2)权重轮循均衡(Weighted RR):在RR算法的基础上,根据服务器的不 同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请 求。WRR算法能确保高性能的服务器得到更高的使用率,避免低性能的服务器负 载过重。
(3)响应速度均衡(Response Time):LB设备对内部各营业web服务器发 出一个探测请求(例如登陆页面检测),根据响应时间来决定服务器响应客户端 服务请求的顺序。
(4)最少连接数均衡(Least Connection):该算法根据当前该服务器正 在处理的连接数量,把新请求分配给连接数最少的服务器。这种算法以一个瞬时 值作为分配标准,显然不是一个好的选择。
(5)处理能力均衡(Predictive Observed):此种均衡算法将把服务请求 分配给内部处理负荷(根据服务器CPU型号、CPU数量、内存大小及当前连接数等 换算而成)最轻的服务器。
由于考虑到了内部服务器的处理能力及当前网络运行状况,所以PO算法相对 来说更加精确。这种算法是最常用的,也是最有效率的。
3 提出新的LB算法——JSESSION_ID算法。
在实际工作中,我们发现了仅依靠以上五种算法无法完美解决问题。如当web 服务器不稳定,发生宕机,重新启动后,根据“会话保持”原则,目前的LB算法较难将负载压力分配到重启后的服务器上来。
3.1 JSESSION_ID算法的提出 根据每个web服务器的终端页面有一个单独的JSESSION_ID,我们尝试使用它 作为访问的唯一特征值,取代原来的IP地址,我们称之为“JSESSION_ID算法”, 期望可以解决以上问题。同一IP的营业终端发起的链接,每个页面发起链接访问 的JSESSION_ID是不同的,因此每个链接可作为独立的访问被分配,也就是说:
(1)同一终端打开的多个页面,有可能被分配到不同web服务器上。而不是 集中到同一web服务器上,对一台服务器施加压力。
(2)由于每次新打开页面的JSESSION_ID都是重新生成的,所以不会受到“会 话保持”原则的影响,按照目前各web服务器链接数量平均分配链接访问压力, 对上面提到的宕机重启的web服务器会在最短时间内分配合适数量的链接,达到 负载均衡的目的。
3.2 JSESSION_ID算法代码 在F5负载均衡服务器上试编写算法如下:
when HTTP_REQUEST { if{[HTTP::cookie exists "JSESSIONID"] } {#log local0."[HTTP::cookie "JSESSIONID"]" persist uie [string tolower [HTTP::cookie "JSESSIONID"]] 3600} else { set jsess [findstr [string tolower [HTTP::path]] "JSESSIONID=" 11] if { $jsess != "" } { persist uie $jsess } } } when HTTP_RESPONSE { if { [HTTP::cookie exists "JSESSIONID"] } { persist add uie [string tolower [HTTP::cookie "JSESSIONID"]] 3600}} 3.3 实验结果及分析 给出三类算法在实际应用中的链接LB效果,见表1。从表1可以看出, JSESSION_ID算法的负载分摊结果非常均衡,达到了理想的效果。4 结语 在常用的五种LB算法中,处理能力均衡表现是最稳定的。而我们所提出的 JSESSION_ID算法在负载均衡服务器性能强大的情况下,其表现远远优于任何算 法。
[1] 张靖.Web服务器负载均衡研究[J].电子科技大学学报,2004(14):2-3. [2] 赵成贵.互连网络负载平衡理论与算法[M].北京:科学出版社,2011(5). [3] tomcat集群与负载均衡.http:
//blog.chinaunix.net/u/19228/showart_171533.html,2006. 科技资讯