高可用集群( High Availability Cluster)
負載均衡集群(Load Balance Cluster)
科學計算集群(High Performance Computing Cluster)
1、高可用集群(High Availability Cluster)
常見的就是2個節點做成的HA集群,有很多通俗的不科學的名稱,比如”雙機熱備”, “雙機互備”, “雙機”。高可用集群解決的是保障用戶的應用程序持續對外提供服務的能力。 (請註意高可用集群既不是用來保護業務數據的,保護的是用戶的業務程序對外不間斷提供服務,把因軟件/硬件/人為造成的故障對業務的影響降低到最小程度)。
2、負載均衡集群(Load Balance Cluster)
負載均衡系統:集群中所有的節點都處於活動狀態,它們分攤系統的工作負載。壹般Web服務器集群、數據庫集群和應用服務器集群都屬於這種類型。
負載均衡集群壹般用於相應網絡請求的網頁服務器,數據庫服務器。這種集群可以在接到請求時,檢查接受請求較少,不繁忙的服務器,並把請求轉到這些服務器上。從檢查其他服務器狀態這壹點上看,負載均衡和容錯集群很接近,不同之處是數量上更多。
3、科學計算集群(High Performance Computing Cluster)
高性能計算(High Perfermance Computing)集群,簡稱HPC集群。這類集群致力於提供單個計算機所不能提供的強大的計算能力。
高性能計算分類:
3.1、高吞吐計算(High-throughput Computing)
有壹類高性能計算,可以把它分成若幹可以並行的子任務,而且各個子任務彼此間沒有什麽關聯。象在家搜尋外星人( SETI@HOME – Search for Extraterrestrial Intelligence at Home )就是這壹類型應用。
這壹項目是利用Internet上的閑置的計算資源來搜尋外星人。SETI項目的服務器將壹組數據和數據模式發給Internet上參加SETI的計算節點,計算節點在給定的數據上用給定的模式進行搜索,然後將搜索的結果發給服務器。服務器負責將從各個計算節點返回的數據匯集成完整的 數據。因為這種類型應用的壹個***同特征是在海量數據上搜索某些模式,所以把這類計算稱為高吞吐計算。
所謂的Internet計算都屬於這壹類。按照 Flynn的分類,高吞吐計算屬於SIMD(Single Instruction/Multiple Data)的範疇。
3.2、分布計算(Distributed Computing)
另壹類計算剛好和高吞吐計算相反,它們雖然可以給分成若幹並行的子任務,但是子任務間聯系很緊密,需要大量的數據交換。按照Flynn的分類,分布式的高性能計算屬於MIMD(Multiple Instruction/Multiple Data)的範疇。
下面說說這幾種集群的應用場景:
高可用集群這裏不多作說明。
想Dubbo是比較偏向於負載均衡集群,用過的猿友應該知道(不知道的可以自行了解壹下),Dubbo同壹個服務是可以有多個提供者的,當壹個消費者過來,它要消費那個提供者,這裏是有負載均衡機制在裏面的。
搜索引擎Elasticsearch比較偏向於科學計算集群的分布計算。
而到這裏,可能不少猿友都知道,集群的壹些術語:集群容錯、負載均衡。
我們以Dubbo為例:
集群容錯(http://dubbo.io/User+Guide-zh.htm#UserGuide-zh-%E9%9B%86%E7%BE%A4%E5%AE%B9%E9%94%99)
Dubbo提供了這些容錯策略:
集群容錯模式:
可以自行擴展集群容錯策略,參見:集群擴展
Failover Cluster
失敗自動切換,當出現失敗,重試其它服務器。(缺省)
通常用於讀操作,但重試會帶來更長延遲。
可通過retries="2"來設置重試次數(不含第壹次)。
Failfast Cluster
快速失敗,只發起壹次調用,失敗立即報錯。
通常用於非冪等性的寫操作,比如新增記錄。
Failsafe Cluster
失敗安全,出現異常時,直接忽略。
通常用於寫入審計日誌等操作。
Failback Cluster
失敗自動恢復,後臺記錄失敗請求,定時重發。
通常用於消息通知操作。
Forking Cluster
並行調用多個服務器,只要壹個成功即返回。
通常用於實時性要求較高的讀操作,但需要浪費更多服務資源。
可通過forks="2"來設置最大並行數。
Broadcast Cluster
廣播調用所有提供者,逐個調用,任意壹臺報錯則報錯。(2.1.0開始支持)
通常用於通知所有提供者更新緩存或日誌等本地資源信息。
負載均衡(http://dubbo.io/User+Guide-zh.htm#UserGuide-zh-%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1)
Dubbo提供了這些負載均衡策略:
Random LoadBalance
隨機,按權重設置隨機概率。
在壹個截面上碰撞的概率高,但調用量越大分布越均勻,而且按概率使用權重後也比較均勻,有利於動態調整提供者權重。
RoundRobin LoadBalance
輪循,按公約後的權重設置輪循比率。
存在慢的提供者累積請求問題,比如:第二臺機器很慢,但沒掛,當請求調到第二臺時就卡在那,久而久之,所有請求都卡在調到第二臺上。
LeastActive LoadBalance
最少活躍調用數,相同活躍數的隨機,活躍數指調用前後計數差。
使慢的提供者收到更少請求,因為越慢的提供者的調用前後計數差會越大。
ConsistentHash LoadBalance
壹致性Hash,相同參數的請求總是發到同壹提供者。
當某壹臺提供者掛時,原本發往該提供者的請求,基於虛擬節點,平攤到其它提供者,不會引起劇烈變動。
算法參見:http://en.wikipedia.org/wiki/Consistent_hashing。
缺省只對第壹個參數Hash,如果要修改,請配置<dubbo:parameter key="hash.arguments" value="0,1" />
缺省用160份虛擬節點,如果要修改,請配置<dubbo:parameter key="hash.nodes" value="320" />