转载:http://hqman.iteye.com/blog/92684,虽然是一篇很老的文章对于小白还是有很大的阅读价值。
对于理解J2EE集群技术不错的文章,虽然是Sun的技术人员撰写的,基本观点还算客观,内容深浅恰当,非常适合刚刚接触集群的朋友阅读,故此大胆翻译过来,放在这里和大家共享,错误难免,欢迎指正。
原链接
Uncover the hood of J2EE Clustering
===================================================================================
1 前言
越来越多的关键任务和大型应用正运行在J2EE平台上,象银行之类的应用要求很高的可用性(HA),大型系统比如google和Yahoo则要求更好的伸 缩性。今天高可用性和伸缩性的重要性对于互联世界日益增长,最著名的证明是1999年eBay中断了22小时的服务,原因是超过230万次的拍卖,最终导 致eBay股票下跌了9.2个百分点。
J2EE集群是最常用的技术,用来提供高可用性和伸缩性的容错服务。但由于缺乏J2EE规范的支持,J2EE提供厂商实现的集群尽不相同,引起许多J2EE架构师和开发者的麻烦,比如下面:
1. 为什么附带集群能力的商业J2EE服务器如此昂贵?(比不带集群能力的贵10倍)
2. 为什么我在单机上创建的应用无法运行在集群模式?
3. 为什么我的应用在集群时运行缓慢但不集群时却很快速?
4. 为什么我的集群应用不能与其他提供商的服务器通信?
2 基本术语
讨论不同实现之前,理解集群技术的概念是很有意义的,我希望不仅能给你提供关于J2EE集群产品基本的设计理念和概念,还可以概括性的描绘不同的集群实现,使它们更容易被理解。
2.1 伸缩性(Scalability)
大型系统很难预测终端用户的数量与行为,伸缩性是指系统可以支持用户的快速增长。提高服务器同时处理并发会话的最直觉的方式就是增加服务器资源(内存, CPU,或硬盘),集群是解决伸缩性的另一种可选方式。它允许一组服务器分担处理繁重的任务,而逻辑上就象一台服务器一样。
2.2 高可用性(High Availability)
提高伸缩性的单服务器解决方案(添加内存和CPU)是并不强壮的办法,因为单点失效原因。关键任务应用不能容忍服务中断哪怕一分钟。它要求任何时候都可以合理地可预期的响应时间访问这些服务,集群可以通过提供额外的服务器使其在一台服务器实效时提供服务,从而提高可用性。
2.3 负载均衡(Load balancing)
负载均衡是集群技术之后的一个关键技术,通过分发请求到不同的服务器来提高可用性和更好的性能。负载均衡器可以是一个Servlet或插件(例如a linux box using ipchains),除分发请求之外,负载均衡器应负责其他一些重要的任务,例如“会话黏附”,使得某个用户会话始终在一台服务器上存活,还有“心跳检 测”,防止分发请求到失效的服务器。有时候负载均衡器也参与到“失效转移”处理。
2.4 容错(Fault Tolerance)
高可用性数据不必是严格正确数据.在J2EE集群中,当一个服务器实例失效时,服务仍然可用,因为新的请求可由其他冗余的服务器实例处理。但如果请求正在处理当中时服务器实例失效,则不能能得到正确的数据。然而容错服务则总是保证严格正确的行为。
2.5 失效转移(Failover)
失效转移是另一项使得集群实现容错的关键技术。通过选择集群中另一个节点,原始节点失效时处理将继续下去。失效转移可以显式地编码也可以由低层平台自动执行。
2.6 等幂方法(Idempotent methods)
可以用相同的参数重复调用的方法,并且总是得到相同的结果。这些方法不应该影响系统状态,可以被重复地调用而不必担心改变系统。例如, “getUsername()” 是等幂方法,而“deleteFile()” 就不是等幂方法。等幂是HTTP会话和EJB失效转移的重要概念。
3 J2EE集群是什么?
一个幼稚的问题,不是吗?但我仍然用一些话语和图表来回答它。通常J2EE集群技术包括“负载均衡”和“失效转移”。
图1 负载均衡
如图1所示,有很多客户端对象并发发送请求到目标对象。负载均衡器则位于调用者和被调用者之间,分发请求到冗余的拥有同样功能的对象上。用此方法可以实现高可用性和高性能。
图2:失效转移
如图2所示,失效转移与负载均衡不同。有时候,客户端对象对目标对象发起连续的方法请求。如果目标对象在请求之间失效,失效转移系统应该检测到并将后续请求转向导另一个可用的对象,容错也可用此途径实现。
如果想了解更多J2EE集群,你应该问更多的基本问题,例如:“什么类型的对象可以被集群?”,“在我的J2EE代码中什么地方出现负载均衡和失效转 移?”,对于理解J2EE集群的原理,这些都是非常好的问题。实际上,不是所有对象可以被集群,也不是任何地方都可以负载均衡和失效转移!看看下列代码:
图3:代码例子
当“instance1”失效时,“Class A”的“business()”方法会负载均衡和失效转移到另一个B实例吗?不,不会。对于负载均衡和失效转移,必须要在调用者和被调用者之间存在一个拦 截器,用来分发或者转向方法调用到不同的对象上。A和B的实例对象运行在同一个JVM上,并紧密耦合。很难在方法调用之间添加分发逻辑。
所以,什么类型的对象可以被集群?---只有发布在分布式结构的对象。
所以,什么地方会发生负载均衡和失效转移呢?--只有在调用一个分布式对象的方法时。
图4:分布式对象
在分布式环境,如图4所示,调用者和被调用者被分离为不同边界的运行容器,边界是JVM,进程或机器。
当客户端调用目标对象时,在目标对象容器内执行功能。客户端和目标对象通过标准的网络协议通信。利用这些特性添加机制到方法调用路由中,以实现负载均衡和失效转移。
如图4所示,浏览器可以通过HTTP协议调用远程JSP对象。JSP在Web服务器上执行,浏览器不关心执行过程,它只需要结果。在这样的场景中,有些东 西可以位于浏览器和web服务器之间用来实现负载均衡和失效转移功能。在J2EE中,分布式技术包括:JSP(Servlet),JDBC ,EJB,JNDI,JMS,Webservices和其他。当分布式方法被调用时可以发生负载均衡和失效转移。下面我们会讨论细节。
相关推荐
### J2EE扫盲之-揭开J2EE集群的神秘面纱 #### 1. 前言 随着互联网业务的迅速发展与企业信息化水平的不断提升,越来越多的关键性应用程序选择基于J2EE(Java 2 Platform, Enterprise Edition)平台进行构建。例如,...
01-扫盲篇-渗透入坑专业术语知多少.md
诺基亚手机扫盲贴--如何鉴别NOkia手机品质
渗透测试 行业术语扫盲-来源-公众号-moonsec
ONS(Oracle Notification Server)控制器用于管理Oracle Notification Service,它是RAC环境中消息传递和事件通知的基础。ONSCTL命令允许你检查ONS服务的状态、启动或停止ONS进程,以及配置相关参数。 3. **CRS_...
【汽车基础知识解析】 汽车作为日常生活中重要的交通工具,其工作原理和技术细节对于购车者来说是非常重要的。下面我们将深入探讨一些汽车的基础知识。 1. **发动机类型:SOHC vs DOHC** SOHC(单顶置凸轮轴)和...
这份“电子技术扫盲资料”旨在帮助初学者从基础开始理解并掌握电子技术的基本概念和元件。我们将深入探讨电阻、电容、电感以及二极管和三极管这五种基本电子元件。 首先,电阻是电子电路中最常见的元件,它能限制...
MATLAB语言的基础是数组,支持多种控制流语句(如for循环、while循环、if语句、switch语句)以及面向对象的编程特性。此外,它的图形功能非常强大,能进行二维和三维数据可视化、图像处理和动画制作。 MATLAB 的...
报警系统扫盲
计算机网络基础术语扫盲
大模型是指具有数千万甚至数亿参数的深度学习模型。近年来,随着计算机技术和大数据的快速发展,深度学习在各个领域取得了显著的成果,如自然语言处理,图片生成,工业数字化等。为了提高模型的性能,研究者们不断...
VMware Workstation是一款强大的虚拟机软件,它允许用户在单个物理计算机上创建和运行多个独立的虚拟机。这些虚拟机可以模拟不同的操作系统和网络环境,对于开发、测试和学习各种IT技术非常有用。...
nVIDIA/ATi显卡各版本级别之名词解析(感谢网友zg1hao提供资料) 7楼:内存类 1. 内存的CL值和内存延迟 2. 为什么DDR2-667的主频是667MHz,而工作频率却是333MHz? 3. DDR、DDR2和DDR3内存介绍和比较 4. ECC...
网络术语大扫盲.pdf
开场白 基础知识大扫盲 鸟瞰CMMI 万事开头难-CMMI2级 更上一层楼-CMMI3级 管理者的乐土-CMMI4级 无止境的追求-CMMI5级 让你赤裸裸的评估办法 严刑拷问-考试 尚未揭开的面纱-本课程没有讲的内容
资源名称:《零基础学习软件测试》视频教程-扫盲篇资源目录:【】《零基础学习软件测试》之软件测试知识扫盲篇_1【】《零基础学习软件测试》之软件测试知识扫盲篇_2【】《零基础学习软件测试》之软件测试知识扫盲篇_...
Oracle扫盲-第一讲-创建和管理表PPT课件 本资源主要讲述Oracle数据库管理系统的基本知识,包括创建和管理表的方法、数据类型、CREATE TABLE语句、数据字典等。 知识点1:数据类型 Oracle数据库中有多种数据类型,...
教会你使用网络常用术语!