天天看點

到底什麼是叢集&分布式

版權聲明:本文為部落客原創文章,轉載注明出處http://blog.csdn.net/u013142781

對于樓主這樣工作一年的菜鳥,偶爾會看到一些文章标題帶有“分布式”“叢集”關鍵字,然後就懵逼了。最近對這些概念進行了一定的了解,整理了一下思路,在這裡分享給各位猿友。不足之處還望糾正,感謝。

到底什麼是叢集&分布式

事實上,在這一年的工作中,對一些分布式和叢集技術也有一些接觸,隻是研究得并不深入。比如分布式服務架構dubbo、搜尋引擎elasticsearch。

概念總是抽象的,配合執行個體會讓你對概念的了解更加清晰。是以,如果剛好有使用到分布式和叢集技術的猿友,可以邊看本文的一些概念邊回想你使用過的分布式和叢集技術。如果你沒有使用過相關技術,那其實也是可以以了解的心态将本文看完,後面接觸到了,起碼會有個大概的印象。

下面我們先看看其他猿友對“分布式”和“叢集”的看法:

部落客有對他的表述有作一點修改補充,友善各位猿友明天他的意思。

這個猿友描述得很簡單明了:

另外一位猿友從另外一個角度去表述:

這位猿友的描述也很簡潔,但是比較抽象:

叢集:

分布式:

看完這些是不是有種似懂非懂的感覺?部落客也是一樣!是以我們接下來繼續了解。

到底什麼是叢集&分布式

看了分布式服務架構dubbo和分布式版本控制系統git的這些描述後,細想一下,似乎和上面的“分布式:一個業務分拆多個子業務,部署在不同的伺服器上,叢集:同一個業務,部署在多個伺服器上”的觀點些相似。

dubbo将核心業務抽取出來,作為獨立的服務子產品,各個子產品之間隻需要依賴接口,接口實作分離,那麼開發人員可以各自完成自己負責的服務子產品,最後完成一個完整的系統。他們的目标是完成一個系統,而各個子服務子產品相當于子業務。git也類似。

現在分布式概念可能我們相對比較清晰了,叢集概念可能還比較模糊。另外,叢集是如何跟分布式配合的呢,接下來我們繼續了解叢集。

叢集主要分成三大類( 高可用叢集, 負載均衡叢集,科學計算叢集)

高可用叢集( high availability cluster)

負載均衡叢集(load balance cluster)

科學計算叢集(high performance computing cluster)

1. 高可用叢集(high availability cluster)

常見的就是2個節點做成的ha叢集,有很多通俗的不科學的名稱,比如”雙機熱備”, “雙機互備”, “雙機”. 

高可用叢集解決的是保障使用者的應用程式持續對外提供服務的能力。 (請注意高可用叢集既不是用來保護業務資料的,保護的是使用者的業務程式對外不間斷提供服務,把因軟體/硬體/人為造成的故障對業務的影響降低到最小程度)。

2. 負載均衡叢集(load balance cluster)

負載均衡叢集一般用于相應網絡請求的網頁伺服器,資料庫伺服器。這種叢集可以在接到請求時,檢查接受請求較少,不繁忙的伺服器,并把請求轉到這些伺服器上。從檢查其他伺服器狀态這一點上看,負載均衡和容錯叢集很接近,不同之處是數量上更多。

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為例:

dubbo提供了這些容錯政策:

dubbo提供了這些負載均衡政策:

還有比較好奇它們是怎麼通信的?

像早期版本的elasticsearch的話,自動發現節點機制,es是一個基于p2p的系統,它先通過廣播尋找存在的節點,再通過多點傳播協定來進行節點之間的通信,同時也支援點對點的互動。

而dubbo是有個注冊中心,它支援多個注冊中心,但是推薦使用zookeeper。關于zookeeper可以自行了解,很多叢集相關的架構都有使用到它。當然像elasticsearch是自己有相應的機制實作的。

就到這裡吧,小寶鴿也是有點累了,準備先下班了~~~~~~~~