小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

EJB集群技術(shù)分析 - biaoming - JavaEye技術(shù)網(wǎng)站

 tom lee 2007-12-12
2007-08-16   struts.properties詳解 ...   |   重構(gòu)DAO設(shè)計計劃    

J2EE平臺提供了一個基于組件的方法,用來設(shè)計、開發(fā)、裝配及部署企業(yè)應(yīng)用程序。而且提供了一個多層的分布式的應(yīng)用模型、組件的復(fù)用、一致化的安全模型以及靈活的事務(wù)控制模型。近年來在企業(yè)系統(tǒng)中得到了大量使用。隨著J2EE應(yīng)用服務(wù)器的大量部署和客戶訪問量的猛增。企業(yè)對于J2EE系統(tǒng)的可伸縮性和高可用性要求越來越高,特別是在電子商務(wù)和金融領(lǐng)域,這個問題越顯的突出。如何設(shè)計和構(gòu)建一個具有可伸縮的,高可用性的J2EE集群應(yīng)用服務(wù)器,成為設(shè)計J2EE應(yīng)用服務(wù)器設(shè)計必須考慮的問題。但J2EE應(yīng)用服務(wù)器的集群是基于EJB組件的集群,和普通Web Server集群技術(shù)有很大的不同。實現(xiàn)的方法也根本不相同。

1 集群系統(tǒng)特點

一個集群系統(tǒng)是一群松散結(jié)合的服務(wù)器組,形成一個虛擬的服務(wù)器,為客戶端用戶提供統(tǒng)一的服務(wù)。對于這個客戶端來說,通常在訪問集群系統(tǒng)時不會意識到它的服務(wù)是由具體的哪一臺服務(wù)器提供。集群系統(tǒng)一般應(yīng)具高可用性、可伸縮性、負(fù)載均衡、故障恢復(fù)和可維護(hù)性等特殊性能。

高 可用性是集群系統(tǒng)最基本的要求,它是對整個系統(tǒng)運行穩(wěn)定性的一個評價??缮炜s性是指整個系統(tǒng)在隨著客戶端用戶數(shù)量的增加而繼續(xù)保持有效響應(yīng)時間的能力。在 一個可伸縮性系統(tǒng)中,隨著用戶數(shù)量的增加,有效響應(yīng)時間變長,成線性變化關(guān)系,這也體現(xiàn)一個系統(tǒng)的峰值負(fù)載處理能力,但隨著越來越多的系統(tǒng)處于Internet上, 用戶訪問的峰值負(fù)載有效預(yù)測已變的不可能。用戶訪問量的猛增,使系統(tǒng)的有效響應(yīng)時間成非線性變化,響應(yīng)時間急劇變長,知道系統(tǒng)不堪重負(fù)而停機(jī)。一般的解決 方法就是通過提升系統(tǒng)硬件系統(tǒng),或通過增加服務(wù)器。但是不合理的增加服務(wù)器只能使整個集群系統(tǒng)變的越來越龐大,系統(tǒng)的這種復(fù)雜化就意味系統(tǒng)故障率變高,隨 之整個系統(tǒng)可靠性、可維護(hù)性都會降低。

所以,一個系統(tǒng)的可用性和可伸縮性是一對矛盾的關(guān)系,而且和整個集群系統(tǒng)的實現(xiàn)方法有很大的關(guān)系。

2         EJB技術(shù)

EJBJ2EE應(yīng)用平臺的核心。SunEJB2.0規(guī)范中對EJB定義如下:EJB是用于開發(fā)和部署具多層結(jié)構(gòu)的、分布式的、面向?qū)ο蟮?/span>Java應(yīng)用系統(tǒng)跨平臺的構(gòu)件體系結(jié)構(gòu)。EJB組件有三中類型:會話bean、實體bean、消息驅(qū)動bean。其中會話bean分為有狀態(tài)和無狀態(tài)兩種。

EJB服務(wù)器的核心是提供EJB使用的一個或者多個EJB容器(Container)。EJB容器管理它所包含的EJB,為EJB組件的生存和執(zhí)行提供了運行環(huán)境,同時也負(fù)責(zé)EJB的事務(wù)管理,安全管理,資源訪問控制和一些異常處理。EJB容器不允許J2EE的客戶端程序直接訪問容器中EJB對象,當(dāng)一個客戶端用戶想訪問一個EJB, EJB規(guī)范中要求客戶使用Java名字和目錄接口JNDIJava Naming and Directory InterfaceAPI來定位Beanhome接口。 要訪問EJB一般需要經(jīng)過以下三步(見圖1)(下面只列舉Remote的調(diào)用):

1)    JNDI中查找Beanhome接口。首先客戶需要獲得一個JNDI的初始化上下文,然后,客戶就可以使用上下文的lookup方法從一個名字對應(yīng)到它的home接口;

2)    使用home接口中的Create()方法獲得BeanRemote接口引用;

3)    通過Remote接口中的方法使用Bean中定義的方法;

一個簡單訪問例子如下:

// 獲得JNDI初始化上下文

Context mycontext// 查找MyEJB,獲得Home對象的引用

Object homeref =  mycontext.lookup(“MyEJB”);

// Home對象造型為RMI-IIOP對象

MyBeanHome home =

(MyBeanHome)PortableRemoteObject(homeref, MyBeanHome.Class);

EJB對象,返回Remote接口

MyBeanRemote  myref = home.create( );

//通過Remote接口調(diào)用EJB中實現(xiàn)的方法

System.out.println ( myref.getname( ));

3 EJB服務(wù)器集群

EJB服務(wù)器的集群是基于組件的一種集群方式,和普通Web Server集群技術(shù)有很大的不同。實現(xiàn)的方法也不相同。又由于EJB規(guī)范中沒有提供任何有關(guān)支持集群的標(biāo)準(zhǔn),即使有的廠商在EJB服務(wù)器中提供了集群特性,但如何具體實現(xiàn)集群也是由廠商自己確定。實現(xiàn)的方法也各不相同。目前,大多數(shù)J2EE應(yīng)用服務(wù)器都提供了集群功能,如Bea WebLogic應(yīng)用服務(wù)器,開放源碼的JBoss應(yīng)用服務(wù)器,Sybase公司提供的J2EE應(yīng)用服務(wù)器等都提供了集群功能。在EJB服務(wù)器集群設(shè)計 中,負(fù)載均衡(Load Balance),EJB集群和HttpSession集群技術(shù)是設(shè)計中涉及到的主要技術(shù)。其中EJB集群的實現(xiàn)是整個系統(tǒng)實現(xiàn)的核心。

 

3.1負(fù)載均衡(Load Balance)

Load Balance 主要的目的在于將訪問系統(tǒng)的負(fù)荷分散在不同的機(jī)器上,使整個系統(tǒng)吞吐量和并發(fā)性得到提高,它能讓多臺服務(wù)器共同承擔(dān)一些繁重的計算或任務(wù),從而消除網(wǎng)絡(luò)瓶頸,提高網(wǎng)絡(luò)的靈活性和可靠性。常見的方法如下:

l         循環(huán)DNS

DNS負(fù)載均衡是一種簡單而有效的方法,該方法使用簡單的域名查詢IP地址來實現(xiàn)一種簡單的負(fù)載均衡。任意給出一個地址,DNS服務(wù)器都有一個IP地址池與之對應(yīng)。每次請求將域名轉(zhuǎn)換成IP地址時,循環(huán)返回IP地址池中的下一個地址。故被稱作DNS round-robin。當(dāng)一個Client訪問時,給請求JNDIInitialContext客戶端傳遞一個DNS名,作為命名服務(wù)器的URL,每個名字被轉(zhuǎn)換成一個不同的地址,使用這個技術(shù),每個客戶端InitailContext請求就被直接發(fā)送到不同的服務(wù)器上。 負(fù)載均衡的一大缺點是:一旦某個服務(wù)器出現(xiàn)故障,即使及時修改了設(shè)置,還是要等待足夠的時間(因為需要一定的刷新時間)才能發(fā)揮作用,在此期間,有些客戶端用戶訪問仍舊將發(fā)送故障服務(wù)器上。

l         軟件Proxy

軟件Proxy維護(hù)連接到一系列服務(wù)器上的打開連接。當(dāng)一個Client訪問服務(wù)器時,先要經(jīng)過這個軟件代理,這個代理能通過一些負(fù)載均衡的算法(如采用類似DNS Round-robin、隨機(jī)方法、訪問權(quán)衡算法 )把一個用戶的訪問重新定向到一個服務(wù)器。這個軟件代理方法能夠及時發(fā)現(xiàn)服務(wù)器死機(jī)或沒有響應(yīng),有效地避免了DNS round-robin方法中出現(xiàn)地故障訪問。

l         硬件均衡器

這種硬件均衡器一般采用地址轉(zhuǎn)換技術(shù),將一個外部地址映射為多個內(nèi)部地址,對每次連接請求動態(tài)使用其中一個內(nèi)部地址,達(dá)到負(fù)載均衡的目的。一般可采用第四層(或4層以上)的交換機(jī)來實現(xiàn),這種交換機(jī)是按照地址和端口進(jìn)行虛擬連接的交換,直接將數(shù)據(jù)包發(fā)送到目的計算機(jī)的相應(yīng)端口。通過交換機(jī)就能將來自外部的初始連接請求,分別與內(nèi)部的多個地址相聯(lián)系,從而建立虛擬連接實現(xiàn)負(fù)載均衡。這種第四層交換基于硬件芯片,因此網(wǎng)絡(luò)傳輸速度和交換速度遠(yuǎn)遠(yuǎn)超過普通軟件代理方式。如采用Cisco CSS 11150(一種L4 Switch)可以實現(xiàn)硬件均衡。

 

3.2 EJB 集群技術(shù)

Client端要訪問EJB容器中EJB都是先要先訪問JNDI命名服務(wù)器[2節(jié)EJB技術(shù)]。所以J2EEEJB服務(wù)器的實現(xiàn)集群( Cluster)核心也就圍繞著JNDI。根據(jù)集群對于JNDI命名樹在系統(tǒng)中管理和組織的不同,一般EJB集群可以分為下面三種:

1)  JNDI樹代理(Proxy

Cluster中每個J2EE Application Server都維護(hù)一個自己的本地私有JNDI樹,Cluster中的每個服務(wù)器不知道其它服務(wù)器的狀態(tài)和存在情況,只有Proxy服務(wù)知道Cluster中每個服務(wù)器的狀態(tài),并且可以訪問Cluster中任何一個服務(wù)器上的JNDI樹,這就要求每個服務(wù)器在啟動和啟動后要不斷地和Proxy服務(wù)保持聯(lián)系,以便Proxy知道它們的工作情況和Cluster所有的EJB對象。Client訪問EJB對象,首先要訪問JNDI Proxy,通過Proxy,可以重新定向訪問到Cluster中所有的EJB對象(見圖2)。這種方法的優(yōu)點是實現(xiàn)簡單,只需要設(shè)計一個JNDI Proxy代理。對于每個應(yīng)用服務(wù)器不做復(fù)雜要求;而且系統(tǒng)的伸縮性好,要升級系統(tǒng),只是簡單增加服務(wù)器就可以。但這種方法有一個致命的缺點,就是Proxy服務(wù)要是失敗,整個Cluster系統(tǒng)將無法正常工作,可靠性差。

 

2) 集中式JNDI

采用集中式集群時,整個集群系統(tǒng)中僅有一個主命名服務(wù)器,它負(fù)責(zé)管理和維護(hù)集群中一個全局、集中的JNDI樹,集群中所有的EJB服務(wù)器在啟動后,都要把要發(fā)布的對象綁定在這臺命名服務(wù)器上,每個EJB服務(wù)器不需要維護(hù)自己的私有JNDI樹,由這臺主命名服務(wù)器來維護(hù)。假如在集群中一個EJB要在多個服務(wù)器上部署,那么每個服務(wù)器可以把同一個home對象綁定到命名服務(wù)器上,當(dāng)一個客戶從命名服務(wù)器請求訪問這個EJBhome對象,可以將所有的home對象引用都返回給客戶端,或者可以按一種均衡算法返回一個服務(wù)器的home對象引用(見圖3)。這種集中式方法要提高整個系統(tǒng)可靠性,必須考慮命名服務(wù)器的備份問題,往往在大系統(tǒng)同時采用多臺命名服務(wù)器,命名服務(wù)器間可以采用JNDI樹復(fù)制方式,或者采用EJB服務(wù)器在多臺服務(wù)器上綁定方式。例如Sybase公司的EJB應(yīng)用服務(wù)器就是采用這種方式,它采用采用CORBA Cos Naming Service集中的管理Cluster中所有應(yīng)用服務(wù)器的JNDI樹。采用這種集中式的設(shè)計模型,系統(tǒng)設(shè)計簡單,但同時為系統(tǒng)帶來了集中式所固有的缺陷。首先,當(dāng)系統(tǒng)設(shè)計中要考慮到命名服務(wù)器備份問題,而且隨著集群系統(tǒng)越來越大,命名服務(wù)器在整個系統(tǒng)種瓶頸問題越顯突出。

 


3) 分布式JNDI

在這種模型中,Cluster中每臺應(yīng)用服務(wù)器都有自己的命名服務(wù)器,命名服務(wù)器不僅維護(hù)私有的本地JNDI樹,同時維護(hù)一個全局共享JNDI樹。本地JNDI樹只綁定本地應(yīng)用服務(wù)器中部署的對象,而全局JNDI樹保存了Cluster中其他應(yīng)用服務(wù)器上的本地JNDI樹副本。這樣Client訪問任何一臺命名服務(wù)器,通過它的本地私有和全局共享JNDI樹就能定位整個系統(tǒng)中部署EJB對象。一般都是采用多播形式,當(dāng)Cluster中一個應(yīng)用服務(wù)器啟動后,加入這個Cluster的多播組,然后再采用IP 多播技術(shù)復(fù)制它的本地JNDI樹到Cluster中其他服務(wù)器上全局共享JNDI樹,這樣Cluster中其他服務(wù)器就擁有它的JNDI樹副本。同時,這臺應(yīng)用服務(wù)器和Cluster中其它服務(wù)器之間一直要保持HeartBeats(心跳)檢測,以隨時檢測其它服務(wù)器的活動狀態(tài),假如有一臺服務(wù)器死機(jī)異常后,這臺應(yīng)用服務(wù)器就要從它的全局共享JNDI樹中刪除這臺異常服務(wù)器JNDI副本,其它活動的服務(wù)器都要做類似的操作。這種分布式模型系統(tǒng)最大的優(yōu)點是具有很強(qiáng)的伸縮性,系統(tǒng)中再添加一臺服務(wù)器,其它的服務(wù)器可以不作任何的變動。而且整個系統(tǒng)采用分布式體系可用性增強(qiáng),系統(tǒng)中任何一臺服務(wù)器死機(jī),都不會影響到整個系統(tǒng)的正常工作。這種方法也是目前采用最多的一種設(shè)計方法。BEA公司WebLogic應(yīng)用服務(wù)器和JBoss應(yīng)用服務(wù)器就采用這種設(shè)計方法。

 

3.3 HttpSession Cluster

J2EEWeb程序Jsp/Servlet中經(jīng)常用到Session對象,它的主要功能是記錄訪問端客戶會話中有關(guān)信息。在一般的Web系統(tǒng)中,在Client訪問階段,假設(shè)系統(tǒng)中Server端死機(jī)后,這次Client訪問中Session中保留的相關(guān)信息將全部丟失。用戶下次訪問就又需要重新開始建立新的SessionHttpSession Cluster的目的就是即使服務(wù)器端系統(tǒng)死機(jī)重新啟動,上次未完成訪問中的Session在系統(tǒng)中仍舊保存,Client可以接著完成上次未完成的訪問。

在一些大型的系統(tǒng)中,同時又成千上萬的用戶同時訪問,要時實的保存所有Client端的Session信息,而且以保證一旦系統(tǒng)失效,系統(tǒng)會重新載入自己的Session狀態(tài),用戶能夠繼續(xù)操作。一般的實現(xiàn)HttpSession Cluster有下面兩種方法:

1)  采用內(nèi)存復(fù)制:

在這個方法中,當(dāng)某臺J2EE Server 中的某個HttpSession某個Object被修改后,或是新增一個Object后,這臺Server可以采用某種通訊方式(如IP Broadcast )將這個Object傳送到其它備份的J2EE Server上,讓其它 J2EE Server上相同的HttpSession同步變化。

2)  集中式:

所謂的集中式處理,與上面的內(nèi)存復(fù)制方法非常相似,不同的是在集中式中,Session中的Object不是送到其它的Server上,而是送到一臺特定的機(jī)器上,在這臺機(jī)器上Object中的信息可以采用對象序列化后文件保存,或者抽象成數(shù)據(jù)后,保存到關(guān)系數(shù)據(jù)庫中。這臺機(jī)器集中管理所有Cluster中的所有Session狀態(tài)和信息。

4 結(jié)語

本文在對于集群系統(tǒng)的方法分析側(cè)重于JNDI樹的實現(xiàn)問題,在實際的設(shè)計中還應(yīng)該具體的考慮到兩種會話Bean,實體Bean和消息驅(qū)動Bean對于集群方法實現(xiàn)的差異性以及它們的故障恢復(fù)技術(shù)。

最后更新: 2007-08-16 12:57
12:57  |   永久鏈接  |   瀏覽 (294)  |   評論  (0)  | java   |  

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多