從集中式到分散式

五月的倉頡發表於2015-11-07

前言

隨著計算機系統規模變得越來越大,將所有業務單元集中部署在一個或者若干個大型機上的體系結構物,已經越來越不能滿足當今計算機系統,尤其是大型網際網路系統的快速發展,各種靈活多變的系統架構模型層出不窮。同時,隨著微型計算機的出現,越來越多廉價的PC機成為了各大IT企業架構的首選,分散式的處理方式越來越受到業界的青睞----計算機系統正在經歷一場前所未有的從集中式到分散式架構的變革。

 

從集中式到分散式

自從20世紀60年代大型主機被髮明出來以後,憑藉其超強的計算和I/O處理能力以及在穩定性和安全性方面的卓越表現,在很長一段時間內,大型主機引領了計算機行業以及商業計算領域的發展。在大型主機的研發上最知名的當屬IBM,其主導研發的革命性產品System/360系列大型主機,是計算機發展史上的一個里程碑,與波音707和福特T型車齊名,被譽為20世紀最重要的三大商業成就,IT界進入了大型主機時代。

伴隨著大型主機時代的到來,集中式的計算機系統架構也成為了主流。在那個時候,由於大型主機卓越的效能和良好的穩定性,其在單機處理能力方面的優勢非常明顯,使得IT系統快速進入了集中式處理階段,其對應的計算機系統稱為集中式系統。但從20世紀80年代以來,計算機系統向網路化和微型化的發展日趨明顯,傳統的集中式處理模型越來越不能適應人們的需求,具體表現在:

1、大型主機的人才培養成本非常高,通常一臺大型主機彙集了大量精密的計算機元件,操作非常複雜,這對一個運維人員掌握其技術細節提出了非常高的要求

2、大型主機也是非常昂貴的,通常一臺配置較好的IBM大型主機,其售價達到上百萬美元甚至更高,因此也只有像政府、金融和電信等企業才有能力採購大型主機

3、集中式有非常明顯的單點問題,大型主機雖然在效能和穩定性方面表現卓越,但並不代表其永遠不會出故障。一旦一臺大型主機出現了故障,那麼整個系統將處於不可用的狀態,後果相當嚴重。最後,隨著業務的不斷髮展,使用者訪問量迅速提高,計算機系統的規模也在不斷擴大,在單一大型主機上進行擴容往往比較困難

4、隨著PC機效能的不斷提升和網路技術的快速普及,大型主機的市場份額變得越來越小,很多企業開始放棄原來的大型主機,而改用小型機和普通PC伺服器來搭建分散式計算機

對業內新聞比較關注的,一定知道阿里巴巴在2009年發起了一項"去IOE"運動。因為阿里巴巴從2008年開始各項業務都進入了井噴式的發展階段,這對於後臺IT系統的計算與儲存能力提出了非常高的要求,一味地針對小型機和高階儲存進行不斷擴容,無疑會產生巨大的成本。同時,集中式的系統架構體系也存在著諸多單點問題,完全無法滿足網際網路應用爆炸式的發展需求。因此,為了解決業務快速發展給IT系統帶來的巨大挑戰,從2009年開始,阿里集團啟動了"去IOE"計劃,其電商系統開始正式邁入了分散式系統時代。

 

集中式

所謂集中式系統就是指由一臺或多臺主計算機組成中心節點,資料集中儲存於這個中心節點中,並且整個系統的所有業務單元都集中部署在這個中心節點上,系統所有的功能均由其集中處理。也就是說,集中式系統中,每個終端或客戶端及其僅僅負責資料的錄入和輸出,而資料的儲存與控制處理完全交由主機來完成。

集中式系統最大的特點就是部署結構簡單,由於集中式系統往往基於底層效能卓越的大型主機,因此無需考慮如何對服務進行多個節點的部署,也就不用考慮多個節點之間的分散式協作問題。

 

分散式

分散式系統如何定義?這裡引用一下Distributed Systems Concepts and Design(Third Edition)中的一句話:"A distributed system is one in which components located at networked computers communicate and coordinate their actions only by passing messages"。從這句話裡面我們可以看到幾個重點:

1、元件分佈在網路計算機上

2、元件之間僅僅通過訊息傳遞來通訊並協調行動

嚴格講,同一個分散式系統中的計算機在空間部署上是可以隨意分佈的,這些計算機可能被放在不同的機櫃上,也可能在不同的機房中,甚至分佈在不同的城市。無論如何,一個標準的分散式系統在沒有任何特定業務邏輯約束的情況下,都會有以下幾個特徵:

1、分佈性

分散式系統中的多臺計算機都會在空間上隨意分佈,同時,及其的分佈情況也會隨時變動

2、對等性

分散式系統中的計算機沒有主/從之分,既沒有控制整個系統的主機,也沒有被控制的從機,組成分散式系統的所有節點都是對等的。副本(Replica)是分散式系統最常見的概念之一,指的是分散式系統對資料和服務提供的一種冗餘方式。在常見的分散式系統中,為了對外提高可用的服務,我們往往會對資料和服務進行副本處理。資料副本是指在不同的節點上持久化同一份資料,當某一個節點上儲存的資料丟失時,可以從副本上讀取到該資料,這是解決分散式系統資料丟失問題最為有效的手段。另一類副本是服務副本,指多個節點提供同樣的服務,每個節點都有能力接收來自外部的請求並進行相應的處理

3、併發性

在一個計算機網路中,程式執行過程中的併發性操作是非常常見的行為,例如同一個分散式系統的多個節點,可能會併發地操作一些共享的資源,諸如資料庫或分散式儲存等,如何準確並高效地協調分散式併發操作也成為了分散式系統架構與設計中最大的挑戰之一

4、缺乏全域性時鐘 

一個典型的分散式系統是由一系列空間上隨意分佈的多個程式組成的,具有明顯的分佈性,這些程式之間通過交換訊息來進行相互通訊。因此,在分散式系統中,很難定義兩個事件究竟誰先誰後,原因就是因為分散式系統缺乏一個全域性的始終控制序列

5、故障總是會發生

組成分散式系統的所有計算機,都有可能發生任何形式的故障。一個被大量工程實踐過的黃金定理是:任何在設計階段考慮到的異常情況,一定會在系統實際執行中發生,並且,在系統實際執行中還會遇到很多在設計時未考慮到的異常故障。所以,除非需求指標允許,在系統設計時不能放過任何異常情況

6、處理單點故障

在整個分散式系統中,如果某個角色或者功能只有某臺單機在支撐,那麼這個節點稱為單點,其發生的故障稱為單點故障,也就是通常說的SPoF(Single Point of Failure),避免單點而對關鍵就是把這個功能從單機實現變為叢集實現,當然,這種變化一般會比較困難,否則就不會有單點問題了。如果不能把單點變為叢集實現,那麼一般還有兩種選擇:

(1)給這個單點做好備份,能夠在出現問題時進行恢復,並且儘量做到自動恢復

(2)降低單點故障的影響範圍

 

分散式系統的意義

從單機單使用者到單機多使用者,再到現在的網路時代,應用系統發生了很多的變化。而分散式系統依然是目前很熱門的討論話題,那麼,分散式系統給我們帶來了什麼,或者說是為什麼要有分散式系統呢?從三方面考慮:

1、升級單機處理能力的價效比越來越低

摩爾定律:當價格不變時,每隔18個月,積體電路上可容納的電晶體數目會增加一倍,效能也將提升一倍。這個定律告訴我們,隨著時間的推移,單位成本的支出所能購買的計算機能力在提升。不過,如果我們把時間固定下來 ,也就是固定在某個具體時間點來購買單顆不同型號的處理器,那麼所購買的處理器效能越高,所要付出的成本就越高,價效比就越低。那麼,也就是說在一個確定的時間點,通過更換硬體做垂直擴充套件的方式來提升效能會越來越不划算

2、單機處理能力存在瓶頸

某個固定時間點,單顆處理器有自己的效能瓶頸,也就說即使願意花更多的錢去買計算能力也買不到了

3、出於穩定性和可用性的考慮

如果採用單機系統,那麼在這臺機器正常的時候一切OK,一旦出問題,那麼系統就完全不能用了。當然,可以考慮做容災備份等方案,而這些方案就會讓系統演變為分散式系統了

相關文章