![](https://csdnimg.cn/release/download_crawler_static/5721199/bg5.jpg)
揭开 J2EE 集群的神秘面纱 http://www.fyyk.com
图 5 WEB 负载均衡
负载均衡器可以是一台硬件,如 F5 负载均衡器,或仅仅是另一台有负载均衡 Plug-Ins 的
WEB 服务器,一个简单的带 ipchains 的 Linux box 可以很好的实现负载均衡。不管采用哪种技
术,负载均衡器都有以下特性:
z 实现负载均衡算法
当客户请求到来时,负载均衡器需要决定将如何分发到后台服务器。流行的算法是 Round-Robin、
Random 和 Weight Based。负载均衡器尽力使每台服务器实例都获得相同的负载,但是上述算法没
有一个可以获得理想的负载相同,因为它们仅仅是依据发送到特定服务器的请求的个数。一些精
密的负载均衡器实现了特殊的算法。它在分发请求之前将检测服务器的工作负载。
z 健康检测
当一台服务器失效了,负载均衡器应当检测出失效并不再将请求分发到这台服务器上。同样,它
也要检测服务器是否恢复正常,并恢复分发请求。
z 会话胶粘
几乎所有的 WEB 应用程序都有一些会话状态,可能是简单的记住用户是否登陆,或是包含你的购
物车信息。因为 HTTP 本身是无状态的,会话状态应当存在服务器的某个地方并与你当前浏览会
话相关联,这样当你下次再请求相同 WEB 应用程序的页面时可以很容易的重新获取。当负载均衡
时,最佳的选择就是将特定的浏览器会话分发到上次相同的服务器实例中,否则,应用程序可能
不能正确工作。
因为会话状态存储在特定 WEB 服务器的内存中,“会话胶粘”对于负荷均衡非常重要。
但是,如果其中某台服务器实例因为某种原因失效了(比如关机),那么这台服务器的会话状
态将要丢失。负载均衡器应当检测到这个失效并不再将请求分发给它,但这些请求的会话状态
都因为存放在失效的服务器中而丢失了所有信息,这就将导致错误。会话的失效转移因此而生。
4.2. HTTP Session 失效转移
几乎所有流行的 J2EE 供应商都在他们的集群产品中实现了 Http Session 失效转移,用来保
障当某台服务器失效后会话状态不会丢失,使客户端请求能被正确处理。如图 6 所示,当浏览
器访问有状态的 WEB 应用程序(第 1 ,2 步),这个应用程序可能在内存创建了会话对象用于
保存信息以供后面的请求使用,同时,发送给浏览器一个唯一的 HTTP Session ID 用于标识这
个会话对象(第 3 步),浏览器将这个 ID 保存 Cookie 中,并当它下次再请求同一 WEB 应用
第 5 页 共 23 页