認識分布式系統(tǒng)
Google “三駕馬車”論文發(fā)布以后抬吟,“大數(shù)據(jù)”和“分布式”就成了各種科技新聞媒體的“寵兒”,雖然如今頭版已被“人工智能”雕凹、“機器學習”占據(jù)琼开,圍繞著解決大規(guī)模分布式應用技術(shù)挑戰(zhàn)的話題還是能引起廣泛的關(guān)注。
回想當初還在大學時候精算,我喜歡分布式而不是機器學習瓢宦,主要是因為相比于機器學習大塊大塊的公式,分布式系統(tǒng)幾乎不需要太多數(shù)學知識灰羽,它是一門理論模型與工程技法并重的學科驮履。作為一個分布式系列的開篇,本文沒有高深的論文和復雜的數(shù)學廉嚼,只是分享我對分布式系統(tǒng)的一些認識玫镐。
費林分類法(Flynn's Taxonomy)
費林根據(jù)資訊流(information stream)可分成指令(Instruction)和資料(Data)兩種,把計算模型分為4類:
- 單指令流單數(shù)據(jù)流計算機(SISD):傳統(tǒng)的單核 CPU怠噪,沒有并行計算恐似。
- 單指令流多數(shù)據(jù)流計算機(SIMD):一個常見的例子就是 GPU 架構(gòu)。Intel 也有支持 SIMD 的 CPU 架構(gòu)傍念。
- 多指令流單數(shù)據(jù)流計算機(MISD):用多個指令操作單個數(shù)據(jù)流矫夷,幾乎沒有意義。
- 多指令流多數(shù)據(jù)流計算機(MIMD):多個獨立的 CPU 可以協(xié)作解決完全不同的子問題甚至是單一的大問題憋槐。涵蓋了并行和分布式系統(tǒng)双藕。
MIMD 的程序可以是同步的,也可以是異步的阳仔。能力強大的 MIMD 是目前主流的架構(gòu)類型蔓彩,超級計算機、并行計算機集群、分布式系統(tǒng)赤嚼、多處理器計算機和多核計算機都屬于這種類型。
MIMD 可以繼續(xù)分類:
- 按內(nèi)存:具有共享存儲器的通常稱為多處理器(multiprocessor)顺又;而不具有共享存儲器的則稱為多計算機(multicomputer)
- 多處理器系統(tǒng)(multi-processor)
- 多計算機系統(tǒng)(multi-computer)
- 連接方式:
- 總線式(Bus-based)
- 交換式(Switched)
- 關(guān)聯(lián)程度:
- 緊耦合式:消息延遲短更卒、帶寬高、系統(tǒng)可用性高稚照,多用于并行系統(tǒng)
- 松耦合式:消息延遲長蹂空、帶寬更低、部分組件可能發(fā)生故障而不影響其他組件果录,多用于分布式系統(tǒng)
可以發(fā)現(xiàn)上枕,我們要討論的分布式系統(tǒng),就是 MIMD 類型架構(gòu)中 Bus-based multicomputers 和 Switched multicomputers
什么是分布式系統(tǒng)弱恒?
提到分布式系統(tǒng)我們常常會想到很多大型的系統(tǒng)辨萍,比如說搜索引擎,你知道它背后肯定不止一臺服務器進行處理返弹,也知道微博锈玉、微信和淘寶背后是多個大型數(shù)據(jù)中心。這種觀點當然是正確的义起。但是分布式系統(tǒng)不一定是大規(guī)模的拉背,一個家用的 NAS 服務器也是分布式系統(tǒng),甚至和你電腦連接的藍牙鍵盤也是分布式系統(tǒng)默终。
在《分布式系統(tǒng):概念與設計》一書中椅棺,對分布式系統(tǒng)做了如下定義:
分布式系統(tǒng)是其組件分布在連網(wǎng)的計算機上,組件之間通過傳遞消息進行通信和協(xié)調(diào)的系統(tǒng)齐蔽。
通常有以下特點:
- 不共享內(nèi)存(只能通過網(wǎng)絡通信)
- 不共享時鐘
- 不共享操作系統(tǒng)
為什么需要分布式系統(tǒng)两疚?
有時候,并不是僅僅因為覺得便宜而將多臺計算機連接在一起肴熏。建立分布式系統(tǒng)有真正的好處:
- 社交:讓地理位置分散的用戶可以一起工作一起玩鬼雀,這樣的例子很多:分布式文檔系統(tǒng)芬首、多人游戲桨菜、視頻會議和社交網(wǎng)絡等;
- 高可用:一小部分機器宕機了奄毡,整個系統(tǒng)仍然可以正常工作鸦做;
- 擴展性:當業(yè)務擴張励烦、用戶數(shù)變多或歷史數(shù)據(jù)變得越來越大時,可以直接往現(xiàn)有分布式系統(tǒng)中添加機器泼诱;
- 遠程服務:我們的電腦和手機無法放下日益增長的數(shù)據(jù)坛掠,像 Dropbox、iCloud 等軟件為我們提供遠程服務;
- IoT:智能家居屉栓、自動售賣機舷蒲、智能收費站和未來更多的的 IoT 設備都會涉及到分布式系統(tǒng)的應用。
- 性價比:價格當然也是其中的原因友多。
分布式系統(tǒng)的挑戰(zhàn)
分布式系統(tǒng)雖好牲平,但系統(tǒng)的復雜性同時會引入很多棘手的問題,下面重點關(guān)注三個問題:
網(wǎng)絡延遲問題
分布式系統(tǒng)中的多個節(jié)點以網(wǎng)絡進行通信域滥,但是網(wǎng)絡并不保證什么時候到達以及是否一定到達纵柿。很多事情可能會出錯:
- 請求可能已經(jīng)丟失(可能有人拔掉了網(wǎng)線)。
- 請求可能正在排隊启绰,稍后將交付(也許網(wǎng)絡或收件人超載)昂儒。
- 遠程節(jié)點可能已經(jīng)失效(可能是崩潰或關(guān)機)。
- 遠程節(jié)點可能暫時停止了響應(可能會遇到長時間的垃圾回收暫停委可;參閱“暫停進程”)渊跋,但稍后會再次響應。
- 遠程節(jié)點可能已經(jīng)處理了請求撤缴,但是網(wǎng)絡上的響應已經(jīng)丟失(可能是網(wǎng)絡交換機配置錯誤)刹枉。
- 遠程節(jié)點可能已經(jīng)處理了請求,但是響應已經(jīng)被延遲屈呕,并且稍后將被傳遞(可能是網(wǎng)絡或者你自己的機器過載)微宝。
時鐘問題
- ?消息通過網(wǎng)絡從一臺機器傳送到另一臺機器需要時間,但由于網(wǎng)絡中的可變延遲虎眨,我們不知道到底花了多少時間蟋软。這個事實有時很難確定在涉及多臺機器時發(fā)生事情的順序。
- 網(wǎng)絡上的每臺機器都有自己的時鐘嗽桩,可能比其他機器稍快或更慢岳守。
部分失效
單機系統(tǒng)上的程序要么工作,要么出錯碌冶。
在分布式系統(tǒng)中湿痢,系統(tǒng)的某些部分可能會以某種不可預知的方式宕機。這被稱為部分失效(partial failure)扑庞。
難點在于部分失效是不確定的:如果你試圖做任何涉及多個節(jié)點和網(wǎng)絡的事情譬重,它有時可能會工作,有時會出現(xiàn)不可預知的失敗罐氨。正如我們將要看到的臀规,你甚至不知道是否成功了,因為消息通過網(wǎng)絡傳播的時間也是不確定的栅隐!
這種不確定性和部分失效的可能性塔嬉,使得分布式系統(tǒng)難以琢磨和調(diào)試玩徊。
結(jié)語
分布式系統(tǒng)主要研究三大方向:
- 分布式存儲系統(tǒng)
- 分布式計算系統(tǒng)
- 分布式調(diào)度系統(tǒng)
這些方向都有一些特定的算法,但是谨究,分布式共識問題試圖探討分布式系統(tǒng)中最基本的問題——如何讓分布式系統(tǒng)中的節(jié)點達成共識恩袱?到底什么是共識?下一篇记盒,我們將深入討論這個問題憎蛤。