浅谈群集与分布式基础知识
? 長期以來對于做IT的人員來說可能會經(jīng)常聽見一個名詞,群集,什么負(fù)載均衡群集,高可用群集,雙活群集,這對于非相關(guān)人員來說根本不明白是什么意思,好像群集很神秘,很高大上,其實群集的概念并沒有想象中那么復(fù)雜,本文老王會試著用比較簡單的語言,來為大家分享我所學(xué)習(xí)了解的群集知識,盡量讓只有簡單服務(wù)器 網(wǎng)絡(luò)基礎(chǔ)的朋友也可以聽懂,如果有說的不對的地方歡迎指正
? 什么是群集呢,簡單來說,群集就是把一堆計算機組合起來做一件事情,把一堆計算機組合起來一起干活,它們就可以叫做群集,通常群集給人的感覺就好像是一個“整體計算機”在提供服務(wù)。
? ?
? 具體細(xì)化來講,群集又分為可以分為高可用群集,負(fù)載均衡群集,以及高性能計算群集,其中比較常見的是高可用性群集和負(fù)載均衡群集
? 什么是高可用群集呢,所謂高可用群集,即是說該群集具備故障轉(zhuǎn)移切換機制,當(dāng)其中一臺服務(wù)器宕機,其它服務(wù)器可以快速的接管宕機服務(wù)器提供的服務(wù),確保業(yè)務(wù)的持續(xù)可用性,例如,某公司有一個網(wǎng)站平臺,提供網(wǎng)頁端查詢服務(wù),有一個前端和兩個后端,當(dāng)用戶在網(wǎng)頁查詢時,實際上前端會去把請求丟給后端去做查詢,如果我們做了高可用群集,這時候一旦一臺后端壞了,那么前端還可以繼續(xù)使用另外一臺后端進(jìn)行查詢,保證用戶可以正常查詢訪問。
? 這里的關(guān)鍵點在于,高可用群集,通常是用于后端,例如數(shù)據(jù)庫群集,虛擬化群集,應(yīng)用程序群集等有狀態(tài)運行的服務(wù),當(dāng)發(fā)生故障時,需要將宕機服務(wù)器上面運作的內(nèi)容轉(zhuǎn)移至其它活著的服務(wù)器上繼續(xù)運行。既然要做這種轉(zhuǎn)移,那么數(shù)據(jù)庫本身的實體,應(yīng)該存在哪里呢,通常情況下,高可用性群集里面數(shù)據(jù)庫一般會存在于共享的存儲中,即所有群集內(nèi)服務(wù)器都可以訪問到的存儲,這樣當(dāng)切換時,就不需要實際上把數(shù)據(jù)庫拷貝轉(zhuǎn)移過去,真正轉(zhuǎn)移的,只是承擔(dān)數(shù)據(jù)庫查詢服務(wù)器的這個角色,從而大大減少了轉(zhuǎn)移所需要花費的時間,還有一種場景是所有群集內(nèi)服務(wù)器數(shù)據(jù)庫內(nèi)容都存放在節(jié)點本機,然后節(jié)點間相互做存儲的復(fù)制也是可以的。
? 還有個關(guān)鍵內(nèi)容,剛才我們說過群集給人的感覺就好像是一個整體的計算機在提供服務(wù),那么用戶或者是前端程序是怎么感應(yīng)到后端的群集的呢,通常情況下,不論是高可用群集,負(fù)載均衡群集,還是高性能群集,都會提供一個群集化的管理名稱,例如,當(dāng)我們從前端去查詢到后端服務(wù)器的時候,實際上我們是查的群集管理名稱,而不是去查單一的數(shù)據(jù)庫服務(wù)器名稱,群集會幫我們和其中的節(jié)點建立聯(lián)系,這樣連接到群集化的管理名稱后,當(dāng)群集內(nèi)的服務(wù)器出現(xiàn)故障,群集會自己去根據(jù)情況做出處理相應(yīng),重新挑選合適的節(jié)點提供服務(wù),對于使用方來說是不會過多的感知的,前端或者用戶始終是訪問同一個群集名稱。
這里我們說了高可用群集的幾個特征,希望大家記住
1.高可用群集通常用于后端程序,例如數(shù)據(jù)庫,虛擬化主機
2.高可用群集通常情況下所有群集內(nèi)服務(wù)器都訪問了共享存儲,便于發(fā)生故障快速轉(zhuǎn)移
3.高可用群集提供統(tǒng)一對外的群集化管理名稱
4.高可用群集主要用于提供有狀態(tài)服務(wù)的持續(xù)運行,確保單臺后端節(jié)點宕機不會影響業(yè)務(wù),可以提供故障轉(zhuǎn)移機制
除了以上四點,通常情況下高可用群集還應(yīng)該具備以下幾個特點
1.高可用群集應(yīng)該具備心跳檢測機制,即群集,群集節(jié)點間,應(yīng)該可以通過某種機制,得知對方是否存活,通常情況下群集系統(tǒng)會將次實現(xiàn)為ping檢測,實際旳握手檢測,或基于給定的API檢測
2.高可用群集中各個節(jié)點通常可以感應(yīng)到群集內(nèi)各個節(jié)點當(dāng)前承擔(dān)的群集角色,以便發(fā)生故障時可以進(jìn)行轉(zhuǎn)移
3.高可用性群集中各個節(jié)點通常可以感應(yīng)到群集內(nèi)節(jié)點的新增,添加,刪除,上線,下線等狀態(tài)。
4.高可用群集通常群集自身,以及各節(jié)點應(yīng)該具備自身健康監(jiān)測,通常實現(xiàn)為一種類似于投票的機制,每個節(jié)點確保自己是健康的情況下可以發(fā)出一個聲明(投票),讓群集知道我當(dāng)前是可以提供群集功能的節(jié)點,當(dāng)整個群集內(nèi)如果不健康,即未能投票的節(jié)點(也可能是節(jié)點+見證) 達(dá)到一定數(shù)量時,即會判定整個群集當(dāng)前不健康,不能正常提供群集工作,會出現(xiàn)停止提供服務(wù),或暫停等狀態(tài)
以上為關(guān)于高可用性群集的簡單介紹,及特征描述,在文章后面部分我會為大家進(jìn)行多次舉例,幫助大家理解高可用群集的概念
高可用群集常見的名詞解釋:
節(jié)點:通常指群集內(nèi)參與協(xié)作工作的單個服務(wù)器
群集應(yīng)用:通常是指運行在一個已經(jīng)實現(xiàn)了高可用性機制的群集上的應(yīng)用,群集會通過相應(yīng)的的檢測機制確保應(yīng)用的健康狀態(tài),通常群集應(yīng)用會被托管運行在群集中的單個節(jié)點上,當(dāng)該節(jié)點出現(xiàn)故障時,群集會將群集應(yīng)用轉(zhuǎn)移至其它活著的節(jié)點上繼續(xù)運行,保證群集應(yīng)用一直是可用的。
群集磁盤:通常是指高可用性群集內(nèi)已經(jīng)實現(xiàn)為可以被群集內(nèi)服務(wù)器共同訪問的共享磁盤,通常情況下在某一時刻單塊群集磁盤會被掛載上線在群集中的單個節(jié)點上
故障轉(zhuǎn)移群集:通常描述為一種高可用性群集類型,通常故障轉(zhuǎn)移群集指同一時刻群集內(nèi)只有一臺節(jié)點提供群集應(yīng)用的訪問服務(wù),當(dāng)這臺服務(wù)器出現(xiàn)故障時,群集系統(tǒng)可以快速做出反應(yīng),將故障節(jié)點上面承載的群集應(yīng)用轉(zhuǎn)移至其它活著的節(jié)點提供服務(wù)。
計劃內(nèi)停機時間:已經(jīng)可以被預(yù)見,被預(yù)料的正常停機時間,例如群集服務(wù)器進(jìn)行計劃性的補丁修復(fù),網(wǎng)絡(luò)切換,服務(wù)器升級等,通常計劃內(nèi)停機時間對于業(yè)務(wù)來說是在可以被接受的范圍,可以在已知情況下利用實時遷移,在線轉(zhuǎn)移等技術(shù)完成轉(zhuǎn)移,最小化停機時間,順利完成計劃內(nèi)的維護工作
計劃外停機時間:不可被預(yù)見的,忽然發(fā)生的災(zāi)難性停機,例如在不知情的情況下服務(wù)器電源壞掉,硬盤不可訪問,造成業(yè)務(wù)層面不可訪問,是較為嚴(yán)重的,通常情況下企業(yè)會實現(xiàn)例如高可用性群集,或者災(zāi)難備份來應(yīng)對計劃外停機事件發(fā)生,通常情況下SLA的計算,真正會被承認(rèn)宕機時間的也就是說的這段計劃外的停機事件
群集管理名稱:群集對外的一個集中的,邏輯的名稱,該名稱在域范圍,解析范圍內(nèi)應(yīng)該是唯一的,不可重復(fù)的,前端程序或者用戶訪問群集始終是訪問的群集管理名稱,也可以叫做群集對外名稱,通常情況下,如果在高可用性群集里面實現(xiàn)基于群集的高可用的應(yīng)用,也會有單獨的虛擬應(yīng)用名稱,這個名稱應(yīng)該是基于群集管理名稱創(chuàng)建出來的,或依附于群集管理名稱,群集管理名稱會提供的是一個邏輯的訪問域名,或一個群集的IP地址,群集管理名稱或群集IP地址通常會綁定在活著的一個群集節(jié)點上,對于用戶和前端實現(xiàn)了邏輯屏蔽機制,前端只知道我去連接到這樣一個域名,但并不會知道群集內(nèi)有幾臺服務(wù)器在提供服務(wù)。
在高可用群集中通常又分為多種形態(tài),以從運行模式和群集存儲模式為例
高可用群集的運作模式通常又分為主從模式,互備模式,雙主模式
主從模式:也叫做AP模式(active-passive)同一時刻一個群集應(yīng)用只能在一個節(jié)點上運行提供服務(wù),當(dāng)前端或用戶通過群集管理名稱訪問時只會有一臺服務(wù)器提供服務(wù),這臺服務(wù)器扮演主服務(wù)器角色,其它服務(wù)器扮演備服務(wù)器角色,當(dāng)主服務(wù)器不可用時,群集會感知到主服務(wù)器壞了,然后切換至其它備服務(wù)器繼續(xù)提供服務(wù)。
互備模式:這種模式,有人也叫它是AA模式,對此嘛老王也是持有保留意見的,說它是雙活的,似乎也無可非議,但平常會需要浪費掉一半的群集計算資源這個。。。舉個例子,如果是一套數(shù)據(jù)庫群集,是可以做到多個實例,兩個節(jié)點的話,比如節(jié)點一是實例一的主節(jié)點,實例二的備節(jié)點,節(jié)點2是實例1的備節(jié)點,實例2的主節(jié)點,這樣以多花費一半的資源的代價下實現(xiàn)了兩個服務(wù)器都可以同時對外提供服務(wù),但是,一旦節(jié)點1這時候出現(xiàn)故障,節(jié)點2就需要承載兩個實例,要實現(xiàn)這種模式的高可用性群集,需要做好服務(wù)器的規(guī)劃,確保每臺服務(wù)器都是可以承載兩個實例的配置才行。
雙主模式:也叫做AA(active-active)模式,在老王看來,真正的雙主,或者說雙活A(yù)A模式群集,應(yīng)該是這樣的,例如在群集系統(tǒng)基礎(chǔ)上實現(xiàn)負(fù)載均衡器機制,或者在群集系統(tǒng)前面再擺一個負(fù)載均衡器,真正的雙活模式,應(yīng)該是用戶訪問時會通過負(fù)載均衡機制把用戶請求丟給群集里面一個節(jié)點,下一個用戶訪問又是另外一個節(jié)點,這樣真正的節(jié)點同時對外提供服務(wù),老王認(rèn)為才是真正的AA模式,目前看起來MySQL上的Amoeba是這樣,微軟的SOFS也是這樣。
從群集存儲模式區(qū)分
通常情況下分為
共享磁盤模式
? ?即所有群集節(jié)點都訪問共享的群集磁盤,群集應(yīng)用數(shù)據(jù)也寫入到共享磁盤中,通常情況下此架構(gòu)下實現(xiàn)為AP模式較多,缺點就是會對群集資源進(jìn)行浪費,同一時間只有一臺節(jié)點提供服務(wù),存儲是單一故障點,需要考慮存儲的高可用,少數(shù)群集應(yīng)用可以實現(xiàn)共享磁盤模式下的雙活,例如oracle rac,可以在使用共享磁盤的情況下,負(fù)載均衡各個節(jié)點負(fù)載,讓多個節(jié)點同時對外提供服務(wù)。
無共享磁盤模式
? ?即所有每個群集節(jié)點都在節(jié)點本身寫入數(shù)據(jù)磁盤,不使用共享磁盤,但各節(jié)點之間可以進(jìn)行數(shù)據(jù)磁盤數(shù)據(jù)的同步,通常實現(xiàn)為主服務(wù)器和輔助服務(wù)器,主服務(wù)器提供讀寫服務(wù),輔助服務(wù)器從主服務(wù)器復(fù)制數(shù)據(jù)庫,當(dāng)故障發(fā)生時,通常可以執(zhí)行手動故障轉(zhuǎn)移,或配合見證機制實現(xiàn)自動故障切換,一些群集應(yīng)用也會提供輔助服務(wù)器的可讀功能,通常數(shù)據(jù)庫應(yīng)用中使用。
? ?有朋友看到這里可能會問,有必要嗎,企業(yè)有必要做這種高可用性群集嗎,這東西涉及到這么多概念,其實真的很有必要,設(shè)想一下,一個云盤網(wǎng)站,或者一個購物網(wǎng)站,肯定是希望24小時能夠正常提供服務(wù)的,一旦沒有實現(xiàn)高可用群集,那網(wǎng)站后臺只有一臺服務(wù)器,這臺服務(wù)器壞了,所有客戶都將無法訪問購物網(wǎng)站或者云盤網(wǎng)站,這對于運營商來說是災(zāi)難性的,會導(dǎo)致業(yè)務(wù)損失,喪失用戶對你網(wǎng)站的信心,因此,老王認(rèn)為凡是成熟的商業(yè)網(wǎng)站,都應(yīng)該實施高可用群集,來保證可以持續(xù)提供服務(wù),即使沒有條件實施高可用群集,也應(yīng)該實施備份恢復(fù)等機制。
接下來負(fù)載均衡群集
? ?這類群集很好理解,我們上面講了高可用群集,或者說是故障轉(zhuǎn)移群集,主要強調(diào)的是,群集應(yīng)用同一時間只在一個節(jié)點上運行,同時會讀取寫入內(nèi)容到共享磁盤,檢測到一臺節(jié)點宕機,群集會把角色服務(wù)等有狀態(tài)的內(nèi)容轉(zhuǎn)移至另外一個節(jié)點上繼續(xù)運行。負(fù)載均衡群集主要倡導(dǎo)的概念和故障轉(zhuǎn)移群集有所不同,在負(fù)載均衡群集中,通常各節(jié)點間都是無狀態(tài)的,也并沒有共享磁盤,發(fā)生故障時候也不用把自身承載的內(nèi)容轉(zhuǎn)移給其它節(jié)點,因為在負(fù)載均衡群集中,每個節(jié)點的內(nèi)容都是一致的,冗余的,負(fù)載均衡群集只是提供一個均衡機制,可以確保用戶的訪問請求,會在不同的,具備相同冗余內(nèi)容的節(jié)點上進(jìn)行負(fù)載均衡,當(dāng)其中一個節(jié)點不可用,負(fù)載均衡群集直接自動路由到其它可用的節(jié)點上繼續(xù)為用戶提供服務(wù)。
? ?負(fù)載均衡群集,通常也叫做前端群集,它與故障轉(zhuǎn)移群集的相同點是他們都提供一個對外的群集訪問名稱,當(dāng)用戶訪問一個負(fù)載均衡群集時,感覺上就好像是在訪問一臺服務(wù)器一樣,但其實負(fù)載均衡會根據(jù)算法去負(fù)載均衡,讓不同用戶訪問到不同的服務(wù)器上。不同點在于,故障轉(zhuǎn)移群集需要進(jìn)行故障轉(zhuǎn)移,當(dāng)檢測到一個節(jié)點宕機,其它節(jié)點會檢查群集數(shù)據(jù)庫,查詢宕機節(jié)點承載服務(wù),然后進(jìn)行上線。負(fù)載均衡群集則不會發(fā)生這種故障轉(zhuǎn)移過程,因為負(fù)載均衡群集提倡的是無狀態(tài)的,每個節(jié)點上的資源都是一樣的,一個節(jié)點宕機,直接負(fù)載均衡至其它節(jié)點上,并不會產(chǎn)生離線上線角色轉(zhuǎn)移等事情。
? ?因此負(fù)載均衡群集特別適合于像是Web前端這樣的應(yīng)用,通過負(fù)載均衡讓每個節(jié)點都提供服務(wù),最大化利用群集資源,在某些程度上也可以提供Web前端的處理能力
? 負(fù)載均衡群集系統(tǒng)通常具備以下特點
1.負(fù)載均衡群集系統(tǒng)通常可以設(shè)定基于IP、端口等進(jìn)行負(fù)載調(diào)度分發(fā)
2.負(fù)載均衡群集系統(tǒng)通常可以設(shè)定群集各節(jié)點負(fù)載均衡的比例,例如可以指定節(jié)點1承載60%的請求,節(jié)點20承載40%的請求
3.負(fù)載均衡群集系統(tǒng)通常可以設(shè)定優(yōu)先級,可以根據(jù)優(yōu)先等級進(jìn)行調(diào)度,排隊,丟棄,分配。
4.負(fù)載均衡群集系統(tǒng)通常可以基于上下文感知,例如根據(jù)不同的請求內(nèi)容,分配到不同的節(jié)點服務(wù)器。
5.負(fù)載均衡群集系統(tǒng)通常也需要心跳檢測機制,確保每次挑選出來提供負(fù)載均衡服務(wù)的機器都是健康可用的,負(fù)載均衡系統(tǒng)需要知道群集內(nèi)節(jié)點的存活狀態(tài),當(dāng)其中一個節(jié)點不可用時,下次群集將不會將負(fù)載均衡請求丟至該節(jié)點,通常實現(xiàn)為ping檢測,或?qū)嶋H的路徑網(wǎng)頁訪問檢測。
? 通常情況常見負(fù)載均衡群集有微軟的NLB,ARR,linux下面的LVS、HAProxy、Nginx等解決方案
? 還有一種最簡單的負(fù)載均衡群集實現(xiàn)方式,DNS輪詢,其實嚴(yán)格來講老王認(rèn)為這只是種簡單的輪詢技術(shù),并不能稱得上是負(fù)載均衡或者群集
? ?DNS輪詢做的,只是將同一個域名的訪問解析到不同的服務(wù)器上,但是解析負(fù)載并不是均衡的,也并不是可控的,當(dāng)其中一個節(jié)點宕機,DNS輪詢還會繼續(xù)輪詢到該地址,并不具備檢測機制,而且DNS通常還具備緩存機制,例如當(dāng)前域名解析到的服務(wù)器出現(xiàn)故障,你重新分配至其它服務(wù)器,但客戶端也并不會立刻可用,除非等到DNS緩存超時
? ?因此DNS輪詢系統(tǒng)通常用于最簡單,對于負(fù)載均衡,故障轉(zhuǎn)移沒有過多要求的Web前端服務(wù)器,通常情況下使用DNS輪詢系統(tǒng)并不會單獨使用它,而是會配合nginx,arr,LVS等負(fù)載均衡群集技術(shù)一起實現(xiàn)。
? ?當(dāng)我們實現(xiàn)了負(fù)載均衡之后,假設(shè)現(xiàn)在是三個節(jié)點的一個負(fù)載均衡群集,提供一個群集訪問名稱進(jìn)行訪問,每次用戶發(fā)起訪問,負(fù)載均衡群集會根據(jù)綜合調(diào)度策略,優(yōu)先級,上下文等算法選出一臺合適的節(jié)點來提供服務(wù),這時候如果當(dāng)這臺節(jié)點壞掉,或者用戶被負(fù)載均衡到了其它節(jié)點上,那么用戶session如何處理是個問題,例如當(dāng)前負(fù)載均衡群集是個購物網(wǎng)站,用戶正在購買東西添加至購物車,這時候忽然節(jié)點1出現(xiàn)故障,負(fù)載均衡會自動切換到節(jié)點2提供服務(wù),但是,之前用戶已經(jīng)與節(jié)點1建立了session狀態(tài)鏈接,即用戶的登陸信息,會話信息,雖然說負(fù)載均衡群集可以切換到其它節(jié)點繼續(xù)提供服務(wù),但是之前在節(jié)點1建立的session則會丟失,即是說,這時候一旦節(jié)點1壞了,切換到節(jié)點2,需要用戶重新登錄才可以,頻繁需要重新登錄這對于用戶來說是不可接受的,特別是對于一些嚴(yán)重依賴于session的網(wǎng)站
? ?因此實現(xiàn)了負(fù)載均衡群集之后,session存在哪里是個問題,是使用session保持技術(shù),還是將session存在數(shù)據(jù)庫,或單獨實現(xiàn)session server是值得思考的問題。
? ?簡單總結(jié)下,高可用群集通常指的是后端群集,當(dāng)發(fā)生故障時,會發(fā)生實際的故障轉(zhuǎn)移,將被宕機節(jié)點上已有的群集應(yīng)用,群集資源等有狀態(tài)性的資源服務(wù),轉(zhuǎn)移至其它活著的節(jié)點上繼續(xù)運行。
? ?負(fù)載均衡群集通常是指的前端群集,部署多個內(nèi)容一致的無狀態(tài)服務(wù)器,負(fù)載均衡群集根據(jù)綜合算法,將每次用戶的請求轉(zhuǎn)發(fā)至不同的合適的節(jié)點上進(jìn)行工作,并不會發(fā)生有狀態(tài)的故障轉(zhuǎn)移,單臺節(jié)點下線,負(fù)載均衡只是自動轉(zhuǎn)發(fā)請求到其它節(jié)點上。
? ?在講高性能計算群集之前,老王想先和大家談?wù)劮植际?#xff0c;以及分布式和群集的區(qū)別
? ?在老王看來,分布式主要強調(diào)的更多的是一種對于應(yīng)用處理實現(xiàn)的一種思維,算法的實現(xiàn)方式,分布式更多的時候指的是把一項工作,分?jǐn)偝啥鄠€小任務(wù),交給不同的節(jié)點去處理,然后把多個節(jié)點處理的結(jié)果最終匯集出成果,分布式中的節(jié)點不同于群集,一個分布式節(jié)點可以是群集,也可以是單機,分布式的核心思維是利用多個節(jié)點分?jǐn)倎硗瓿晒ぷ?#xff0c;每個節(jié)點完成的任務(wù)都是不一樣的,以眾人合力來達(dá)成同一個目標(biāo),老王認(rèn)為這就是分布式的思想。
? ?而群集的概念相對來說,主要是指將一組服務(wù)器結(jié)合在一起共同協(xié)作,群集主要強調(diào)的是,我們來共同維護這一件工作,保證這項工作始終是可以正常對外提供服務(wù)的,強調(diào)的是集中維護一件事,確保單一工作的持續(xù)可用或均衡負(fù)載。
? ?
? ?例如一家蛋糕店,要賣蛋糕,群集是為了確保賣蛋糕這件事始終是可以正常運行的,例如如果是群集的思維,可能是正常情況下一個服務(wù)員賣蛋糕,這個服務(wù)員生病了,其它服務(wù)員立刻接受她的工作繼續(xù)賣蛋糕,這里我們把服務(wù)員形成了一個群集,賣蛋糕就是個群集對外訪問名稱,他們共同完成賣蛋糕這一件事,群集還可能是開了多個窗口,有兩個服務(wù)員一起買蛋糕,這就是群集中所說的雙活模式。
? ?不論是負(fù)載均衡群集和高可用群集,它們強調(diào)的概念都是利用多臺計算機做好同樣的一件事,這里關(guān)鍵的點在于,群集的概念中比較看重一致性,例如負(fù)載均衡群集,集中對外提供訪問,但每臺機器必須內(nèi)容是一致的,故障轉(zhuǎn)移集群,必須確保每臺機器都能知道對方正在運行的負(fù)載,發(fā)生故障時必須一致的把原節(jié)點承載的應(yīng)用進(jìn)行上線。
? ?
? ?分布式這個詞通常用于,分布式算法,分布式計算等詞語,通常它們指的都是通過一種,將一項工作,分解成多個小任務(wù)同時執(zhí)行,然后利用多個節(jié)點的能力,匯集起來完成整體的目標(biāo),例如賣蛋糕這個例子,分布式的思維,強調(diào)的就是把賣蛋糕分解成多個步驟,例如1個服務(wù)員負(fù)責(zé)給客戶裝袋子,一個服務(wù)員負(fù)責(zé)給客戶取蛋糕,兩個服務(wù)員共同完成了賣蛋糕這件事。
? ?所謂的分布式群集,在老王看來,也是一種分布式技術(shù)和群集技術(shù)的整合,能夠?qū)崿F(xiàn)這種技術(shù),前提要求群集必須要能夠支持識別這種分布式技術(shù),然后分布式技術(shù)利用多個服務(wù)器組合起來形成的群集技術(shù)來完成分布式的計算。
??
? ?通過上述解釋相信大家可以看懂,群集主要強調(diào)的是把一組計算機組合起來協(xié)作工作,共同對外提供服務(wù)的能力,大家共同確保一件事的正常運行,或多個節(jié)點每個節(jié)點都運行同一件事的能力。?
? ?分布式主要強調(diào)的是將一件事分?jǐn)偝啥鄠€不同的小事,利用多個節(jié)點處理的能力來有效率的共同完成大目標(biāo),實務(wù)應(yīng)用中,通常情況下,分布式多用于像是科研探索,工業(yè)計算,大數(shù)據(jù)等領(lǐng)域,將真正復(fù)雜的事情,單臺服務(wù)器上執(zhí)行效率低的事情,分?jǐn)偟蕉嗯_服務(wù)器,利用多臺服務(wù)器的計算能力來共同完成這一件事。
? ?分布式計算技術(shù)也經(jīng)常被一些國際科研組織使用,通過我們每個人共享自己電腦閑時的運算能力,進(jìn)行分布式運算,完成后再把計算結(jié)果通過網(wǎng)絡(luò)發(fā)送回服務(wù)器,這樣的計算方式可以幫助一些進(jìn)行大型計算研究的機構(gòu)加速進(jìn)步的速度。
? ?說到分布式計算,不得不提并行計算和串行計算,通常情況下在并行計算和串行計算都是指應(yīng)用程序運行執(zhí)行的一種形態(tài),例如,并行則是說單個應(yīng)用可以同時在單機多個CPU下面執(zhí)行,或者是指同一時間,多個節(jié)點同時處理運算負(fù)載的能力。相對來說,串行計算則是指運算過程必須按照順序執(zhí)行,只有運行完整個job才可執(zhí)行下一個。并行計算則是多個節(jié)點同時運行多個job,不需要等待前一個完成再進(jìn)行計算
? ?如果一個計算是串行工作的,即使它是在群集上跑的,也不是并行計算
? ?相對來說,老王認(rèn)為分布式計算與并行計算差不太多,首先它們都對計算節(jié)點沒有過多的要求,節(jié)點服務(wù)器不必一定要使用專用的高級服務(wù)器,正常的商用服務(wù)器或者工作站都可以完成分布式計算,大體強調(diào)的都是將一項復(fù)雜的工作,分成多個子任務(wù),然后節(jié)點執(zhí)行完成后匯集起來形成結(jié)果。
? ?通常情況下,分布式計算更加適用于在計算尋找模式的東西,分析計算,相加計算等。分布式的計算被分解后的小任務(wù)互相之間有獨立性,節(jié)點之間的結(jié)果幾乎不互相影響,實時性要求不高,比較松散化。
? ?并行計算則比較傾向于一些海量數(shù)據(jù)進(jìn)行分析處理的場合,每個節(jié)點的每一個任務(wù)塊都是必要的,計算的結(jié)果相互影響,要求每個節(jié)點的計算結(jié)果要絕對正確,并且在時間上做到同步
? ?解釋完了分布式之后,我們回過頭來看下高性能計算集群,也可以說是高性能計算
? ?
? ?我們先來看看群集的關(guān)注點
? ?高可用群集更關(guān)注的是我這個群集對外提供的正常可用時間有沒有達(dá)到幾個九
? ?負(fù)載均衡群集群集更關(guān)注的是我這個負(fù)載均衡群集可以同時支持的訪問數(shù)量,以及節(jié)點的負(fù)載情況是否符合預(yù)期
? ?高性能群集,則更加關(guān)注群集整體的計算性能,群集到底每秒能處理多少數(shù)據(jù),群集處理數(shù)據(jù)的速度可以達(dá)到多塊,老王認(rèn)為高性能群集是個大的概念,它的目的是要群集獲取最快最高的計算能力,因此,一個高性能計算,可以能會包括分布式的job調(diào)度,并行運行的能力,也可能會結(jié)合負(fù)載均衡,故障轉(zhuǎn)移等機制,確保計算能力的持續(xù)可用
? ?和我們前面說的不同,高性能群集通常會采用專用的操作系統(tǒng),專用的高端服務(wù)器,和我們平時用的普通商用服務(wù)器不同,高性能服務(wù)器通常會具備很多顆CPU,巨大的內(nèi)存,高性能服務(wù)器之間通常會使用最新最快最可靠的網(wǎng)絡(luò)技術(shù),例如InfiniBand的網(wǎng)絡(luò)互連,單個高性能服務(wù)器硬件的處理性能在高性能計算中很重要,除了硬件外,通常高性能計算會通過專用的系統(tǒng)進(jìn)行管理控制,在管理過程中,可以把整個高性能群集的計算能力集中進(jìn)行分配處理,最終提供整個高性能群集計算能力。
? 通常情況下高性能計算群集更多的會被應(yīng)用于數(shù)學(xué),工業(yè),科研領(lǐng)域等,需要在短時間內(nèi)處理多維度的計算,這時候可以利用高性能計算群集的能力,來完成復(fù)雜的科學(xué)計算。
? 像是這些年除了高性能計算群集,也聽到有人提過超算,我們國家的神威,天河1號,天河2號等等,實際上老王老王認(rèn)為高性能計算和超算差不多,都是為了提供最高的性能和最快的處理能力,最早期的超算,通常指的是單一的大型機器,高速度,大容量,具備特殊的CPU內(nèi)存,當(dāng)時最早有美國ILLIAC-IV,歐洲尤金,中國銀河等等,最早的超級計算機只能用于政府,能源軍方,航天等,只有很少數(shù)的人可以用到,后來隨著信息化的逐漸發(fā)展,一些企業(yè)也有了需要用到超算能力的需求,怎么辦,于是后來開始提出做群集把,我們通過把一些高性能服務(wù)器通過高速網(wǎng)絡(luò)鏈接起來形成群集,然后群集利用每個節(jié)點的能力綜合起來提供整體運算能力吧,于是后來開始有很多廠商推出這種高性能群集,將原來超級計算機一個龐然大物的運算能力,由多個節(jié)點結(jié)合起來實現(xiàn)。
? 甚至老王認(rèn)為我國的天河2號等超算,背后也是基于這種高性能群集技術(shù)實現(xiàn)的,將多臺配置性能極高的節(jié)點盡可能的靠近,綜合利用他們的運算能力一起完成并行的運算,如果說差異的話,老王認(rèn)為能夠稱得上是超算的,通常規(guī)模會比普通的高性能計算大一些,定制化的硬件會更多,更加特定化,例如天河2號可能會使用特定的CPU,特定的內(nèi)存,以及特定的服務(wù)器架構(gòu),提供也運算能力也更加強大。
案例總結(jié)
一個虛擬化群集,由多臺物理機組成,在群集中創(chuàng)建了虛擬機,存放在共享磁盤中,當(dāng)檢測到一臺物理機宕機,虛擬機會轉(zhuǎn)移到其它節(jié)點繼續(xù)運行。這是高可用群集
一個數(shù)據(jù)庫群集,由多臺服務(wù)器組成,基于群集創(chuàng)建了數(shù)據(jù)庫的實例,數(shù)據(jù)庫內(nèi)容存放在共享磁盤中,當(dāng)檢測到一臺數(shù)據(jù)庫服務(wù)器宕機,數(shù)據(jù)庫服務(wù)器角色會轉(zhuǎn)移到其他節(jié)點繼續(xù)運行。這是高可用群集
由多臺相同網(wǎng)站內(nèi)容的無狀態(tài)Web服務(wù)器組成,通過統(tǒng)一的域名訪問,所有節(jié)點輪詢對外提供訪問服務(wù),一臺Web服務(wù)器下線,用戶自動訪問其他節(jié)點,這是負(fù)載均衡群集。
國際某組織,要探索外星文明,發(fā)起活動組織每個人可以將電腦空閑的運算能力集中起來,把探索任務(wù)細(xì)分到每個愿意提供運算能力的電腦上面,將運算結(jié)果執(zhí)行后返回給中央服務(wù)器,這是種分布式計算
某組織需要進(jìn)行每秒100萬的運算,需要并行處理多個維度的公式,將運算程序丟給群集,群集快速完成返回運算結(jié)果。這是種高性能計算。
以上為老王群集系列的開篇,雖然沒有像想象中那樣寫的盡善盡美,不過已經(jīng)用心了就好,希望會有朋友看到老王的這篇文章之后,能夠?qū)τ谝郧安焕斫獾膬?nèi)容多一點認(rèn)識,那怕多理解了一點點,老王也會很高興,嘛,就這樣,后續(xù)文章會都是偏技術(shù),實踐性的,下篇開始講為大家講解微軟高可用群集的仲裁模式,以及在2008R2 2012R2 2016不同版本中的運作形態(tài)實踐。
轉(zhuǎn)載于:https://blog.51cto.com/wzde2012/1949622
總結(jié)
以上是生活随笔為你收集整理的浅谈群集与分布式基础知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《敏捷企业》作者访谈录
- 下一篇: 对于防止匿名评论/访问的操作