|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
多谢指点,其实我对.net和ruby也不是很了解,对与java也只是刚起步的阶段,只是在学习中有了点想法就写出来了,现在俺本科还没毕业,所以对大型项目基本上也没有什么经验。j2eeJ2EEclustering1
概述
假如想要创建一个可伸缩的高牢靠性的网站,就必要懂得集群手艺(clustering).本文中,AbrahamKang先容了J2EE集群,如何完成集群,并列出BluestoneTotal-e-server,SybaseEnterpriseApplicationServer,SilverStreamApplicationServer和WebLogicApplicationServer在集群手艺上有甚么区分.基于这些常识,你就可以够计划本人无效且高效的J2EEapplications.
AbrahamKang
企业愈来愈多地选择Java2,EnterpriseEdition(J2EE)来开辟它们基于义务的网上使用.在J2EEframework中,集群手艺能包管起码的downtime,最年夜的伸缩性.一个集群就是一组applicationservers通明地运转J2EE使用服务,就仿佛它们是一个全体.在集群中必需供应分外的呆板.若要将服务是健降至最短,个中的每一个组件都必需是冗余的.
在本文中,我们将取得关于集群的基础常识和集群的办法,和主要的集群服务.因为业内集群手艺不同很年夜,我们将对照每种手艺的好坏.更进一步的,我们将会商与集群有关的applicationserver将要完成的特征.
为接洽实践使用,我们将看一看HPBluestoneTotal-e-Server7.2.1,SybaseEnterpriseApplicationServer3.6,SilverStreamApplicationServer3.7,和BEAWebLogicServer6.0各是如何完成集群的.
本文的第二部分中,我们的会商将触及集群的编程和不对恢复战略,并测试我们所提到的4种applicationserver产物是如何伸缩范围和举行不对恢复的.
集群的界说
<div>J2EEapplicationserver的供给商把集群界说为一组盘算机一同事情,供应通明的企业级服务(撑持JNDI,EJB,JSP,HttpSession,组件不对恢复等).他们存心界说得很含混,由于他们对它的完成各不不异.一部分隔发商在一组相互自力的呆板前端安排一个dispatcher,dispatcher承受用户的哀求,然后用HTTPredirectheader将哀求转到集群中一台特定的server上.另外一部分隔发商则完成了一个严密集成在一同的呆板团结,每台呆板能完整感知它四周别的呆板的存在,连同驻在它们之上的对象.
除呆板方面的集成,集群还包括冗余和堕落恢复:
负载均衡器:进进集群的单一的出口点,站点或applicationserver的流量唆使器
网关路由器:外部收集的出口点
多层互换器:包过滤或帧过滤,确保每台呆板仅收到和本人相干的信息
防火墙:端口级别过滤,避免hacker进进集群或外部收集
SAN(StorageAreaNetworking)把持器:把applicationservers,Webservers和databases毗连到后端存储介质,办理数据该写到哪一个硬盘;和堕落备份
数据库
不管如何完成,集群都供应两年夜次要功效:可伸缩性和高牢靠性(HA).
可伸缩性
可伸缩性是指一个使用程序能撑持不休增加的用户数目的才能.集群经由过程增添server来供应分外的事情才能,从而包管了可伸缩性.
高牢靠性
HA可用一个词归纳综合:冗余(redundancy).一个集群用良多呆板服务哀求,因而,即便一台呆板溃散了,别的呆板也可通明地接过义务.
集群仅在applicationserver层供应高牢靠性.对一个收集体系来讲,要体现真实的HA,必需像诺亚方船(Noahsark)一样每种工具供应两件,包含Webservers,网关路由器,互换布局等.
集群品种
J2EE集群一般接纳两种办法:不共享集群(shared-nothingcluster),和共享存储集群.在不共享集群中,每一个applicationserver有本人的文件体系和在集群中运转的使用的copy.使用程序的晋级必要更新集群中的每一个节点.这类设置对年夜的集群而言,保护就像一场恶梦,特别是今世码必要更新时.
相反,共享存储集群公用一个存储设备,每一个applicationservers从那边取得运转的application.更新只在一个文件体系中举行,一切呆板能会见到这些变更.直到如今,单点失利(single-pointoffailure)还是它的缺点.但是,SAN供应一个到冗孑遗储介质的单一的逻辑接口,以便举行堕落恢复,堕落回退和可伸缩性.(欲具体懂得SAN,拜见StorageInfrastructure.)
对照J2EEapplicationserver的集群手艺完成,最主要的是思索一下要素:
集群的完成
集群和组件的堕落恢复
HttpSession的堕落恢复
集群拓扑的单点失利
可变的拓扑布局
保护
今后我们将在分歧的方面对照四个盛行的applicationserver的集群手艺,但起首,我们先细心切磋一下各要素.
集群的完成
J2EEapplicationserver在完成JNDI(JavaNamingandDirectoryInterface)的基本上完成集群.只管JNDI是J2EE使用程序依附的中心,在集群中却很难完成,由于不克不及把多个对象bind到一个JNDI名字上.根据分歧applicationserverJNDI的完成,有三种集群的办法:
自力的(Independent)
会合的(Centralized)
全局共享(Sharedglobal)
自力的JNDItree
HPBluestoneTotal-e-Server和SilverStreamApplicationServer在每一个applicationserver中利用自力的JNDItree.JNDItree的server成员其实不晓得和体贴集群中别的server的存在.因而,不对恢复要末不撑持,要末经由过程一个重定向HTTP或EJBrequest的两头服务撑持.这些两头服务经由设置可晓得每一个组件在集群中的地位,并晓得万一呈现毛病那里有替换品.
自力JNDItree集群的一个长处是:集聚集中度(convergence)更短,伸缩烦琐.集聚集中度权衡的是集群完整感知一切成员和其上的对象的工夫目标.但是,会合度在自力JNDItree集群并非成绩,一旦两台呆板启动起来,集群就可以获知会合度.另外一个长处是:可伸缩性只需分外的呆板介入就行.
可是,也存在着弱点.起首,堕落恢复一般是开辟者的义务.故,因为每种applicationserver的JNDItree是自力的,经由过程JNDI查询失掉的remoteproxy被绑定到查询产生时的那台server上,如许,假如EJB的此次挪用失利了,开辟者必要写分外的代码毗连dispatcher,猎取另外一台无效的server的地点,再举行一次JNDI查询,从头挪用方才失利的办法.Bluestone完成了一种更加庞大的情势,每一个哀求都经由过程一个EJBproxy服务,称作ProxyLBB(LoadBalanceBroker).EJBproxy服务包管每一个哀求都发往举动的UBS实例.如许引进了分外的提早,可是主动实行了堕落恢复.
会合式JNDItree
SybaseEnterpriseApplicationServer完成的就是会合的JNDItree集群.会合的JNDItree集群对JNDI接纳CORBA的CosNaming服务.Nameserver中驻有会合式JNDItree,跟踪哪一个server启动了.每一个server在启动时,把objectbind到本人的JNDItree中,同时也bind到一切的nameserver中的JNDItree.
这类形式下取得EJB的援用分两个步骤.起首,用户从nameserver查询homeobject,前者前往一个可互感化的对象援用(interoperableobjectreferenceIOR).IOR指向几个举动的含有该homeobject的server.然后,用户用第一个server取得home和remote.假如EJB办法挪用中呈现毛病,CORBAstub卖力完成取得另外一台呆板(列于IOR中)上的逻辑.
nameserver自己是这类体例下的一个缺点.举例来讲,假如一个集群中有50台呆板,个中5台为nameserver.假如每一个nameserver都不成用的话,集群就没用了.实践上,另45台呆板都是好的,但全部集群将不处置任何EJB哀求.
当集群中一切的nameserver都溃散了,就必要另外一台呆板即刻饰演nameserver的脚色,由此发生了另外一个成绩.这类情形下,新的nameserver请求集群中一切举动的呆板把本人的对象bind到其上的JNDItree.只管bind过程当中承受哀求何尝不成,但倡议不要如许.binding历程延伸了集群的恢复工夫.并且,每一个JNDI查询实践上代表两个收集挪用,一个从nameserver猎取IOR,而第二个从IOR指定的server猎取object.
最初,当会合式JNDItree集群扩展范围时,它的会合度工夫也愈来愈长.扩展范围时,必需增添愈来愈多的nameserver.记着nameserver和全部集群呆板的一样平常可承受比例是1:10,且最少有两台nameserver.因而,假如你的集群有10台呆板,两台为nameserver,统共就有20个bind.40台呆板的集群,有4台nameserver,就有160个bind.每一个bind代表一台成员server把它下面一切对象bind到nameserver的JNDItree上的一个历程.如许,会合式JNDItree集群的会合度在一切完成中是最差的.
全局共享式JNDItree
最初,BEAWebLogic完成的是全局共享式JNDItree.这类体例下,当集群中的一台呆板启动时,它经由过程IP组播公布它的存在和它的JNDItree.每台server把对象bind到本人当地的JNDItree的同时,还bind到一个共享的全局JNDItree.
把JNDItree分为全局的和当地的,天生的home和remotestub就可以堕落恢复,并供应快速的过程当中(in-process)JNDI查询.全局JNDItree在每一个成员中共享,每一个成员都能晓得集群中每一个对象切实其实切地点.假如哪一个对象在两台以上的呆板上,一个特别的homeobject被bind到全局JNDItree上.这个home晓得它联系关系的一切EJBobject的地位,天生的remoteobject也一样晓得一切的地位.
全局共享的次要缺点在于:收集流量在server启动初始化时十分年夜,集聚集中度也很年夜.相反,在自力的JNDItree集群中,这并非成绩,由于没有JNDI信息共享.而全局共享式或会合式集群在简历共享或会合式JNDItree时要消费工夫.实践上,因为全局共享集群接纳组播传送JNDI信息,创建全局JNDItree的工夫是随server线性增加的.
全局共享式较会合式JNDItree而言,次要的上风在于:集群完成次要努力于伸缩的易完成性和更高的牢靠性.经由过程全局共享,你不用修改nameserver的CPU和RAM,大概调治集群中的nameserver数目.想扩大使用范围,增添server就行.并且,假如哪台溃散了,集群仍能很好地事情.最初,每一个远程查询只需一个收集挪用就完成了,比拟会合式的两个而言就省多了.
因为JSP,servlet,EJB和JavaBean最好能同时驻扎在一台applicationserver上,它们老是利用历程中JNDI查询.记着假如你仅仅运转服务器真个使用,三种体例没甚么区分.现实上,每一个HTTP哀求在applicationserver中做历程中JNDI查询,前往使用中挪用的对象.
接着,我们将注重力会合到J2EEapplicationserver的第二年夜思索要素:集群和堕落恢复服务.
有了这样一个呼声:让java代替C语言成为基本语言。这些足以说明java简单易学的这个优点。其次,java的功能强大,前面我也提到了,EJB3.0的推出使java成为了大型项目的首选。 |
|