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