現(xiàn)在有越來越多的關(guān)鍵應(yīng)用和大型應(yīng)用是基于J2EE 來創(chuàng)建的,像銀行系統(tǒng)和帳單系統(tǒng)這些關(guān)鍵應(yīng)用要求有很高的可用性,而Google 和Yahoo 這樣的大型應(yīng)用就需要很好的可擴展性。在如今這個聯(lián)系越來越緊密的世界,高可用性和良好的可擴展性的重要性日益突出。例如在1999 年6 月份,eBay 的服務(wù)停止了22 個小時,導(dǎo)致大約230 萬的拍賣被中斷,eBay 的股票也隨之下降
了9.2 個百分點。
J2EE 集群就是一種能夠提供高可用性、可擴展性以及容錯性的流行技術(shù)。但是由于在J2EE 規(guī)范中沒有對集群做出規(guī)范,各個J2EE 廠商就使用不同的方式來實現(xiàn)集群,這樣就給系統(tǒng)架構(gòu)師和開發(fā)人員帶來了很多麻煩。下面就是常見的一些問題:
• 為什么帶有集群支持的商業(yè)J2EE 服務(wù)器產(chǎn)品如此昂貴?(是無集群支持產(chǎn)品的10 倍)
• 為什么在單機環(huán)境下創(chuàng)建的應(yīng)用在集群環(huán)境中無法正常運行?
• 為什么我的應(yīng)用在集群環(huán)境下運行的非常慢,但是在單機模式下卻沒有這個問題?
• 為什么我的集群應(yīng)用在向其他廠商的服務(wù)器遷移時會失敗?
要理解為什么會有這些限制,最好的方法就是研究它的實現(xiàn),以揭開J2EE 集群的面紗。
基本術(shù)語
在我們開始討論對于集群不同的實現(xiàn)之前,我想,了解一下集群技術(shù)的一些基本概念還是很有意義的。希望本章不單單是告訴你這些概念和設(shè)計問題,也同時能夠為你勾勒一下不同J2EE集群實現(xiàn)的框架以便于理解。
可擴展性
在一些大型系統(tǒng)中,很難提前預(yù)知最終用戶的數(shù)量以及他們的使用行為,所以,可擴展性就是指一個系統(tǒng)能夠快速適應(yīng)用戶數(shù)量的增加。提高服務(wù)器處理能力的最直 接的方法就是增加硬件資源,例如CPU、內(nèi)存或者硬盤等。集群是解決這個問題的另外一種方式,它使得一組服務(wù)器共同分擔(dān)繁重的任務(wù),但對于最終用戶來說就 像一臺服務(wù)器。
高可用性
通過向單機添加硬件來擴展系統(tǒng)能力的方案并不可靠,因為單一的服務(wù)器存在一個單點故障。像銀行系統(tǒng)、帳單系統(tǒng)這樣的關(guān)鍵應(yīng)用甚至連一分鐘的停機都不能容 許,它們需要在任何時間都是可用的,并且要能夠保證響應(yīng)速度。集群技術(shù)就可以滿足這個要求,它通過加入冗余服務(wù)器使得在一個服務(wù)器出錯而停止服務(wù)的時候, 這些冗余的服務(wù)器可以繼續(xù)服務(wù)。
負(fù)載均衡
負(fù)載均衡是集群的另外一個關(guān)鍵技術(shù),它通過將請求分發(fā)到不同的服務(wù)器來達到高可用性和高效的處理能力。負(fù)載均衡器可以是一個servlet,也可以是一個 插件(例如Linux 上的ipchains),甚至還可以是一個比較昂貴的內(nèi)嵌了SSL 支持的硬件產(chǎn)品。為了能夠分發(fā)請求,負(fù)載均衡器還需要做一些重要的工作,例如使用“會話粘滯”技術(shù)以確保來自同一個用戶的請求會被轉(zhuǎn)發(fā)到同一個服務(wù)器;使 用“健康檢查”(或者“心跳監(jiān)聽”)技術(shù)來防止將請求轉(zhuǎn)發(fā)到一個失敗的服務(wù)器;有時候負(fù)載均衡器還將參與“失敗轉(zhuǎn)移”的工作。
容錯
高可用的數(shù)據(jù)并不必是嚴(yán)格正確的數(shù)據(jù)。在J2EE 集群中,當(dāng)一個服務(wù)器實例失敗了,在集群中冗余的服務(wù)器就可以處理新到的請求,這樣就保證了服務(wù)依然可用。但是在服務(wù)器失敗的那一刻,正在被處理的請求就 可能無法得到正確的數(shù)據(jù)。那么,帶有容錯功能的集群就可以確保請求所得到的數(shù)據(jù)是正確的,哪怕是服務(wù)器端出現(xiàn)了錯誤。
這個是怎么實現(xiàn)的呢?確實需要我們?nèi)ミM行思考!
失敗轉(zhuǎn)移
在集群中,失敗轉(zhuǎn)移是實現(xiàn)容錯的一個關(guān)鍵技術(shù)。當(dāng)最初的節(jié)點失敗之后,在集群中選擇另外一個節(jié)點來完成處理。失敗轉(zhuǎn)移到其他節(jié)點可以通過編碼實現(xiàn),也可以由平臺自動實現(xiàn)。
冪等方法
如果一個方法使用同樣的參數(shù)進行多次調(diào)用所得到的結(jié)果都一樣,也就是說對于該方法的調(diào)用次數(shù)不影響系統(tǒng),那么這個方法就叫做“冪等方法”。例如 “getUsername()”就是一個冪等方法,而“deleteFile()”就不是冪等的。在討論 HTTP 會話失敗轉(zhuǎn)移和EJB 的失敗轉(zhuǎn)移時,冪等方法是一個很重要的概念
posted on 2009-10-05 11:59
王永慶 閱讀(239)
評論(0) 編輯 收藏 所屬分類:
設(shè)計思想