討論不同實現(xiàn)之前,理解集群技術(shù)的概念是很有意義的,我希望不僅能給你提供關(guān)于J2EE集群產(chǎn)品基本的設(shè)計理念和概念,還可以概括性的描繪不同的集群實現(xiàn),使它們更容易被理解。
1 伸縮性(Scalability)
大型系統(tǒng)很難預(yù)測終端用戶的數(shù)量與行為,伸縮性是指系統(tǒng)可以支持用戶的快速增長。提高服務(wù)器同時處理并發(fā)會話的直覺的方式就是增加服務(wù)器資源(內(nèi)存,CPU,或硬盤),集群是解決伸縮性的另一種可選方式。它允許一組服務(wù)器分擔(dān)處理繁重的任務(wù),而邏輯上就象一臺服務(wù)器一樣。
2 高可用性(High Availability)
提高伸縮性的單服務(wù)器解決方案(添加內(nèi)存和CPU)是并不強(qiáng)壯的辦法,因為單點失效原因。關(guān)鍵任務(wù)應(yīng)用不能容忍服務(wù)中斷哪怕一分鐘。它要求任何時候都可以合理地可預(yù)期的響應(yīng)時間訪問這些服務(wù),集群可以通過提供額外的服務(wù)器使其在一臺服務(wù)器實效時提供服務(wù),從而提高可用性。
3 負(fù)載均衡(Load balancing)
負(fù)載均衡是集群技術(shù)之后的一個關(guān)鍵技術(shù),通過分發(fā)請求到不同的服務(wù)器來提高可用性和更好的性能。負(fù)載均衡器可以是一個Servlet或插件(例如a linux box using ipchains),除分發(fā)請求之外,負(fù)載均衡器應(yīng)負(fù)責(zé)其他一些重要的任務(wù),例如“會話黏附”,使得某個用戶會話始終在一臺服務(wù)器上存活,還有“心跳檢測”,防止分發(fā)請求到失效的服務(wù)器。有時候負(fù)載均衡器也參與到“失效轉(zhuǎn)移”處理。
4 容錯(Fault Tolerance)
高可用性數(shù)據(jù)不必是嚴(yán)格正確數(shù)據(jù).在J2EE集群中,當(dāng)一個服務(wù)器實例失效時,服務(wù)仍然可用,因為新的請求可由其他冗余的服務(wù)器實例處理。但如果請求正在處理當(dāng)中時服務(wù)器實例失效,則不能能得到正確的數(shù)據(jù)。然而容錯服務(wù)則總是保證嚴(yán)格正確的行為。
5 失效轉(zhuǎn)移(Failover)
失效轉(zhuǎn)移是另一項使得集群實現(xiàn)容錯的關(guān)鍵技術(shù)。通過選擇集群中另一個節(jié)點,原始節(jié)點失效時處理將繼續(xù)下去。失效轉(zhuǎn)移可以顯式地編碼也可以由低層平臺自動執(zhí)行。
6 等冪方法(Idempotent methods)
可以用相同的參數(shù)重復(fù)調(diào)用的方法,并且總是得到相同的結(jié)果。這些方法不應(yīng)該影響系統(tǒng)狀態(tài),可以被重復(fù)地調(diào)用而不必?fù)?dān)心改變系統(tǒng)。例如,“getUsername()” 是等冪方法,而“deleteFile()” 就不是等冪方法。等冪是HTTP會話和EJB失效轉(zhuǎn)移的重要概念。