- J2EE應(yīng)用服務(wù)器集群簡(jiǎn)介 推薦度:
- 相關(guān)推薦
J2EE應(yīng)用服務(wù)器集群
在J2EE應(yīng)用服務(wù)器領(lǐng)域,Jboss是發(fā)展最為迅速的應(yīng)用服務(wù)器。由于Jboss遵循商業(yè)友好的LGPL授權(quán)分發(fā),并且由開源社區(qū)開發(fā),這使得Jboss廣為流行。下面是小編整理的關(guān)于J2EE應(yīng)用服務(wù)器集群,希望大家認(rèn)真閱讀!
摘要
如果你計(jì)劃建立一個(gè)可伸縮的,可用的網(wǎng)站,那么你就需要理解群集.在這篇文章里, Abraham Kang介紹了J2EE群集,說明如何實(shí)現(xiàn)群集, 調(diào)查了Bluestone Total-e-server, Sybase Enterprise Application Server, SilverStream Application Server, 和 WebLogic Application Server在方法上如何不同.掌握了群集知識(shí),你將能夠設(shè)計(jì)和實(shí)現(xiàn)有成效的J2EE應(yīng)用.
在Web上企業(yè)正在選擇Java 2, Enterprise Edition (J2EE)產(chǎn)生他們關(guān)鍵性任務(wù)的應(yīng)用.在J2EE框架里, 集群提供了保證最少下載時(shí)間和最大伸縮性的關(guān)鍵性任務(wù)服務(wù).集群是在一組應(yīng)用服務(wù)器顯式運(yùn)行你的J2EE應(yīng)用,就象一個(gè)實(shí)體一樣, 對(duì)于伸縮來說,你以后會(huì)在集群里引入額外的機(jī)器.確定集群的每個(gè)組件都是冗余的,來保證最少的下載時(shí)間.
在這篇文章里,我們將對(duì)群集,群集方式和重要的集群服務(wù)有個(gè)基本的理解.由于群集方式在行業(yè)應(yīng)用里是多樣的,所以我們將調(diào)查每種方式的好處和缺點(diǎn).另外,我們也將尋找集群在應(yīng)用服務(wù)器里重要的相關(guān)特點(diǎn),并進(jìn)行討論.
為了把我們新獲得的群集知識(shí)應(yīng)用到現(xiàn)實(shí)世界,我們將了解HP Bluestone Total-e-Server 7.2.1, Sybase Enterprise Application Server 3.6, SilverStream Application Server 3.7和 BEA WebLogic Server 6.0它們每一個(gè)是如何實(shí)現(xiàn)集群的.
在后續(xù)的第二部分里,包括群集的編程和失敗轉(zhuǎn)移策略.也測(cè)試了四個(gè)應(yīng)用服務(wù)器產(chǎn)品,了解他們?nèi)绾紊炜s和失敗轉(zhuǎn)移的.
集群定義
J2EE應(yīng)用服務(wù)器提供商給集群下了定義, 一個(gè)集群就是一組在一起工作,顯式提供企業(yè)服務(wù)(支持JNDI,EJB,JSP, HttpSession和組件失敗轉(zhuǎn)移等等)的機(jī)器群.他們特意給出了含糊不清的定義,因?yàn)槊總(gè)提供商實(shí)現(xiàn)群集是有差異的.有些提供商把一個(gè)分發(fā)器放到一組獨(dú)立的機(jī)器前面, 在集群里這些機(jī)器彼此之間互不了解.在這個(gè)方案里,分發(fā)器從用戶那里收到一個(gè)初始的請(qǐng)求,然后由集群里具體的成員服務(wù)器通過HTTP把頭重定向到客戶端應(yīng)答. 另一些提供商實(shí)現(xiàn)了一個(gè)緊密的,完整的機(jī)器聯(lián)盟,每個(gè)機(jī)器都隨著那些機(jī)器上的對(duì)象知道它周圍的其他機(jī)器.
除了機(jī)器外,集群可以包括冗余和失敗轉(zhuǎn)移的能力.
· ·負(fù)載均衡器(Load balancers):
進(jìn)入集群和通行指示器到單個(gè)Web或應(yīng)用服務(wù)器的唯一入口點(diǎn)
·Web servers
·網(wǎng)關(guān)路由器(Gateway routers) 在內(nèi)網(wǎng)外的的出口點(diǎn).
·多層交換器(Multilayer switches)
包和幀過濾確保在集群里的每個(gè)機(jī)器僅僅收到相關(guān)機(jī)器的信息.
·防火墻(Firewalls)
集群保護(hù)器通過端口過濾防止Hackers訪問集群和內(nèi)網(wǎng)
·存儲(chǔ)區(qū)域網(wǎng)絡(luò)交換器(SAN---Storage Area Networking switches)
連接應(yīng)用服務(wù)器,web服務(wù)器,和數(shù)據(jù)庫(kù)到一個(gè)后端存儲(chǔ)媒介;
管理寫數(shù)據(jù)到物理硬盤;還有失敗轉(zhuǎn)移.
·數(shù)據(jù)庫(kù)(Databases)
不管他們是如何實(shí)現(xiàn)的,所有的集群都提供兩個(gè)好處:可伸縮性(scalability)和高可用性(high availability---HA)
可伸縮性(scalability)
伸縮性支持用戶增長(zhǎng)時(shí)保證應(yīng)用服務(wù)質(zhì)量的能力.集群允許你依靠增加額外的服務(wù)器提供額外的容量,因而保證伸縮性.
高可用性(high availability---HA)
HA能被一個(gè)詞概括:冗余.集群使用許多的機(jī)器處理服務(wù)請(qǐng)求.因此,如果在集群里的任何機(jī)器失敗,另外一臺(tái)機(jī)器會(huì)直接接管.
集群僅僅在應(yīng)用服務(wù)器層提供HA.對(duì)于一個(gè)要展示真正HA的Web系統(tǒng),一定象諾亞方舟一樣至少包括Web服務(wù)器,網(wǎng)關(guān)路由器, 交換基礎(chǔ)設(shè)施,等等中的兩種.(關(guān)于HA的更多內(nèi)容,看這個(gè)HA Checklist.)
集群類型
J2EE集群通常流行兩種風(fēng)格:非共享和共享磁盤.在非共享集群里, 每個(gè)應(yīng)用服務(wù)器都有的它自己的文件系統(tǒng), 和這個(gè)集群里運(yùn)行的應(yīng)用程序自己的拷貝相一致.應(yīng)用的更新和增加需要更新集群里的每個(gè)節(jié)點(diǎn).當(dāng)代碼增加和更新發(fā)布時(shí)進(jìn)行配置,大的集群有惡夢(mèng)般的維護(hù).
相反,磁盤共享集群使用一個(gè)所有的應(yīng)用服務(wù)器都用的存儲(chǔ)設(shè)備來獲取在集群里運(yùn)行的應(yīng)用.更新和增加出現(xiàn)在一個(gè)文件系統(tǒng)里,集群里的所有的機(jī)器可以訪問這些變化.直到最近才發(fā)現(xiàn), 單點(diǎn)失敗是這種方法的不利方面.然而,SAN給出了一個(gè)單獨(dú)的邏輯接口,通過這個(gè)接口可以進(jìn)入到一個(gè)提供失敗轉(zhuǎn)移,反饋,和伸縮性的冗余存儲(chǔ)中介
當(dāng)比較J2EE應(yīng)用服務(wù)器的集群實(shí)現(xiàn)時(shí),重要考慮:
·集群實(shí)現(xiàn)
·集群和組件失敗轉(zhuǎn)移服務(wù)
·HttpSession失敗轉(zhuǎn)移
·集群拓?fù)淅锏膯吸c(diǎn)失敗
·柔性拓?fù)湟?guī)劃
·維護(hù)
以后我們將看到四種流行的應(yīng)用服務(wù)器在不同領(lǐng)域如何比較,但是,首先還是讓我們更詳細(xì)的檢查所要考慮的每一項(xiàng).
集群實(shí)現(xiàn)
J2EE應(yīng)用服務(wù)器在他們的JNDI(java命名和目錄接口)實(shí)現(xiàn)周圍實(shí)現(xiàn)了群集.雖然JNDI是J2EE應(yīng)用依賴的核心服務(wù),但是它很難在集群里實(shí)現(xiàn),因?yàn)樗荒馨讯鄠(gè)對(duì)象綁定在單個(gè)名字上.關(guān)于每個(gè)應(yīng)用服務(wù)器的JNDI實(shí)現(xiàn)有三個(gè)普遍的群集方法.
·獨(dú)立的
·中央集中的
·全局共享的
獨(dú)立JNDI樹
HP Bluestone Total-e-Server 和SilverStream Application Server利用了一個(gè)適合于每個(gè)應(yīng)用服務(wù)器的獨(dú)立JNDI樹.在一個(gè)獨(dú)立JNDI樹的集群里成員服務(wù)器不知道或不關(guān)心集群里其他服務(wù)的存在.因此,不支持失敗轉(zhuǎn)移或者通過重定向HTTP或EJB請(qǐng)求的媒介服務(wù)提供支持.配置媒介服務(wù),使他們知道集群里每個(gè)組件都駐留在哪里和萬(wàn)一失敗發(fā)生如何得到一個(gè)替代的組件.
獨(dú)立JNDI樹的集群它的一個(gè)優(yōu)點(diǎn):更短的集群收斂時(shí)間和靈活的伸縮.集群收斂衡量了集群完全知道集群里所有的機(jī)器和相關(guān)對(duì)象的時(shí)間.然而, 在一個(gè)獨(dú)立JNDI樹的集群里收斂(Convergence)并不是一個(gè)要關(guān)心的問題,因?yàn)榧涸趦膳_(tái)機(jī)器一啟動(dòng)就完成了收斂(Convergence).獨(dú)立的JNDI樹的其他優(yōu)點(diǎn):伸縮僅僅需要需要增加額外的服務(wù)器.
然而,也存在幾個(gè)弱點(diǎn).首先,失敗轉(zhuǎn)移通常是開發(fā)者的責(zé)任. 也就是說,因?yàn)槊總(gè)應(yīng)用服務(wù)器的JNDI樹都是獨(dú)立的,所以通過JNDI重新找到的遠(yuǎn)程代理被固定到已出現(xiàn)的lookup服務(wù)器上.在這種情況下,如果調(diào)用EJB的一個(gè)方法失敗了,開發(fā)者必須寫額外的代碼連接到分發(fā)器來獲得另外一個(gè)活動(dòng)服務(wù)器的地址,做另外一次JNDI查找,再一次調(diào)用已失敗的方法. Bluestone實(shí)現(xiàn)了一個(gè)更復(fù)雜的獨(dú)立JNDI樹的形式,就是每個(gè)請(qǐng)求都經(jīng)過EJB代理服務(wù)或者代理LBB (Load Balance Broker).EJB代理服務(wù)保證每個(gè)EJB請(qǐng)求都進(jìn)入一個(gè)活動(dòng)的UBS實(shí)例.這種方案對(duì)每個(gè)請(qǐng)求都添加了額外的反應(yīng)時(shí)間,但是在方法調(diào)用之間允許自動(dòng)的失敗轉(zhuǎn)移.
中央集中JNDI樹
Sybase企業(yè)應(yīng)用服務(wù)器實(shí)現(xiàn)了一個(gè)中央集中JNDI樹的集群.根據(jù)這種設(shè)置,中央集中的JNDI樹利用了CORBA的CosNaming服務(wù).命名服務(wù)器收容了集群的中央集中的JDNI樹,清楚哪個(gè)服務(wù)器出事了.剛一啟動(dòng),集群里的每個(gè)服務(wù)器就綁定它的對(duì)象到它的JNDI樹和所有的命名服務(wù)器.
在一個(gè)中央集中JNDI樹的集群里獲得一個(gè)EJB的引用需要兩個(gè)步驟.首先,客戶端從命名服務(wù)器查找一個(gè)home對(duì)象,返回一個(gè)互操作對(duì)象引用(IOR).一個(gè)IOR指向集群里活動(dòng)的具有home對(duì)象的幾臺(tái)機(jī)器.第二,客戶端挑選出定位在IOR里的第一個(gè)服務(wù)器,得到home和remote.如果在EJB方法調(diào)用之間出現(xiàn)失敗,CORBA stub實(shí)現(xiàn)了重新獲得另外一個(gè)home或者remote的邏輯.這個(gè)home或者remote來自從命名服務(wù)器返回的IOR里列出的一個(gè)替代服務(wù)器.
命名服務(wù)器本身就證實(shí)了中央集中JNDI樹集群的一個(gè)弱點(diǎn).如果你有特定的50臺(tái)機(jī)器的集群,之中有5臺(tái)是命名服務(wù)器,如果5臺(tái)命名服務(wù)器都down掉了,那么這個(gè)集群就變的沒什么用了.當(dāng)然,另外45臺(tái)機(jī)器能運(yùn)行,但是當(dāng)命名服務(wù)器down了,這個(gè)集群將不能為一個(gè)EJB客戶端服務(wù).
如果集群原先的命名服務(wù)器全部發(fā)生了失敗, 在線引進(jìn)一個(gè)額外的命名服務(wù)器就會(huì)出現(xiàn)另一個(gè)問題. 假如這樣做的話,一個(gè)新的中央集中命名服務(wù)器就需要集群里每個(gè)活動(dòng)機(jī)器綁定它的對(duì)象到新的命名服務(wù)器的JNDI樹.雖然當(dāng)綁定過程發(fā)生時(shí)開始收到請(qǐng)求是可能的,但不推薦這樣做,因?yàn)榻壎ㄟ^程延長(zhǎng)了集群的恢復(fù)時(shí)間.此外,來自一個(gè)application或者applet的JNDI lookup,事實(shí)上出現(xiàn)了兩次網(wǎng)絡(luò)調(diào)用.第一個(gè)調(diào)用從命名服務(wù)器重新獲得一個(gè)對(duì)象的IOR,第二的調(diào)用從IOR里指定的一個(gè)服務(wù)器那重新獲得客戶端想要的對(duì)象.
最后,當(dāng)集群數(shù)量增長(zhǎng)時(shí)中央集中JNDI樹的集群承擔(dān)收斂(Convergence)所帶來的增加時(shí)間.就是說當(dāng)你伸縮你的集群時(shí),你必須增加更多的命名服務(wù)器. 緊記命名服務(wù)器所在的機(jī)器和全部的集群機(jī)器通常公認(rèn)的比率是1:10,兩個(gè)命名服務(wù)器是最小數(shù)目.因此,如果你有一個(gè)10臺(tái)機(jī)器的集群和兩臺(tái)命名服務(wù)器,在服務(wù)器和命名服務(wù)器之間綁定的總數(shù)能達(dá)到20,在一個(gè)40臺(tái)機(jī)器的集群和四臺(tái)命名服務(wù)器里,會(huì)有160個(gè)綁定關(guān)系.每個(gè)綁定都表示其中一個(gè)成員服務(wù)器綁定所有的對(duì)象到一個(gè)命名服務(wù)器的JNDI樹的過程.記住,中央集中JDNI樹的集群在所有的JNDI集群實(shí)現(xiàn)之間具有更糟糕的收斂時(shí)間(Convergence time).
全局共享JNDI樹
最后,BEA Weblogic實(shí)現(xiàn)了一個(gè)全局共享的JNDI樹.用這種方式,當(dāng)集群里的一個(gè)服務(wù)器啟動(dòng)時(shí),通過IP廣播宣布它的存在并且把JNDI樹通知給集群里的其它服務(wù)器.群集里的每個(gè)機(jī)器既綁定它的對(duì)象到全局共享JNDI樹,又綁定到它自己的本地JNDI樹.
在每個(gè)成員服務(wù)器里都擁有一個(gè)全局的和本地的JNDI樹,允許生成的home和remote stubs失敗轉(zhuǎn)移,并且提供很快的進(jìn)程里的JNDI lookups. 全局共享JNDI樹在集群里的所有機(jī)器之間都是共享的,允許任何成員機(jī)器知道集群里所有對(duì)象的精確位置.如果在集群里的多個(gè)機(jī)器上對(duì)象是可用的,一個(gè)特殊的home對(duì)象被綁定到全局共享JNDI樹.這個(gè)特殊的home知道所有EJB對(duì)象和與它相關(guān)聯(lián)對(duì)象的位置, 也生成知道所有EJB對(duì)象和與它相關(guān)聯(lián)對(duì)象的位置的remote對(duì)象.
全局共享方式的主要不利方面:當(dāng)服務(wù)器啟動(dòng)時(shí)所產(chǎn)生的大量網(wǎng)絡(luò)初始化傳輸和集群的過分收斂時(shí)間(Convergence time).相反,在一個(gè)獨(dú)立JNDI樹的集群里, 由于沒有JNDI共享信息出現(xiàn),所以收斂并不被看做是個(gè)問題.然而,對(duì)集群里所有機(jī)器來說, 一個(gè)全局共享或者中央集中的集群,建立全局共享或者中央集中JNDI樹都需要花費(fèi)時(shí)間. 實(shí)際上,因?yàn)槿止蚕砑菏褂脧V播傳輸JNDI信息,建立全局共享JNDI樹所需的時(shí)間與以后增加的服務(wù)器數(shù)相比是線性相關(guān)的.
全局共享與中央集中JNDI樹的集群相比主要的好處集中在自由伸縮和高可用性.使用全局共享,你就不必在專門的命名服務(wù)器上亂動(dòng)CPU和RAM,不必在集群里調(diào)整命名服務(wù)器的數(shù)目.當(dāng)然,為了伸縮應(yīng)用程序,僅僅增加更多的機(jī)器就可以.此外,如果集群里的一些機(jī)器down掉了,集群將完全繼續(xù)起作用.最后,和在中央集中JNDI樹的集群里每個(gè)remote lookup都需要兩個(gè)網(wǎng)絡(luò)調(diào)用相比, 每個(gè)remote lookup都只需要一個(gè)單一的網(wǎng)絡(luò)調(diào)用.
所有這些都應(yīng)該打個(gè)折扣,不可全信.因?yàn)檫\(yùn)行在應(yīng)用服務(wù)器上的JSPs,servlets,EJBs,和JavaBeans可以共處在EJB服務(wù)器里.他們總是使用一個(gè)進(jìn)程里的JNDI lookup.緊記,如果你只運(yùn)行服務(wù)器端(server-side)應(yīng)用,那么在獨(dú)立的,中央集中的,或者全局共享的集群實(shí)現(xiàn)幾乎沒有什么差別. 實(shí)際上,每個(gè)HTTP請(qǐng)求在應(yīng)用服務(wù)器上都將結(jié)束,因?yàn)閼?yīng)用服務(wù)器將使用進(jìn)程里的JNDI lookup返回你server-side服務(wù)器里使用的一些對(duì)象.
【J2EE應(yīng)用服務(wù)器集群】相關(guān)文章:
關(guān)于J2EE應(yīng)用服務(wù)器集群簡(jiǎn)介02-27
J2EE應(yīng)用服務(wù)器03-29
什么是J2EE03-16
j2ee介紹03-20
J2EE的概念03-19
J2EE發(fā)展?fàn)顩r03-19
J2EE的基本術(shù)語(yǔ)03-16