总的来讲,
Java EE
集群技术包括
“
负载均衡
”
和
“
失败转移
”
两个部分。
在上图中,
“
负载均衡
”
即指由许多客户端对象
(Client Object)
同时请求目标对象
(Target Object)
。负载均衡器位于调用方和被调用方中间,可以将请求分发至功能相同但位置不同的目标对象中。高性能和高可用性都可通过这种方法实现。
如上图,
“
失败转移
”
的工作方式和负载均衡不同。通常,客户端对象可成功请求目标对象。如果目标对象在请求过程中失败,
“
失败转移
”
系统将监测到失败,并将后续的请求重定向至另一个可用的对象上。可通过这种方法实现容错。
那么,什么类型的对象可以集群呢?在
Java
代码中如何体现负载均衡和失败转移的点呢?实际上,并不是所有的对象都可以被集群起来,负载均衡和失败转移也不可能在任意一行
Java
代码上发生。
查看上述代码。
A
类中
business()
方法的代码可以被负载均衡或失败转移么?我们的答案是不会。对于负载均衡和失败转移来说,都需要在调用方和被调用方之间有一个监听器来负责分发或重定向对不同对象的方法调用。
A
类和
B
类的对象运行在相同的
JVM
中,并且紧密关联,我们很难在方法调用之间添加分发逻辑。
所以,什么类型的对象可以被集群起来呢?答案是只有那些能够被部署在分布式拓扑环境下的组件对象。
所以,何时产生负载均衡和失败转移的行为呢?答案是只有在调用分布式对象的方法时。
如上图所示,在分布式环境下,调用方和被调用方被明确分隔在不同的运行时容器中。可通过不同的
JVM
、进程或计算机来进行分隔。
当客户端调用目标对象时,即在目标对象的容器中执行方法
(
所以称之为
“
分布式
”)
。客户端和目标对象通过标准的网络协议通信。通过这些特性,可使用一些机制来干预方法调用的路径达到负载均衡和失败转移的目的。
在上图中,浏览器可能通过
HTTP
协议调用远程
JSP
对象。
JSP
在
Web
服务器中执行,浏览器并不关心执行过程,它只等待结果。在这种情况下,即可在浏览器和
Web
服务器中间加上能实现负载均衡和失败转移功能的组件。在
Java EE
中,分布式技术包括:
JSP(Servlet)
、
JDBC
、
EJB
、
JNDI
、
Web
服务等。负载均衡和失败转移在调用这些分布式方法的时候发生。下面,我们就来深入探讨这些技术细节。