转载:http://hqman.iteye.com/blog/92684,虽然是一篇很老的文章对于小白还是有很大的阅读价值。
对于理解J2EE集群技术不错的文章,虽然是Sun的技术人员撰写的,基本观点还算客观,内容深浅恰当,非常适合刚刚接触集群的朋友阅读,故此大胆翻译过来,放在这里和大家共享,错误难免,欢迎指正。
原链接
Uncover the hood of J2EE Clustering
===================================================================================
4 web层集群实现
web层集群是J2EE集群中最重要和基础的功能。web层集群技术包括:Web负载均衡和HTTPSession失效转移。
4.1 web负载均衡
J2EE提供商有很多方法实现web负载均衡,基本的,在浏览器和web服务器之间放置负载均衡器。
图5:web负载均衡
负载均衡器可以是硬件产品如F5 负载均衡器,也可以是另一个带有负载均衡插件的web服务器。简单的带有ipchains的linux box也可以执行负载均衡的功能。无论何种技术,负载均衡器通常有以下特性:
*实现负载均衡算法
当客户端请求达到时,负载均衡器决定如何分发请求到后端服务器实例。通常的算法包括Round-Robin,(指的是使组中所有成员都能均等地以某种合理 的顺序被选择到的一种安排方式, 通常是从列表的头至尾,而后周而复始),随机和基于权重。 负载均衡器试图使每个服务器实例完成相同的工作量,但以上算法都不能真正达到理想的等量,因为他们只是基于分发到某个服务器实例请求的数量来计算。一些聪 明的负载均衡器实现特别的算法,他们会测试每个服务器的工作负载来决定分发请求。
*心跳检测
当一些服务器实例失效时,负载均衡器应该检测到失效,并不再分发请求到失效的服务器上。负载均衡器也需要监视服务器恢复状况,并给它重新分发请求。
*会话粘连
几乎每个web应用都有会话状态,使得记住用户是否登陆或购物车变得非常简单。因为HTTP协议本身没有状态,会话状态需要存在某个地方,并和浏览会话关 联起来,可以在下一次请求时很容易地被检索到。当负载均衡时,最好选择分发相同的浏览器会话请求到同一台服务器实例上,否则应用工作会不正常。
因为会话状态存储在某个web服务器实例的内存中,“会话粘连”对于负载均衡非常重要。但,如果一台服务器实例因为某些原因失效(比如断电),那么该服务 器上多有的会话状态就丢失了。负载均衡器检测到了该失效,不再向其分发请求。但存储在失效服务器上的会话的那些请求将丢失会话信息,这种情况会引起错误, 因此会话失效转移到来了!
4.2 HTTPSession失效转移
几乎所有的流行的J2EE提供商都在他们的集群产品中实现了HTTPSession失效转移,确保所有的客户请求可以不因为一些服务器实例的失效而丢失任 何会话状态。如图6所示,当浏览器访问一个有状态的web应用(第1,2步),此应用可以在内存中创建会话对象存储信息以备后用。同时,向浏览器送回 HTTPSession ID,用来标记该会话对象(第3步)。浏览器以cookie的方式存储该ID,并会在下次发起请求时送回web服务器。为了支持会话失效转移,会话对象将 在某时某处将它自己备份(第4步)。负载均衡器可以检测失效(第5,6步),分发请求到其他服务器实例(第7步)。因为会话对象已经被备份,新的web服 务器实例可以恢复该会话并正确地处理请求。
图6:HTTPSession失效转移
为了实现以上功能,注意下列问题:
*全局HTTPSession ID
如上所述,HTTPSession ID用来标记某个服务器实例内存中的会话对象。在J2EE中,HTTPSession ID依赖于JVM实例。每个JVM实例可以控制多个web应用,每个应用又可以控制许多不同用户的HTTPSession,HTTPSession ID是存取当前JVM实例中相关会话对象的键。在会话失效转移实现中,要求不同的JVM实例不应该产生两个同样的HTTPSession ID,因为失效时,在一个JVM的会话可能在另一个JVM中备份和恢复。所以,应该建立全局的HTTPSession ID机制。
*如何备份会话状态
如何备份会话状态是一个使得J2EE服务器与众不同的关键因素。不同的提供商实现不同。
*备份频率和粒度
HTTPSession状态备份有性能消耗,包括CPU周期,网络带宽和写磁盘和数据库的IO消耗。备份频率和粒度严重影响集群的性能。
4.3 数据库持久化方案
几乎所有的J2EE集群产品允许你通过JDBC接口使用关系数据库备份会话状态。如图7所示,该方案只是简单地让服务器实例序列化会话内容,并在适当的时 候写入数据库。当失效转移发生时,另一个可用的服务器实例负责失效的服务器,并从数据库中恢复会话状态。 对象序列化是关键点,使得内存会话对象数据持久化和可移动。更多对象序列化信息请参考
http://java.sun.com/j2se/1.5.0/docs/guide/serialization/index.html
图7:备份会话状态到数据库
象数据库事务一样代价昂贵,该方案的主要缺点是有限的伸缩性:当存储大量会话中的对象时。许多使用数据库会话持久化的应用服务器鼓吹 HTTPSession的最小限度的使用,但其实他们还限制了你的应用架构和设计,特别是如果你使用HTTPSession存储缓冲用户数据。
数据库方案也有一些优点.
*实现简单。江会话备份处理和请求处理分离,使得集群易于管理并比较健壮。
*会话可以失效转移到任何其它机器上,因为使用共享数据库。
*会话数据可以在整个集群失效后仍然生存。
4.4 内存复制方案
由于性能问题,一些J2EE服务器(Tomcat,JBoss,WebLogic和WebSphere)提供另一种实现:内存复制。
图8:内存复制
基于内存的会话持久化存储会话信息,该方案由于性能好非常流行。和数据库方案比较,在原始服务器和备份服务器之间直接网络通信是非常轻量级的。请注意该方案,数据库方案中的“恢复”阶段是不需要的。请求到来时,所有的会话数据已经存在于备份服务器的内存中了。
”JavaGroups”是目前JBoss和Tomcat集群的通讯层,JavaGroups 是一个实现群通讯和管理的工具包。它提供的核心特性是“Group membership protocols”和“message multicast”更多信息请参考http://www.jgroups.org/javagroupsnew/docs/index.html
4.4.1 Tomcat方案:多机复制
内存复制存在很多变体方案。一中办法是跨集群中的多节点复制会话状态。Tomcat5以此法实现内存复制。
图9:多机复制
如图9所示,当一个服务器实例的会话状态改变时,它将向集群中所有服务器备份它的数据。如果其中一个实例失效,负载均衡器可选择其它任何可用的服务器实例 作为其备份服务器。但该方案在伸缩性上有缺陷。如果集群中有很多实例,网络通讯消耗就不可忽略了,这种情况将严重降低性能和网络交通,成为瓶颈问题。
4.4.2 Weblogic, Jboss and WebSphere的方案--配对复制
因为性能和伸缩性问题,Weblogic, JBoss and Websphere 都提供了另一种方法实现内存复制:每个服务器实例选择任一个备份实例存储会话信息,如图10。
按这种方式,每个服务器实例拥有它自己的配对备份服务器而不是所有其它服务器。该方案消除了伸缩性问题。
图10:配对复制
虽然该方案实现了会话失效转移的高性能和高伸缩性,仍然有下列限制:
*给负载均衡器带来了复杂性。当一台服务器实例失效,负载均衡器必须记住哪个实例是其配对备份服务器,缩小了负载均衡器 的选择范围,一些硬件均衡器不能在此结构中使用。
* 除了处理正常的请求,服务器同时负责复制。每个服务器实例,请求处理容量被减小,因为CPU周期需要完成复制职责。
*除了正常处理,许多内存被用来存储备份会话状态,即使没有失效转移发生,也增加了JVM垃圾收集的消耗。
*集群中的服务器实例组成复制配对。所以如果会话粘连失效的主服务器,负载均衡器能发送失效转移请求到备份服务器上。备份服务器将在进入的请求中遇到麻烦,引起性能问题。
为了克服以上限制,不同的提供商的变种产生了。Weblogic 为每个会话而不是服务器定义了备份配对。当一台服务器实例失效,失效服务器上的会话被分散到不同备份服务器上,并且被分散地装载。
4.4.4 IBM的方案--中央状态服务器
Websphere 另一个可用的内存复制选择是:备份会话信息到一个中央状态服务器,如图11。
图11:中央服务器复制
和数据库方案非常相似,不同的是一个专门的“会话备份服务器”代替了数据库服务器。该方案兼有数据库和内存复制的优点:
*分离的请求处理和会话备份,使得集群更强壮。
*所有的会话数据备份到专门的服务器上。bu需要服务器实例浪费内存区保存其它服务器的备份会话数据。
*会话可以失效转移到其它任何实例上。因为会话备份服务器是被集群中的所有节点共享的。所以,大多数负载均衡软件和硬件可以在此集群中使用。更重要的是,请求装载在失效时将均匀分散。
*因为应用服务器和会话备份服务器之间的socket通讯是轻量级的相对于重型的数据库联接。它比数据库方案有着更好的性能和伸缩性。
然而,由于“恢复”阶段覆盖失效服务器的会话数据,它的性能和直接或配对内存复制方案不一样,附加的会话备份服务器对管理员也增加了复杂性,性能瓶颈由备份服务器自己的性能所限制。
4.4.5 Sun的方案--特殊的数据库
图12
Sun JES应用服务器采用了别的方式实现会话失效转移,如图12所示,它看上去很像数据库的方式,因为它采用关系数据库存储会话并通过JDBC访问所有会话数据。但是JES内部所使用的关系数据库称为HADB,已经为访问会话做了特别优化,并且将几乎所有的会话数据存在内存中。这样,你可以说它更像中央状态服务器的方式。
性能因素
考虑如下问题:
一台WEB服务器中可能运行着许多WEB应用,它们中每一个都可能被成百的并发用户访问,而每个用户都会产生浏览器会话用于访问特定的应用。所有会话信息都将备份以便服务器失效后能转移到其他服务器实例中。更糟的是,会话会由于一次次的发生以下情况而变化,包括创建、失效、增加属性、删除属性、修改属性值。甚至是什么都没变,但由于有新的访问而使最后访问时间变了(由此判断什么时候失效会话)。因此,性能在会话失效转移的解决方案中是个很大的因素。供应商通常会提供一些可调的参数改变服务器行为,使之适应性能需求。
备份时机
当客户端的请求被处理后,会话随时改变。由于性能因素,实时备份会话是不明智的。选择备份频率需要平衡。如果备份动作发生得太频繁,性能将急剧下降。如果两次备份的间隔太长,那么在这间隔之间服务器失效后,很多会话信息将会丢失。不管所有的方式,包括数据库和内存复制,下面是决定备份频率的常用的选项。
- 按WEB请求
相关推荐
### J2EE扫盲之-揭开J2EE集群的神秘面纱 #### 1. 前言 随着互联网业务的迅速发展与企业信息化水平的不断提升,越来越多的关键性应用程序选择基于J2EE(Java 2 Platform, Enterprise Edition)平台进行构建。例如,...
诺基亚手机扫盲贴--如何鉴别NOkia手机品质
这份“电子技术扫盲资料”旨在帮助初学者从基础开始理解并掌握电子技术的基本概念和元件。我们将深入探讨电阻、电容、电感以及二极管和三极管这五种基本电子元件。 首先,电阻是电子电路中最常见的元件,它能限制...
本文将深入解析Oracle 11g RAC中的集群应用层命令,特别是用于维护和监控的关键工具。 1. **SRVCTL**: SRVCTL是Oracle Clusterware提供的一个命令行接口,用于管理和控制RAC环境中的服务、实例、节点、监听器等...
【汽车基础知识解析】 汽车作为日常生活中重要的交通工具,其工作原理和技术细节对于购车者来说是非常重要的。下面我们将深入探讨一些汽车的基础知识。 1. **发动机类型:SOHC vs DOHC** SOHC(单顶置凸轮轴)和...
01-扫盲篇-渗透入坑专业术语知多少.md
MATLAB 是一种强大的数学软件,由美国MathWorks公司开发,主要功能包括数值计算、符号计算和图形可视化。MATLAB 的名称来源于"Matrix Laboratory",它以其丰富的运算符和库函数,简洁的语言结构,高效的编程效率而...
报警系统扫盲
大模型是指具有数千万甚至数亿参数的深度学习模型。近年来,随着计算机技术和大数据的快速发展,深度学习在各个领域取得了显著的成果,如自然语言处理,图片生成,工业数字化等。为了提高模型的性能,研究者们不断...
VMware Workstation是一款强大的虚拟机软件,它允许用户在单个物理计算机上创建和运行多个独立的虚拟机。这些虚拟机可以模拟不同的操作系统和网络环境,对于开发、测试和学习各种IT技术非常有用。...
nVIDIA/ATi显卡各版本级别之名词解析(感谢网友zg1hao提供资料) 7楼:内存类 1. 内存的CL值和内存延迟 2. 为什么DDR2-667的主频是667MHz,而工作频率却是333MHz? 3. DDR、DDR2和DDR3内存介绍和比较 4. ECC...
Makefile是Linux和Unix系统中用于自动化构建、编译、测试等任务的脚本文件,它的存在极大地提高了开发效率,特别是在大型项目中。...希望这篇扫盲贴能帮助你开启Makefile的学习之旅,让你在Linux开发中更加得心应手。
### LabWindows/CVI 扫盲技巧详解 #### 一、LabWindows/CVI 概述 1. **定义**:LabWindows/CVI 是一款由 National Instruments(简称 NI)开发的 ANSI C 集成开发环境(IDE)。它为工程师和科学家提供了创建测试与...
Oracle扫盲-第一讲-创建和管理表PPT课件 本资源主要讲述Oracle数据库管理系统的基本知识,包括创建和管理表的方法、数据类型、CREATE TABLE语句、数据字典等。 知识点1:数据类型 Oracle数据库中有多种数据类型,...
渗透测试 行业术语扫盲-来源-公众号-moonsec
强化学习扫盲贴:从Q-learning到DQN 强化学习是机器学习的一个分支,目标是训练智能体在环境中进行决策以最大化奖励。在强化学习中,Q-learning是一个基本的off-policy TD方法,它可以学习状态-动作对的价值函数,...
具体描述见: https://blog.csdn.net/BjarneCpp/article/details/80370986
资源名称:《零基础学习软件测试》视频教程-扫盲篇资源目录:【】《零基础学习软件测试》之软件测试知识扫盲篇_1【】《零基础学习软件测试》之软件测试知识扫盲篇_2【】《零基础学习软件测试》之软件测试知识扫盲篇_...
本资源“强化学习扫盲贴:从Q-learning到DQN.rar”聚焦于这一主题,旨在帮助初学者理解并掌握强化学习的基本概念,特别是Q-learning和Deep Q-Network(DQN)这两种重要的算法。 Q-learning是强化学习中的一种模型-...
总结来说,38K红外发射接收涉及物理层的信号生成、传输和解码,它是基于38KHz载波频率的编码协议,通过单片机编程控制信号的产生和接收,实现数据的无线传输。了解这些基础知识对于设计和调试红外遥控系统至关重要。...