J2EE 高并发体系详解

一个天真的问题,不是吗?但我仍要用几句话和图来回答它。通常, J2EE 集群技术包括 " 负载均衡 " 和 " 失效转移 " 。

图 1   负载均衡
如图 1 所示,负载均衡意味着有许多客户端向目标对象同时发出请求。负载均衡器在调用者和被调用者之间,分发请求到与原始对象相同的冗余对象中。伸缩性和高可用性就是这样得到的。
 

图 2   失效转移
如图 2 所示,失效转移与负载均衡不同。有时客户端会连续发请求到目标对象,如果请求中间目标对象失效了,失效转移系统将检测到这次失败,并将请求重定向到另一个可用的对象。通过这种方式可以获得容错能力。
如果你想知道更多的有关 J2EE 集群的知识,你就会问到一个基本的问题,“什么对象可以集群?”和“在我的J2EE 代码中哪里会发生负载均衡和失效转移呢?”。这些都是用来理解 J2EE 集群的非常好的问题。实际上,并不是所有的对象都能被集群的,并且负载均衡和失效转移并不是在 J2EE 代码所有地方都能发生。看看下面的例子代码:
 

图 3   例子代码
在 Class A 的 bussiness() 方法中, instance1 可以负载均衡吗?或是当其失效,可以失效转移到其他 B 的实例上吗?我想是不行的!对负载均衡和失效转移来说,必须要有个拦截器在调用者和被调用者之间分发或重定向请求到不同的对象上。 Class A 和 Class B 的实例是运行在一个 JVM 中紧密耦合的,在方法调用间加入分发逻辑非常困难。
什么类型对象可以被集群?——只有那些可以被部署到分布式拓朴结构中的组件。
在我的 J2EE 代码中,什么地方会有负载均衡和失效转移?——只在你调用分布式组件的方法时。
 

图 4   分布式对象
在如图 4 所示的分布式环境中,调用者和被调用者被分离在有明显边界的不同的运行容器中,这个边界可以是 JVM,进程和机器。
当目标对象被客户端调用时,目标对象的功能是在容器中运行的(这就是为什么我们说它是分布式的原因)。客户端和目标对象通过标准的网络协议通信。这些特性就为一些机制提供了机会可以介入到方法调用之间实现负载均衡和失效转移。
如图 4 ,浏览器通过 HTTP 协议调用 JSP 对象, JSP 运行在 WEB 服务器中,浏览器只需要返回结果而不关心它是怎么运行的。在上述场景中,一些东西就可以在浏览器与 WEB 服务器之间实现负载均衡和失效转移的功能。在 J2EE 平台,分布式技术包括: JSP ( Servlet ),JDBC , EJB , JNDI , JMS , WEB Service 等。负载均衡和失效转移就发生在这些分布式方法被调用时。在后续部分我们将详细讨论这些技术。

   原创文章@java进阶网 转载请标明出处: http://www.javady.com/index.php/411.html 

阅读更多

没有更多推荐了,返回首页