日期:2014-05-18  浏览次数:20644 次

J2EE集群原理(一)【转载】
J2EE集群原理
什么是集群呢?总的来说,集群包括两个概念:“负载均衡”(load balancing)和“失效备援”(failover
图一:负载均衡
多个客户端同时发出请求,位于前端的负载均衡器根据特定算法,将请求分担给比较空闲的机器,从而实现较高性能和较好的扩展性
?
图二:失效备援
当客户端连续向某个服务器发出请求时,该服务器可能处理到一半就宕机了,失效备援系统能够检测出有问题的服务器,将后续的请求转发至其他可用的机器,从而实现容错功能
?
那么,哪些对象可以被集群呢,答案是:“可以被部署在分布式拓扑的组件
因此,负载均衡和失效备援会发生在哪些J2EE代码中呢?“仅当你调用分布式对象的方法时

图四:分布式对象
客户端和目标服务器不在一个JVM上,他们之间通过标准的网络协议进行通讯,这也就给集群提供了用武之地,实现集群效果的设备可以放在边界上对通讯做一些处理
J2EE的分布式技术包括:JSP,JDBC,EJB,JNDI,WEB SERVICE等等
?
网络层的集群实现
这是最常见最基本的J2EE集群功能,网络层集群技术包括:网络负载均衡和HTTP SESSION的失效备援
?
图五:网络负载均衡
?
负载均衡器可以是一个硬件设备,比如F5 Load Balancer,也可以是另外一台服务器加一个负载均衡的插件,甚至一个Linux的嵌入式设备都能胜任。通常,负载均衡包括以下几个特点:
l 实现负载均衡算法
常用的算法有:Round-Robin, Random Weight Based,算法的最终目标是尽量使每台服务器的负载达到平衡,但以上算法只是根据每台服务器接收的请求来进行均衡,因此都不能完全达到理想化的目标。有些复杂的算法可以在分发请求之前检测机器的性能,从而决定要由哪台机器来处理请求。
l 健康监测
一旦某台机器宕机了,负载均衡器要能够及时发现情况,并且将请求转交给其他可用的服务器,保证做到“failover
l Session stickiness
即是让一次session会话的请求都尽量交给一台机器处理,这样省去了服务器之间交