集羣、分佈式、負載均衡區別

前言:
集羣:是指將幾臺服務器集中在一起,實現同一業務;
分佈式:是指將不同的業務分佈在不同的地方;
分佈式中的每一個節點,都可以做集羣。 而集羣並不一定就是分佈式的。
負載均衡系統:集羣中所有的節點都處於活動狀態,它們分攤系統的工作負載。一般Web服務器集羣、數據庫集羣和應用服務器集羣都屬於這種類型。

1、集羣舉例:就比如新浪網,訪問的人多了,他可以做一個羣集,前面放一個響應服務器,後面幾臺服務器完成同一業務,如果有業務訪問的時候,響應服務器看哪臺服務器的負載不是很重,就將給哪一臺去完成。

分佈式,從窄意上理解,也跟集羣差不多, 但是它的組織比較鬆散,不像集羣,有一個組織性,一臺服務器垮了,其它的服務器可以頂上來。分佈式的每一個節點,都完成不同的業務,一個節點垮了,那這個業務就不可訪問了。

簡單說,分佈式是以縮短單個任務的執行時間來提升效率的,而集羣則是通過提高單位時間內執行的任務數來提升效率。

2、分佈式舉例:如果一個任務由10個子任務組成,每個子任務單獨執行需1小時,則在一臺服務器上執行該任務需10小時。

採用分佈式方案,提供10臺服務器,每臺服務器只負責處理一個子任務,不考慮子任務間的依賴關係,執行完這個任務只需一個小時。(這種工作模式的一個典型代表就是Hadoop的Map/Reduce分佈式計算模型)

而採用集羣方案,同樣提供10臺服務器,每臺服務器都能獨立處理這個任務。假設有10個任務同時到達,10個服務器將同時工作,1小時後,10個任務同時完成,這樣,整身來看,還是1小時內完成一個任務!

分佈式:不同的業務模塊部署在不同的服務器上或者同一個業務模塊分拆多個子業務,部署在不同的服務器上,解決高併發的問題
集羣:同一個業務部署在多臺機器上,提高系統可用性。

3、負載均衡
Linux集羣主要分成三大類( 高可用集羣, 負載均衡集羣,科學計算集羣)
負載均衡(load balance)概念:
負載均衡是集羣技術中重要的一部分。通過將請求分發到不同的服務器,它提供了可同時獲得高可用性和更高性能的服務的方法。簡單的負載均衡器可以是一個Servlet或一些插件,複雜的負載均衡器可能是高級的嵌入了SSL加速器的硬件設備。
負載均衡集羣(Load Balance Cluster)一般用於相應網絡請求的網頁服務器,數據庫服務器。這種集羣可以在接到請求時,檢查接受請求較少,不繁忙的服務器,並把請求轉到這些服務器上。從檢查其他服務器狀態這一點上看,負載均衡和容錯集羣很接近,不同之處是數量上更多。

除了分發請求之外,負載均衡器還負責執行一些重要的任務:

(1) “會話持久”用來確保用戶會話生命週期在一臺服務器上的完整性。
(2) “心跳”來檢查失敗的服務器。
(3) 在某些情況下,負載均衡器需要參與“失敗轉移”的過程,下文中會提及。

2、負載均衡系統: 負載均衡又有DNS負載均衡(比較常用)、IP負載均衡、反向代理負載均衡等,也就是在集羣中有服務器A、B、C,它們都是互不影響,互不相干的,任何一臺的機器宕了,都不會影響其他機器的運行,當用戶來一個請求,有負載均衡器的算法決定由哪臺機器來處理,假如你的算法是採用round算法,有用戶a、b、c,那麼分別由服務器A、B、C來處理;

負載均衡問答?:先來個數據結構問題
設計一個用於負載均衡的數據結構,支持加入一臺機器,撤出一臺機器,在活躍的機器集合中“等概率”隨機選中一臺機器。以上三個操作要儘可能的快。

解答:
用一個數組記錄當前的活躍機器集,用一個hash記錄某個機器在數組中的位置。對於等概率隨機選中一臺機器,random(數組長度)選中一臺機器;對於加入一臺機器,在數組最後添加,並記錄在hash表中;對於撤出一臺機器,先用hash表找到其在數組中的對應位置,用數組最後一個位置的機器和它交換,並在hash表中刪除撤出的機器並修改被交換的機器的位置,這樣做的目的是保證數組中不會出現空位,這樣才能保證隨機操作的正確性和高效。三個操作的時間複雜度均爲O(1)。

面試官角度:
本題中描述的負載均衡是用於Web Server的負載均衡,並不是存儲的負載均衡,所以無需考慮新增加的機器需要儘量多的承載訪問請求,所以如果往一致性哈希(Consistent Hash)的方向考慮就錯了。本題是純粹的數據結構題,並非設計題。當看到加入一臺機器和撤出一臺機器的時候,自然會想到使用hash表來支持O(1)的插入和O(1)的刪除。但普通的hash表是不支持等概率隨機訪問的。想要支持等概率隨機訪問,那最簡單的方法當然是地址空間連續的數組。因此想到結合兩種數據結構。剩下來需要解決的問題就是如果讓數組支持O(1)的刪除並讓數組沒有空位。一個思維誤區是整體移動後面的數據。實際上由於數組所代表的內容是集合,無需保證其結果的連續性,因此採用類似堆中刪除元素的操作方法——用最後一個元素覆蓋待刪除元素,即可解決問題。 本題的考點主要是對於各種數據結構的靈活使用,需要對數組,hash表,甚至堆有一定的瞭解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章