(计算机系统结构专业论文)基于aspectwerkz的jvm层集群软件的设计与实现.pdf_第1页
(计算机系统结构专业论文)基于aspectwerkz的jvm层集群软件的设计与实现.pdf_第2页
(计算机系统结构专业论文)基于aspectwerkz的jvm层集群软件的设计与实现.pdf_第3页
(计算机系统结构专业论文)基于aspectwerkz的jvm层集群软件的设计与实现.pdf_第4页
(计算机系统结构专业论文)基于aspectwerkz的jvm层集群软件的设计与实现.pdf_第5页
已阅读5页,还剩68页未读 继续免费阅读

(计算机系统结构专业论文)基于aspectwerkz的jvm层集群软件的设计与实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 摘要 随着通讯技术、互联网的发展,人们对网络应用程序的开发提出了更高的要 求。随着用户数目的大量增加,传统的由单个服务器来提供服务的应用模式已经 越来越无法满足快速增长的并发请求。为了解决这个问题,开发人员们提出了很 多的解决方案,集群就是其中的一种。 本文采用a s m 、a s p e c t w e r l ( z 以及阶段式事件驱动框架( s t a g e de v e n t d r i v e i l 加c h i t e c t u r e ) 技术提出了一种基于j v m 层透明集群的j a v a 程序集群方案,并实现 了一个m 层集群软件原型。目的在于能够快速透明的将普通的j a v a 程序部署于 集群环境。该软件使用动态编织加载j a v a 字节码的技术来实现在运行期透明的配 置应用程序、拷贝集群对象,达到不用修改用户源程序的目的。同时使用了阶段 事务驱动框架来设计构建,而不是常见的基于线程的并发模型。这样可以避免在 高负荷情况下大量线程所带来的问题,同时可以在程序运行期通过调整参数来实 现性能调优。 本文分析了当前j 2 e e 应用服务器集群方案的现状和实现机制,对j v m 层集 群实现的可行性做出了深入的分析,j a v a 以及j 2 e e 规范本身并不提供对集群的描 述,而真实的企业级大型应用而言,集群功能却是必不可少的,很多j 2 e e 应用服 务器提供商都在自己的应用服务器中提供集群功能。但是这样的集群技术费用高 昂,开发复杂,因此本文中所提出的j 层集群技术旨在简化j 2 e e 集群所带来 的复杂度,使用基于j a v a 字节码编织技术和阶段事务驱动框架来实现的解决方案。 在字节码编织技术上,首先考虑到了的a o p 机制的实用性以及局限性,遂采用将 流行的a o p 框架a s p e c t w e r l 汜的代码集成到系统中的机制来实现运行期的j a v a 字 节码编织。然后基于此种机制,实现了一个j v m 层集群方案的软件原型,提供基 本的集群对象复制功能,最后在现有的条件下对该原型进行了功能和性能测试。 本文以此为例,展示了一种轻量级的j a v a 集群软件开发框架,从而探索出在j v m 层透明实现集群的可能性。 关键词:j 2 e e 应用服务器集群,阶段式事件驱动框架,j a v a 字节码,j v m 层集群, a o p a b s t r a c t a sm ed e v e l o p m e i l to ft e l e c o m m u n i c “o nt e d h n o l o g ya n d 也ed e v e l o p m e n to t i i l t e m e t ,m ep e r f o r m a i l c eo fn 竹w o r k 印p l i c a t i o n h a sb e c o m em o r ea 1 1 dm o r el m p o r t a n t w i mt h el a r g ei n c r e a s ei i lt h en u m b e ro fu s e r s ,t h en a d i t i o n a ls i n 百es e e rf m m t h e a p p l i c a t i o nt op r o v i d es e r v i c e sm o d e l h a sb e c o m ei n c r c a s i n 酉yu n a b l et om e e t 廿1 er a p l d 卿w m o fc o n c 岍e n tr e q u e s t t os o l v e “sp r o b l 锄,d e v e l o p e r sh a v ep u t 蜊a r da 1 0 t o fs o l u t i o n s ,c l u s t 嘶n gi so n eo fm e m aj v m 1 a y e rc l u s t e 血gs o 脚a r ei sp r o p o s e d i nm i sm e s i sb a s eo na s m , a s p e c t w e 舷a i l ds t a g e de v e n t - 跏v e i l 心凼t e 咖e i i lo r d e r t 0a c q 嗽as o l u t i o nt 0 仃a i l s p 舢t l yd 印l o yj a v a 印p l i c a t i o n i nc l u s t e re i l v i r o 姗锄t ,m et e c m q u eo td y n 删c w e a v i n gj a v ab y t ec o d ei s u s e dt oc o n f i g u r e 印p l i c a t i o na i l dc o p yc l u s t e ro b g e c tm 1 1 】n t j m e i nm i st h e s i s ,w ed i s c u s s e dh o wt h ed u s t e rc a p a c i t yp r 0 v i d e d b yj 2 e ea p p l i c a t i o n s e r v e ri si m p l e m e n t e d j a v ai t s e l fd o e sn o tp r o v i d ead e s 嘶p t i o no f t h ec l u s t b u ti n l a r g c s c a l ee n t e r p r i s e 印p l i c a t i o nd e v e l o p m e n t ,m ec l u s t e rm n c t i o ni s e s s e n t i a l m 眦y j 2 e e 即p l i c a t i o ns e r v e rp r o v i d e r sp r o v i d ec l u s t e r i n gc a p a b i l i t yi nm e i r o w na p p i i c a t l o n s e e r t l l e s ec l u s t 甜n gs o 胁a r e sa r ev e r ye x p e l l s i v ea n d h 莉t 0d e v e i o p 印p 1 1 c a n o n o n aj v m 1 a y e rc l u s t 嘶n gs o 脚a r ei sd e s c r i b e dm 锄sp a p e rw l l i c hi sd e s i 印e da i l d d e v e l o p e db ya s m ,a s p e c t w e r l ( za n ds e d a ( s t a g e de v e l l t _ d r i v e na r c h i t e c t u r e ) t e c h 0 1 0 9 y t l l ea i mi st oq u i c k l ya i l d 仃a 1 1 s p a r e n t l yd 印l o yo r d i n 叫j a v ap r o 蓼眦sm c l u s t e re i l v i r o m e i l t d y n a m i cj a v ac l a s sb y t e s1 0 a d i n gi s u s e di nm es y s t e mt 0 仃a n s p 舢t l yw e a v i n g b u s i n e s sp r 0 黟锄a j l di m m i 黟a t ej a v ac l u s t e ro b j e c t sm r u n t l m e a tt h es 锄et i m et l l es y s t 锄i sd e s i 伊e di ns e d a i n s t e a do ft h r e a d c o n c 岍e n c ym o d e l d l i c hi sc o m m o n l yu s e d 1 1 1m i sp a p t h ea u m o rs h o w sa1 i g h tw e i g h t e d j a v a c l u s t e r i n ga r c h i t e 曲j r ea 1 1 dt r yt om a k e o u tan e wm e m o do fb u i l d i n gc l u s t e ra p p l i c a t i o n k e y w o r d :j 2 e ea p p l i c a t i o n b y t e c o d e ,j v m l e v e lc l u s t e r , s e r v e rc 1 u s t e r ,s t a g e de v e n t d r i v e n 心c h i t e c m r e ,j a v a a o p i i 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工 作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地 方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含 为获得电子科技大学或其它教育机构的学位或证书而使用过的材料。 与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明 确的说明并表示谢意。 关于论文使用授权的说明 年月 日 本学位论文作者完全了解电子科技大学有关保留、使用学位论文 的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁 盘,允许论文被查阅和借阅。本人授权电子科技大学可以将学位论文 的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或 扫描等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后应遵守此规定) 签名:争导师签名:批 日期:年 月日 第一章绪论 1 1 研究动机 第一章绪论 最近十年间,互联网已经从一个单纯的用于科研的,用来传递静态文档的美 国内部网络,发展成了一个应用于各行各业的,传送着海量多媒体及动态信息的 全球网络。从规模上看,互联网在主机数、带宽、上网人数等方面几乎一直保持 着指数增长的趋势,2 0 0 6 年7 月,互联网上共有主机4 3 9 ,2 8 6 ,3 6 4 台【l 】,w w w 站点数量达到9 6 ,8 5 4 ,8 7 7 个【1 1 。全球上网人口在2 0 0 4 年达到7 亿2 9 0 0 万【2 】, 中国的上网人数在2 0 0 6 年1 2 月达到了约1 亿3 7 0 0 万【3 】。另一方面,互联网所 传递的内容也发生了巨大的变化,早期互联网以静态、文本的公共信息为主要内 容,而目前的互联网则传递着大量的动态、多媒体及人性化的信息,人们不仅可 以通过互联网阅读到动态生成的信息,而且可以通过它使用电子商务、即时通信、 网上游戏等交互性很强的服务。因此,可以说互联网已经不再仅仅是一个信息共 享网络,而已经成为了一个无所不在的交互式服务的平台。 互联网用户的快速增长,给大型的企业级网络应用程序带来了越来越严峻的 挑战。它们需要应付更大的并发访问,更大数目的同时在线用户,同时还需要提 供更加可靠的服务。以往的由单机来提供服务的模式越来越无法满足这样的需要 了,我们需要的是易于开发维护、具备高可靠性的企业级应用系统。 1 2 课题来源以及论文研究内容 在企业应用程序方面,j 2 e e 【4 】平台技术为企业应用的设计、开发、集成以及部 署提供了一条基于组件的实现途径。j 2 e e 是一种利用j a v a2 平台来简化企业解决 方案的开发、部署和管理相关的复杂问题的体系结构。j 2 e e 技术的基础就是核心 j a v a 平台或j a v a 2 平台的标准版,j 2 e e 不仅巩固了标准版中的许多优点,例如“编 写一次、随处运行”的特性、方便存取数据库的j d b ca p i 、c o f u 3 a 【5 】技术以及能 够在i n t e m e t 应用中保护数据的安全模式等等,同时还提供了对e j b ( e n t e r p r i s e j a v a b e a n s ) 、j a v as e r v l e t sa p i 、j s p ( j a v as e r v e rp a g e s ) 【4 j 以及) a l 技术的全面 电子科技大学硕士学位论文 支持。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系 结构。j 2 e e 体系结构提供中间层集成框架用来满足无需太多费用而又需要高可用 性、高可靠性以及可扩展性的应用的需求。通过提供统一的开发平台,j 2 e e 降低 了开发多层应用的费用和复杂性,同时提供对现有应用程序集成强有力支持,完 全支持e n t e r p r i s ej a v 据e a n s ,有良好的向导支持打包和部署应用,添加目录支持, 增强了安全机制,提高了性能。 但是,j 2 e e 规范本身并没有提供对集群应用【6 】的描述,而对于企业级应用程 序而言集群功能又是如此的重要,因此j 2 e e 应用服务器【7 】提供商都单独在它们的 应用服务器中提供了集群功能。比如b e aw e b l o 酉c 【8 】,i b mw e b s p h e r e 【9 】都有提 供对集群功能的支持。但是这样的集群功能在为客户提供方便的同时也带来了一 些问题。首先,各个厂商的应用服务器都有它的特性,基于某种应用服务器而开 发的集群应用程序不具备移植性,这就背离的j a v a 跨平台、一次编写随处运行的 初衷。其次,这些具备集群功能的应用服务器都是非常昂贵的,这不仅仅指它的 认证费用,通常还需要购买它的服务,这个费用一般的小型用户是很难承受的。 基于以上的问题,本文设计了一套软件系统,它提供了一种j v m 层【lo 】的集群 方案,可让单节点、多线程的应用变成分布式、多节点的应用,而无需修改一行 j a v a 代码。这对于普通j a v a 程序向集群方式移植以及大型的j a v a 企业应用的开发 提出了一种新的模式,这种新的解决方案成本低廉、开发方便。本文将详细的描 述该软件的构架,并实现了一套该系统的原型、编码和性能,并做出了今后可能 的提升方面的工作预测。 1 3 本人所做的工作 作者对j a v a 程序的集群方式进行了深入的研究,研究了j 2 e e 应用服务器提供 的集群方式,分析了在j v m 层进行j a v a 应用程序集群的可能性。然后采用 a s p e c t w 刚咒与阶段式事件驱动模型【1 2 】架构实现了一个j 层集群的原型,并 在现有的情况下对该原型的功能和性能进行了测试,以分析这套解决方案的可行 性。 1 4 本文章节安排 本文共包含了八章内容,一次阐述了作者对该课题的认识,详细讲述了对于 2 第一章绪论 整个课题从分析、研究、设计、编码、测试到实现原型的全过程。各章节的内容 依次为: 第一章为引言,主要介绍本课题的背景和意义、本人所做的工作及本论文的 结构脉络。 第二章介绍了j 2 e e 集群的概念以及解决方案,同时分析了j 2 e e 的现状以及 优缺点。并介绍了在j 讧层进行集群的原理,同时简要分析了怎样来实现j v m 层 的集群,并对系统所能解决的问题域做了简要的描述。 第三章对该系统的架构进行了较为详细的介绍,其中描写了系统中的一些核 心概念,紧接着描述了它的基本构架,对构架中的几个重要模块进行了描述,最 后提到了系统所受到的限制以及在性能方面的考虑。 第四章介绍了集群系统的详细设计过程。详细讲述了动态字节码编织技术在 该系统中的应用,包括对a o p 面向方面编程的使用,对a s p e c t 眦的使用。然 后讲述了在提高系统处理高并发请求方面的设计,是采用了阶段式事件驱动框架。 第五章讲述了系统原型的实现,先简要介绍了系统源代码的结构以及模块的 划分,紧接着分小节对其中核心的几个模块的代码进行了详细的分析。期间,对 各个模块的细节进行了详尽的描述,并对其中的有创新的算法进行了深入的分析。 第六章是对该系统进行的测试,包括基本功能测试和性能测试,提出了在现 有测试条件下的性能分析的报告,并对这些结果进行了分析,指出了造成某些现 象的原因以及系统的瓶颈。 第七章对全文做了总结,指出了本文的创新点以及以后可以做出的改进和工 作。 3 电子科技大学硕士学位论文 第二章j a v a 集群系统架构综述 在本章将介绍一下j a v a 集群技术的基本概念并详细的描述j v l 层集群的实现 框架,这讲有助于后面章节对应用系统实现的描述。 2 1 集群的基本概念 简单的来讲,集群就是有很多台计算机组成的一组集合,它们对用户透明, 只提供一个对外的接口,并在集群内部提供负载均衡、失败转移、冗余备份【1 2 】等 功能。一般来讲,集群系统需要具备以下的一些特点: 可扩展性 在一些大型系统中,很难提前预知最终用户的数量以及他们的使用行为,所 以,可扩展性就是指一个系统能够快速适应用户数量的增加。提高服务器处理能 力的最直接的方法就是增加硬件资源,例如c p u 、内存或者硬盘等。集群是解决 这个问题的另外一种方式,它使得一组服务器共同分担繁重的任务,但对于最终 用户来说就像一台服务器。 高可用性 通过向单机添加硬件来扩展系统能力的方案并不可靠,因为单一的服务器存 在一个单点故障。像银行系统、帐单系统这样的关键应用甚至连一分钟的停机都 不能容许,它们需要在任何时间都是可用的,并且要能够保证响应速度。集群技 术就可以满足这个要求,它通过加入冗余服务器使得在一个服务器出错而停止服 务的时候,这些冗余的服务器可以继续服务。 负载均衡 负载均衡是集群的另外一个关键技术,它通过将请求分发到不同的服务器来 达到高可用性和高效的处理能力。负载均衡器可以是一个s e r v l e t ,也可以是一个插 件( 例如l i n u x 上的i p c h a i n s ) ,甚至还可以是一个比较昂贵的内嵌了s s l 支持的 硬件产品。为了能够分发请求,负载均衡器还需要做一些重要的工作,例如使用 “会话粘滞”技术以确保来自同一个用于的请求会被转发到同一个服务器;使用 “健康检查”( 或者“心跳监听 ) 技术来防止将请求发到一个失败的服务器;有 时候负载均衡器还将参与“失败转移”的工作。 4 第二章j a v a 集群系统架构综述 容错 高可用的数据并不必是严格正确的数据。在j 2 e e 集群中,当一个服务器实例 失败了,在集群中冗余的服务器就可以处理新到的请求,这样就保证了服务依然 可用。但是在服务器失败的那一刻,正在被处理的请求就可能无法得到正确的数 据。那么,带有容错功能的集群就可以确保请求所得到的数据是正确的,哪怕是 服务器端出现了错误。 失败转移 在集群中,失败转移是实现容错的一个关键技术。当最初的节点失败之后, 在集群中选择另外一个节点来完成处理。失败转移到其他节点可以通过编码实现, 也可以由平台自动实现。 幂等方法 如果一个方法使用同样的参数进行多次调用所得到的结果都一样,也就是说 对于该方法的调用次数不影响系统,那么这个方法就叫做“幂等方法”【1 3 】。例如 “g e t u s e n 锄e ( ) ”就是一个幂等方法,而“d e l e t e f i l e ( ) ”就不是幂等的。在讨论h t t p 会话失败转移和e j b 的失败转移时,幂等方法是一个很重要的概念。 2 2j 2 e e 应用服务器集群简介 j 2 e e 应用服务器的集群通常包含了“负载均衡 和“失败转移。 图2 1 负载均衡 如图2 1 所示,负载均衡就是指,在同一时刻,有很多客户端对目标对象进行 5 电子科技大学硕士学位论文 请求,负载均衡器就位于调用者和被调用者之间,它将请求分发到具有同样对象 功能的冗余对象去,这样就实现了高可用性和高性能。 图2 2 失败转移 如图2 2 所示,失效转移与负载均衡不同。有时候,客户端对象对目标对象发 起连续的方法请求。如果目标对象在请求之间失效,失效转移系统应该检测到并 将后续请求转向导另一个可用的对象,容错也可用此途径实现。 在这里我们要讨论什么类型的对象可以被集群,以及在j 2 e e 代码中的什么地 方会出现负载均衡和失败转移。这也有助于对j 2 e e 原理的理解。实际上,不是所 有对象可以被集群,也不是任何地方都可以负载均衡和失效转移。如图2 3 中的代 码所示: 图2 3 代码例子 我们讨论当“i n s t a i l c e l 失效时,c l a s sa 的b u s i n e s s ( ) ”方法会不会负载均衡 和失效转移到另一个b 实例吗。这实际上是不会发生的,对于负载均衡和失效转 移,必须要在调用者和被调用者之间存在一个拦截器,用来分发或者转向方法调 用到不同的对象上。a 和b 的实例对象运行在同一个j v m 上,并紧密耦合。很难 6 第二章j a v a 集群系统架构综述 在方法调用之间添加分发逻辑。 到这里,我们基本上已经可以看出来,只有那些可以部署在分布拓扑【1 4 】上的 组件才可以被集群。负载均衡和失败转移也只有在调用一个分布式对象上的方法 是才会发生。 厂= 唧g e t 竺兰兰 一l 一k 竺= 竺)l j、7 一 :竺= :| :竺i 八 一火! ! 兰夕 m e t h o d j n v o k e - _ 1 7e j b 对象、) : m e 渤哮辩n d 叶一叹竺 夕 s 絮擘翟一厂忑八 图2 4j 2 e e 中的分布式环境 在分布式环境中,如图2 4 所示,调用者和被调用者被分离为不同边界的运行 容器,边界是j v m ,进程或者栈。 当客户端调用目标对象时,在目标对象容器内执行功能。客户端和目标对象 通过标准的网络协议通信。利用这些特性添加机制到方法调用路由中,以实现负 载均衡和失败转移。 如图2 4 所示,浏览器可以通过h t t p 协测1 5 】调用远程j s p 对象。j s p 在w 曲 服务器【1 6 】上执行,浏览器不关心执行过程,它只需要结果。在这一的场景中,有 些东西可以位于浏览器和w 曲服务器之间用来实现负载均衡和失败转移功能。在 j 2 e e 中,分布式技术包括:j s p ( s e l e t ) ,j d b c ,e j b ,d i ,j m s ,w 曲s e i c e s 【1 刀 和其他。当分布式方法被调用时,可以发生负载均衡和失败转移。 7 蛋墨目 电子科技大学硕士学位论文 2 3w e b 层集群 w 曲层集群是j 2 e e 集群中最重要和基础的功能。w 曲层集群技术包括:w 曲 负载均衡和h t t p s e s s i o n 【1 8 1 失败转移。 w 曲负载均衡 j 2 e e 提供商有很多方法实现w e b 负载均衡,基本的,在浏览器和w e b 服务器 之间放置负载均衡器。 b u s i n e s s j s p b u s i n e s s j s p 图2 5w e b 负载均衡 负载均衡器可以是硬件产品如f 5 【1 9 1 负载均衡器,也可以是另一个带有负载均 衡插件的w e b 服务器。简单的带有i p c h a i n s 【2 0 1 的l i m l xb o x 也可以执行负载均衡的 功能。无论何种技术,负载均衡器通常有以下特性: 实现负载均衡算法 2 1 】 心跳检测2 2 】 会话粘滞【2 3 】 h t t p s e s s i o n 失效转移 几乎所有的流行的j 2 e e 应用服务器提供商都在他们的集群产品中实现了 国臼 第二章j a v a 集群系统架构综述 h t t p s e s s i o n 失效转移,确保所有的客户请求可以不因为一些服务器实例的失效而 丢失任何会话状态。如图2 6 所示,当浏览器访问一个有状态的w e b 应用( 第1 , 2 步) ,此应用可以在内存中创建会话对象存储信息以备后用。同时,向浏览器送 回h t t p s e s s i o ni d ,用来标记该会话对象( 第3 步) 。浏览器以c o o l ( i e 【2 4 】的方式存 储该i d ,并会在下次发起请求时送回w e b 服务器。为了支持会话失效转移,会话 对象将在某时某处将它自己备份( 第4 步) 。负载均衡器可以检测失效( 第5 ,6 步) ,分发请求到其他服务器实例( 第7 步) 。因为会话对象已经被备份,新的w e b 服务器实例可以恢复该会话并正确地处理请求。 点 地方 图2 6h t t p s e s s i o n 失效转移 为了实现以上功能,需要注意下列问题: 全局h t t p s e s s i o ni d : 如上所述,h t t p s e s s i o ni d 用来标记某个服务器实例内存中的会话对象。在 j 2 e e 中,h r r p s e s s i o ni d 依赖于j 订实例。每个j v m 实例可以控制多个w e b 应 用,每个应用又可以控制许多不同用户的h t t p s e s s i o n ,h t t p s e s s i o ni d 是存取当 前j v i 实例中相关会话对象的键。在会话失效转移实现中,要求不同的j v m 实 例不应该产生两个同样的h t t p s e s s i o nd ,因为失效时,在一个j 的会话可能 在另一个j v m 中备份和恢复。所以,应该建立全局的h t t p s e s s i o ni d 机制。 备份会话状态: 如何备份会话状态是一个使得j 2 e e 服务器与众不同的关键因素。不同的提供 商实现不同。 备份频率和粒度: 9 舵 固一固 电子科技大学硕士学位论文 h t t p s e s s i o n 状态备份有性能消耗,包括c p u 周期,网络带宽和写磁盘和数 据库的i o 消耗。备份频率和粒度严重影响集群的性能。 2 4e j b 集群 e j b 【2 5 】是j 2 e e 技术中非常重要的一部分,同时,e j b 的集群也是j 2 e e 集群实 现中面对的最大挑战。 e j b 是为分布式计算而生的,他们运行在独立的服务器上,w 曲服务器组件 或者富客户端应用通过标准协议( r m i i i o p ) 【2 6 】访问这些e j b ,你可以像调用本 地对象方法一样调用远程e j b 对象的方法。实际上,r m i i i o p 掩盖了你所调用的 方法是在本地还是在远程,这个就叫做“本地远程透明性”。 l 厂哆 l一厶、 i h 2m m ,多一 、1 , j 一7 1 0 第二章j a v a 集群系统架构综述 图2 7 表示的就是远程e j b 调用的机制。当客户端需要使用一个e j b 的时候, 不能直接调用这个e j b ,客户端只能调用一个叫做“s 劬”的本地对象,这个本地 的“s 劬 和远程的e j b 有相同的接口,起到代理的作用。s 劬的作用就是接受客 户端的调用,并且把这个调用通过网络委派到远程的e j b 对象。s 劬和客户端应 用运行在同一个j v m 实例中,它知道如何通过r m i i i o p 在网络上找到真正的对 象。 在调用e j bs 劬过程中的负载均衡和失败转移主要有以下三种方式: s m a r ts t u b :在s 劬代码中加入特殊的行为,但是这些代码对客户端 而言又是透明的( 客户端程序对这些代码一无所知) 【2 5 】 i i o p 运行库:将负载均衡和失败转移的逻辑集成在i i o p 运行库中【2 6 】 拦截代理:e j b 客户端通过查找d i 获取一个s t i l b ,这个s t t l b 包含的 路由信息指向l s d ( l o c a t i o ns e r v i c ed a e m o n :根据负载均衡和失败转 移的逻辑将请求分发到不同的应用服务器实例) ,而不是真正拥有e j b 的应用服务器实例。1 2 6 】 2 5j m s 和数据库连接的集群支持 在j 2 e e 中,出了j s p 、s e r v l e t 、e j b 、j n d i ,还有其他一些分布式对象。在 集群实现中,这些对象的集群可能支持,也可能不支持。 当前,有些数据库产品像o m c l er a c 阳能够支持集群环境,可以配置多个同 样的、并行的数据库实例。但是j d b c 是一种强态【2 8 】的协议,事务状态紧密的绑 定在客户端和服务器端的会话上,所以很难实现集群。一旦一个j d b c 连接死掉, 所有和这个连接相关的j d b c 对象( 例如s t a t 锄e 1 1 t ,r e s u l t s c t ) 就全部死掉了, 客户端就需要重新简历连接。b e aw e b l o 西c 通过使用“j d b c 多池”( m u l t ip 0 0 1 ) 来实现这个重新连接的过程。( 在b e aw e b l o 西c8 之后的版本中,j d b c 连接 池有一些用来保护的选项,设置这些选项可以在连接失败之后重新建立连接,而 不需要客户端的额外编码) 大部分j 2 e e 应用服务器都支持j m s ,但是不是完全支持。只有对于j m s 代 理才有负载均衡和失败转移。对于j m s 目标中的消息,几乎没有产品能够实现失 败转移。 电子科技大学硕七学位论文 2 6 本章小结 本章详细介绍了j a v a 集群系统的架构,详细研究了j 2 e e 应用服务器集群技术, 分析了其中的w e b 层、e j b 层、j m s 以及数据库连接的集群支持。 1 2 第三章j v m 层集群系统原型的架构 第三章m 层集群系统原型的构架 该系统的目的是使普通的j a v a 应用程序能够透明的部署到集群环境,本文在 这种思想下实现一个系统原型,由于个人的条件以及开发环境的限制,该原型在 功能还有很大的不足,同时在性能上也远远未达到工业强度。旨在为j v m 层的集 群提供另一种思路。图3 1 是j 层集群系统的构架图。 图3 一l 集群系统组成 j 层集群系统原型采用如上图所示的应用构架,中心有一个或者多个集群 服务器组成,客户的应用程序部署在被称作集群客户端的j v m 上。 j v m 层集群通过将j a v a 应用程序部署到多个j ( 这些j v m 相互影响,彼 此相同) 中来简化j a v a 企业级应用程序的开发。系统在逻辑上扩展了单个n m 中 的j a v a 内存模型到虚拟机的集群中,这样不同虚拟机中线程就可以彼此交互,就 电子科技大学硕+ 学位论文 像运行在一个没有堆大小限制的虚拟机中。 使用该系统来开发集群应用跟开发单机的应用程序没有任何的区别。也不需 要提供专用的a p i 给开发人员,作者采用了字节码编织技术( 一种被许多 a s p e c t o r i e n t e ds o 胁a r ed e v e l o p m e i l t 面向方面【2 9 】软件开发所采用的技术,如 a s p e c t j 和a s p e c t w 甜( z 【3 1 1 ) 来将集群语义注入到现有的j a v a 语言中。 3 1j v m 层集群系统原型的研究 3 1 1 j 2 e e 集群带来的问题 失败转移不能够彻底避免错误 有时候,没有失败转移的高可用性解决方案也是可以接受的,成本也比较低。 并且,失败转移并不像你想象中那么健壮。 那么失败转移到底给我们带来了什么? 可能有些人认为失败转移可以避免错 误,如果没有失败转移,当服务器宕机【3 2 】的时候,会话信息就丢失了,从而引发 错误;如果有的话,当服务器失败的时候,会话信息能够从备份服务器恢复,请 求可以被其他的服务器实例正确处理。但是,这些是需要有前提条件的。 前面在描述“失败转移 的时候,也定义了它的前提条件:“在方法调用之间 。 如果你对远程对象有两次成功的调用,失败转移也仅会出现在第一次调用成功之 后和第二次调用之前。那么,如果在服务处理请求的过程中失败了,处理仍然是 回被中止的。除非这个方法是幂等的,同时负载均衡器还要判断出失败并且尝试 将请求分发到其他实例。 想要是应用中所有的方法都是幂等的是,这是不可能的。所以,使用失败转 移只能减少错误,但是无法避免。以在线商店的应用为例,假定在任何时候一个 服务器实例都可以处理1 0 0 个在线用户,当一个服务器失败之后,如果没有失败 转移,所有的会话信息都会丢失,让这1 0 0 个用户感到恼火。但是如果使用了失 败转移,可能只有2 0 个正在处理中的用户能够察觉到失败的发生并感到恼火,另 外8 0 个用户可能正出在两次请求之间的空闲时刻,这些用户的会话被透明的进行 了失败转移。所以,可以这样进行权衡: 2 0 个用户和1 0 0 个用户之间的不同影响 使用失败转移和不使用失败转移产品的成本 1 4 第三章j 、,m 层集群系统原型的构架 单机j 2 e e 应用不能够透明的迁移到集群环境 在j 2 e e 应用系统的开发中,需要从系统设计时就考虑到集群。其中需要考虑 到一下几个方面: h t t p 会话 在集群环境中,对于h t t p 会话【3 3 】的使用有很多的限制,这取决与你所用的 服务器的h t t p 会话失败转移机制。最重要的限制就是会话中的对象必须是可序 列化的,这就限制了应用的设计。一些设计模式或者m v c 【3 4 】框架会在h t t p 会话 中存储一些不可序列化的对象( 例如s e r v l e t 上下文,本地e j b 接口,w e bs e r v i c e 的引用等) ,这种设计在集群环境下无法正常工作。其次,对象的序列化和反序 列化阱】都是很消耗性能的操作,尤其是在使用数据库持久的方案中。 缓存 大部分j 2 e e 应用都使用了对象缓存机制( 3 5 】来提高性能,而且主流的应用服务 器产品都提供了不同程度的缓存的机制以提高应用性能,是因为有些对象比较庞 大,创建一个新的实例会有很大的开销,所以使用一个对象池来重用这个对象实 例而不是创建一个新的。只有在缓存维护的成都低于重新创建对象实例成本的时 候,才能够得到性能上的提升。在集群环境汇总,每个j v m 实例都要维护自己的 对象缓存池,而且要和其他实例同步以保证一致性,有时候这种同步的性能还不 如不使用对象缓存机制。 静态变量 一些设计模式,比如“s i l l 西e t o n ”( 单例) 【3 6 】使用静态变量来给其它对象共享状 态。这种方案在单一的服务器上工作得很好,但在集群中失效了。集群中的每个 实例都会在其j v m 实例中维护它自己的静态变量拷贝,因此就破坏了该设计模式 的共享机制。一个使用静态变量的例子是保持在线用户的总数。简单的办法就是 将该数字存储到静态变量中,当用户登录或下线时增加或减少它。这个应用在单 机模式下工作正常,但在集群中就失效了。如果要使这种方案工作正常,可以考 虑使用数据库存储。 外部资源 虽然在j 2 e e 规范中不建议使用外部资源,但是出于各种目的,外部i o 操作 还是不可避免的。例如,一些应用使用文件系统存储用户上传的文件,或者创建 动态的x 1 l 配置文件。在集群应用中,服务器无法将这些文件复制到其他实例。 所以,就需要借助数据库存放这些文件,或者使用s a n 来作为文件的存储点。( 备 电子科技大学硕士学位论文 注:s a n 英文全称:s t o r a g ea r e an e 缸o r k ,即存储区域网络网。它是一种通过光 纤集线器、光纤路由器、光纤交换机等连接设备将磁盘阵列、磁带等存储设备与 相关服务器连接起来的高速专用子网。) 特殊的服务 有一些服务只有在单机的环境下才有意义,例如实践服务:基于固定周期的 事件。时间服务通常用来进行自动的管理工作,例如日志文件的滚动、系统数据 备份、数据库一致性检查以及冗余数据的清理等等。一些基于事件的服务也无法 一直到集群环境,例如在系统开始时候的初始化服务。邮件通知服务也是由某种 警告条件触发的服务。 这些服务都是由特定的事件触发的而不是由请求调用的,而且只能执行一次。 这样的服务使得集群中的负载均衡和失败转移就没有什么意义了。 有些应用服务器产品为这种服务做了一些准备,例如j b o s s 【3 8 】就使用了一个叫 做“集群的单一工具来定位这样的服务来保证服务执行一次并且仅仅执行一次。 基于你选择的平台,这些服务器可能成为向集群环境迁移的障碍。 3 1 2 m 层集群的提出 从上一章,我们可以看出,集群环境不同于单机环境,j 2 e e 厂商的实现也各 不相同。如果要建立大规模的应用,应该在项目一开始就做好集群的准备,选择 能够满足需求的合适的应用服务器,同时也要选择使用于集群环境的第三方软件 或者框架,然后设计一个适当的框架来进行集群系统的开发。 基于以上的分析,可以看到在目前的技术条件下,要将单机应用透明的迁移 到集群环境,可以说是非常困难的。 我们再来看看j 2 e e 应用服务器提供的集群功能,“负载均衡 和“失败转移”, 只有特定类型的对象才可以被集群,也并不是在代码的任何地方都可以进行负载 均衡和失败转移。首先,j 2 e e 应用服务器都是通过序列化机制来传输对象的,因 此集群的对象必须要是可序列化的。其次,只有在调用那些分布式对象上的方法 是才有条件发生负载均衡和失败转移。 但是单机应用真的就不可能透明的移植到集群环境了吗? 现有的应用服务器 所实现的集群功能都是在j a v a 应用程序这一层做出修改。我们可不可以绕过这样 的思路,将集群功能做在j a v a 虚拟机和j a v a 应用之间呢? 答案是肯定的。 1 6 第= 章n m 层集群系统原型的构架 图3 - 2 是j a v a s e 平台的构成,来自幽婴,婴二q q m 唧露陶剪墨丽畏再嬲嚣 厂粼 唿撩 j m 一吨黜 】“。暖辩 l | i 。鼍篷 l 渊 i a 日懈c 目n “c 酬i 口j d u 坤 一 b s 8 “埘- 竹p l 呼帅咖唰钿唧n 口删 q m 州洲j m p 岫h m 口a m m 4 嚣= 4 j ml q _ 口” 篙“毒。* 一n 。:警盘- z _ 一 j 日日w c m n 咖w = o t t 时 目3 2j a v “e ( u nc ) 图3 1 2 e 应用模型( c o m ) 首先所有的j a v a 程序都运行在j a v a 虚拟机中( m :j a v av i r m a l m a c h i n e ) j a v a 虚拟机可以运行在多种操作系统之上,如w l n d o w s ,l i n u x ,s o l a n s ,h p u m x 电子科技大学硕士学位论文 a i x 等,它对j a v a 程序提供运行环境,并对程序屏蔽操作系统的差异,以实现j a v a 应用的跨平台执行,实现“一次编写,随处运行”。 其次,j a v a 平台和j a v a 编程语言都能提供其它开发环境中所没有的高级功能 和全面的a p i 。j a v a 应用编程接口为j a v a 应用提供了一个独立于操作系统的标准 接口,可以分为基本部分和扩展部分。基本部分提供了一些基础的a p i ,如i o 库、 桌面应用程序的类库、集合库( 如c o l l e c t i o n 、l i s t 、m a p ) 等基本的类库。扩展部 分则提供了一些更高级的扩展支持,例如j 2 e e 中的一些类库。图3 3 是j 2 e e 的 组件的框架图,来自w w w s u l l c o m : j a v a 的基础类库和扩展类库为开发人员提供了一个完整的开发环境。那么到 底要怎么样做才能实现不修改应用程序的移植到集群环境目的呢? 我们需要了解j a v a 程序是怎样执行的。 j a v a 是一种技术,它由四个方面组成:j a v a 编程语言、j a v a 类文件格式、j a v a 虚拟机和j a v a 应用程序接口( j a v a a p i ) 组成。它们的关系如下图所示: j a v a 编译环境j 黼平台运行期环境 图3 4j a v a 四个方面的关系 运行期环境代表着j a v a 平台,开发人员编写j a v a 代码( j a v a 文件) ,然后将之 编译成字节码( c l a s s 文件) 。最后字节码被装入内存,一旦字节码进入虚拟机,它 就会被解释器解释执行,或者是被即时代码发生器有选择的转换成机器码执行。 根据以上描述,我们可以在j a v a 虚拟机和j a v a 应用程序之间再搭建一个集群 层,如下图所示: 1 8 第三章j v m 层集群系统原型的构架 图3 5j v m 集群层所处的位置 如图3 5 所描述的那样,我们可以在j a v a 虚拟机加载运行用户的应用程序之 前先加载运行我们自己的集群程序,由我们的程序来接管共享对象传输和管理。 它有别于j 2 e e 应用服务器提供的集群。第一,在j 层可以传输复制堆中的任 意对象,而j 2 e e 集群只能够复制那些可序列化的对象,在后面章节对系统实现进 行解析的时候讲详细的描述共享对象复制的实现。第二,在j v m 层集群可以实现 通过配置的方式集群你所制定的对象,而不需要修改源代码,这是通过 a s p e c t w e 她来实现的,后面的章节将会有详细的描述。 应用程序和小应用程序 j a v a 基本a p ij a v a 标准扩展a p i j a v a 基类j a v a 标准扩展类 j a v a 虚

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论