本文摘自:華為云社區(qū)
作者:華為加拿大研究院軟件專家 Jet老師
小引
分布式系統(tǒng)是一個古老而寬泛的話題,而近幾年因為 “大數(shù)據(jù)” 概念的興起,又煥發(fā)出了新的青春與活力。本文將會通過對如下幾個問題展開談一下分布式系統(tǒng):
什么是分布式系統(tǒng)?
為什么要用分布式系統(tǒng)?
分布式系統(tǒng)設計推演
CAP定理是什么?
分布式系統(tǒng)如何進行分布?
分布式應用通常使用的架構類型哪些?
分布式系統(tǒng)的優(yōu)缺點有哪些?
1. 什么是分布式系統(tǒng)?
簡單的來說,一個分布式系統(tǒng)是一組計算機系統(tǒng)一起工作,在終端用戶看來,就像一臺計算機在工作一樣。
這組一起工作的計算機,擁有共享的狀態(tài),他們同時運行,獨立機器的故障不會影響整個系統(tǒng)的正常運行。
我們現(xiàn)在舉個例子,傳統(tǒng)的數(shù)據(jù)庫是存儲在一臺機器的文件系統(tǒng)上的。每當我們?nèi)〕龌蛘卟迦胄畔⒌臅r候,我們直接和那臺機器進行交互。那么現(xiàn)在我們把這個傳統(tǒng)的數(shù)據(jù)庫設計成分布式數(shù)據(jù)庫。假設我們使用了三臺機器來構建這臺分布式數(shù)據(jù)庫,我們追求的結果是,在機器1上插入一條記錄,需要在機器3上可以返回那條記錄,當然了,機器1和2也要能夠返回這條記錄。
2. 為什么要用分布式系統(tǒng)?
管理分布式系統(tǒng)是一個非常復雜的話題,里面充滿了陷阱和地雷。部署維護和調(diào)試分布式系統(tǒng)也是非常頭疼的一件事情,那為什么還要去做呢?
分布式系統(tǒng)最大的好處就是能夠讓你橫向的擴展系統(tǒng)。
以前面提到的單一數(shù)據(jù)庫為例,能夠處理更多流量的唯一方式就是升級數(shù)據(jù)庫運行的硬件,這就是縱向擴展。而縱向擴展的是有局限性的。當?shù)搅艘欢ǔ潭纫院螅覀儠l(fā)現(xiàn)即使最好的硬件,也不能夠滿足當前流量的需求。 橫向擴展是指通過增加更多的機器來提升整個系統(tǒng)的性能,而不是靠升級單臺計算機的硬件。從價格上來說,橫向擴展相比縱向擴展更容易控制。 最根本的問題是縱向擴展有很強的局限性,達到最新硬件的能力以后,還是無法滿足中等或者大型工作負載的技術要求。橫向擴展則沒有這個限制,它沒有上限,每當性能下降的時候,你就需要增加一臺機器,這樣理論上講可以達到無限大的工作負載支持。 除此之外,在容錯和低延遲上也有很多優(yōu)勢。容錯性是指你的分布式系統(tǒng)的某個節(jié)點出現(xiàn)錯誤以后,并不會導致整個系統(tǒng)的癱瘓。而單機系統(tǒng)出錯以后,可能會導致整個系統(tǒng)的崩潰。低延遲是通過在不同的物理位置部署不同的機器,通過就近獲取的原則降低訪問的延遲時間。
上面討論了分布式系統(tǒng)的種種好處,但是我們必須要清楚設計和運行分布式系統(tǒng)并非易事。
3. 分布式系統(tǒng)設計推演
我們先講一個場景,我們現(xiàn)有的網(wǎng)絡應用變得越來越流行,服務的人數(shù)也越來越多,導致我們的應用程序每秒收到的請求,遠遠超過能夠正常處理的數(shù)量。這會導致應用程序性能下降明顯,用戶也會注意到這一點。
那我們下面就來擴展一下我們的應用程序來滿足更高的要求。一般來說我們讀取信息的頻率要遠遠超過插入或者修改的頻率。
下面我們使用主從復制策略來實現(xiàn)擴展系統(tǒng)。我們可以創(chuàng)建兩個新的數(shù)據(jù)庫服務器,他們與主服務器同步。用戶業(yè)務對這兩個新的數(shù)據(jù)庫只能讀取。每次當向主數(shù)據(jù)庫插入和修改信息時,都會異步的通知副本數(shù)據(jù)庫進行更新變化。
在這一步上我們已經(jīng)有了三倍于原來系統(tǒng)讀取數(shù)據(jù)的性能支持。但是這里有一個問題,在數(shù)據(jù)庫事務的設計當中,我們遵循ACID原則。但是在我們同時對其他兩個數(shù)據(jù)庫進行數(shù)據(jù)更新的時候,我們有一個時間窗口失去了一致性原則。如果在這個時間窗口內(nèi)對兩個新的數(shù)據(jù)庫進行查詢,可能查不到數(shù)據(jù)。這個時候如果同步這三個數(shù)據(jù)庫的數(shù)據(jù),就會影響寫操作的性能。這是我們在設計分布式系統(tǒng)的時候,不得不承受的一些代價。
上面的主從復制策略解決了用戶讀取性能方面的需求,但是當數(shù)據(jù)量達到一定程度,一臺機子上無法存放的時候,我們需要擴展寫操作性能。要解決這樣的問題,我們可以使用分區(qū)技術。分區(qū)技術是指根據(jù)特定的算法,比如用戶名a到z作為不同的分區(qū),分別指向不同的數(shù)據(jù)庫寫入,每個寫入數(shù)據(jù)庫會有若干讀取的從數(shù)據(jù)庫進行同步提升讀取性能。
當然,這樣使得整套系統(tǒng)變得更加復雜。最重要的難點是分區(qū)算法。你們試想一下,如果c開頭的用戶名比其他開頭的用戶名要多很多,這會導致c區(qū)的數(shù)據(jù)量非常龐大,相應地,對于c區(qū)的請求也會遠遠大于其他區(qū)。此時c區(qū)成為熱點。要避免熱點,需要對c區(qū)進行拆分。此時要進行共享數(shù)據(jù)就會變得非常昂貴,甚至可能導致停機。
如果一切都很理想,那我們就擁有了 n倍的寫入流量,n是分區(qū)的數(shù)目。
當然這里也存在一個陷阱,我們進行數(shù)據(jù)分區(qū)以后,導致除了分區(qū)鍵以外的查詢都變得非常低效,尤其是對于sql語句如join查詢就變得非常之糟糕,導致一些復雜的查詢根本無法使用。
這里有一個思考題:如何選擇更好的分區(qū)策略算法?
4. CAP定理是什么?
這個定理是指一個分布式系統(tǒng)不能同時具有一致性,可用性和分區(qū)容忍性。
一致性Consistency:依次讀寫的是什么就是什么。
可用性Availability:整個系統(tǒng)不會崩潰, 每個非故障節(jié)點總會有一個相應。
分區(qū)容忍Partition tolerant:盡管有分區(qū),系統(tǒng)仍能繼續(xù)運行并保持其一致性和可用性。
對于任何分布式系統(tǒng)來說,分區(qū)容忍是一個給定的條件,如果沒有這一點,就不可能做到一致性和可用性。試想如果兩個節(jié)點鏈接斷掉了,他們?nèi)绾文軌蜃龅郊瓤捎糜忠恢?
最后你只能選擇在網(wǎng)絡分區(qū)情況下,你的系統(tǒng)要么強一致,要么高可用。
實踐表明大多數(shù)應用程序更看重可用性。這個考量的主要原因是在不得不同步機器里實現(xiàn)強于一致性是時,網(wǎng)絡延遲會成為一個問題。這類因素使得應用程序通常會選擇提供高可用性的解決方案。
此時采用的是最弱的一致性模型來解決的,這種模型保證了如果沒有對某個項目進行新的更新,最終對該項目的所有訪問都會返回最新的值。這些系統(tǒng)提供了BASE屬性,這是相對于傳統(tǒng)數(shù)據(jù)庫的ACID來講的。
也就是( Basically available)基本上是可用的,系統(tǒng)總會返回一個響應。
( Soft state)軟狀態(tài), 系統(tǒng)可以隨著時間的推移而變化,甚至在沒有輸入的情況下也可以變化, 如保持最終的一致性的同步。 ( Eventual consistency)最終的一致性, 在沒有輸入的情況下,數(shù)據(jù)遲早會傳播到每一個節(jié)點上,從而變得一致。
追求高可用的分布式數(shù)據(jù)庫例子有Cassandra;看重強一致性的數(shù)據(jù)庫,有HBase, Redis, Zookeeper。
5. 分布式系統(tǒng)如何進行分布?
我們來看一下分布系統(tǒng)進行分布的常用方式:
5.1哈希
以哈希方式把不同的值進行哈希運算,映射到不同的機器或者節(jié)點上。這種方式在擴展的時候比較困難,因為數(shù)據(jù)分散在多個機器上很容易出現(xiàn)分布不均的情況,常見的哈希對象有ip,url,id等。
5.2 數(shù)據(jù)范圍
按數(shù)據(jù)范圍分布,比如ID在1~100的在機器a上,ID在100~200的在機器b上,諸如此類。這種分布方法數(shù)據(jù)比較均勻。如果某個節(jié)點處理能力有限,可以直接分裂這個節(jié)點。維護數(shù)據(jù)分布的這些原數(shù)據(jù),如果量非常大的話,可能會出現(xiàn)單點瓶頸。因此一定要嚴格控制元數(shù)據(jù)量。
5.3 數(shù)據(jù)量
按數(shù)據(jù)量來分布數(shù)據(jù),是以較為固定的大小將數(shù)據(jù)劃分為若干的數(shù)據(jù)塊,再把不同的數(shù)據(jù)塊分布到不同的服務器上。以數(shù)據(jù)量來進行分布的這些數(shù)據(jù),也需要被記錄下來作為元數(shù)據(jù)來管理。當集群規(guī)模很大時,元數(shù)據(jù)的量也會變大。
5.4副本與數(shù)據(jù)分布
這種方式是指把數(shù)據(jù)給分散到多個服務器上。如果其中一臺出現(xiàn)問題,請求就會被轉到其他服務器上。其原理是多個機器互為副本,這是比較理想的實現(xiàn)負載分壓的方式。
5.5一致性哈希
一致性哈希。通過哈希域構造哈希環(huán),在增加機器時,變動的是其附近的節(jié)點,分攤的是附近節(jié)點的壓力,其元數(shù)據(jù)的維護和按數(shù)量分布的維護方式一致。
我們現(xiàn)在來看一下使用以上方式進行分布的例子:GFS, HDFS:按數(shù)據(jù)量分布。 Map reduce:按GFS數(shù)據(jù)分布做本地化。 BigTable, HBase按數(shù)據(jù)范圍分布。 Pnuts:按哈希方式或者數(shù)據(jù)范圍分布。 Dynamo, Cassndra:按一致性哈希分布。 Mola, Armor, BigPipe:按哈希方式分布。 Doris:按哈希方式和按數(shù)據(jù)量分布進行組合。
6. 分布式應用通常使用的架構類型哪些?
6.1 客戶端服務器
在這個類型中,分布式系統(tǒng)架構有一個服務器作為共享資源。比如打印機數(shù)據(jù)庫或者網(wǎng)絡服務器。它有多個客戶機,這些客戶機決定何時使用共享資源,如何使用和顯示改變數(shù)據(jù),并將其送回服務器,像git這樣的代碼倉,這是一個很好的例子。
6.2 三層架構
這種架構把系統(tǒng)分為表現(xiàn)層,邏輯層和數(shù)據(jù)層,這簡化了應用程序的部署,大部分早期的網(wǎng)絡應用都是三層的。
6.3 多層架構
上面的三層架構是多層架構的一種特殊形式。一般會把上面的三層進行更詳細的劃分,比如說以業(yè)務的形式進行分層。
6.4 點對點架構
在這種架構中,沒有專門的機器提供服務或管理網(wǎng)絡資源。而是將責任統(tǒng)一分配給所有的機器,成為對等機,對等機既可以作為客戶機,也可以作為服務器。這種架構的例子,包括bittorrent和區(qū)塊鏈。
6.5 以數(shù)據(jù)庫為中心
這種架構是指用一個共享的數(shù)據(jù)庫,使分布式的各個節(jié)點在不需要任何形式直接通信的情況下,進行協(xié)同工作的架構。
7. 分布式系統(tǒng)的優(yōu)缺點有哪些?
7.1分布式系統(tǒng)的優(yōu)點
1. 分布式系統(tǒng)中的所有節(jié)點都是相互連接的。所以節(jié)點可以很容易地與其他節(jié)點共享數(shù)據(jù)。 2. 更多的節(jié)點可以很容易地添加到分布式系統(tǒng)中,即可以根據(jù)需要進行擴展。 3. 一個節(jié)點的故障不會導致整個分布式系統(tǒng)的失敗。其他節(jié)點仍然可以相互通信。 4. 硬件資源可以與多個節(jié)點共享,而不是只限于一個節(jié)點。
7.2分布式系統(tǒng)的缺點
1. 在分布式系統(tǒng)中很難提供足夠的安全,因為節(jié)點以及連接都需要安全。 2. 一些消息和數(shù)據(jù)在從一個節(jié)點轉移到另一個節(jié)點時,可能會在網(wǎng)絡中丟失。 3. 與單用戶系統(tǒng)相比,連接到分布式系統(tǒng)的數(shù)據(jù)庫是相當復雜和難以處理的。 4. 如果分布式系統(tǒng)的所有節(jié)點都試圖同時發(fā)送數(shù)據(jù),網(wǎng)絡中可能會出現(xiàn)過載現(xiàn)象。
小結
最后談一下分布式系統(tǒng)與集群的關聯(lián)。我的觀點是這兩者并不是對立的。因為分布式系統(tǒng)是通過多個節(jié)點的集群來完成一個任務,讓外界看起來是跟一套系統(tǒng)作為一個整體打交道。
一套分布式系統(tǒng)可以有多個集群,這些集群可以業(yè)務進行劃分,也可以物理區(qū)域進行劃分。每一個集群可以作為這個分布式系統(tǒng)的一個節(jié)點。這些集群節(jié)點組成的分布式系統(tǒng),又可以作為單個的節(jié)點與其他的節(jié)點組成一個集群。
原文標題:開發(fā)分布式系統(tǒng),這7個要點你掌握了嗎?
文章出處:【微信公眾號:華為開發(fā)者社區(qū)】歡迎添加關注!文章轉載請注明出處。
-
分布式系統(tǒng)
+關注
關注
0文章
147瀏覽量
19573
原文標題:開發(fā)分布式系統(tǒng),這7個要點你掌握了嗎?
文章出處:【微信號:Huawei_Developer,微信公眾號:華為開發(fā)者社區(qū)】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
雙電機分布式驅動汽車高速穩(wěn)定性機電耦合控制
分布式光伏發(fā)運維系統(tǒng)實際應用案例分享

淺談分布式光伏系統(tǒng)在工業(yè)企業(yè)的設計及應用

分布式云化數(shù)據(jù)庫有哪些類型
基于ptp的分布式系統(tǒng)設計
HarmonyOS Next 應用元服務開發(fā)-分布式數(shù)據(jù)對象遷移數(shù)據(jù)權限與基礎數(shù)據(jù)
安科瑞Acrel-1000DP分布式光伏監(jiān)控系統(tǒng)在8.3MWp分布式光伏發(fā)電中的應用
AFE4410和AFE4420都支持多個外接PD,這些分布式PD位置是可以隨便放置的嗎?
分布式光伏監(jiān)控系統(tǒng)在能源領域中的重要性

分布式光伏發(fā)電系統(tǒng)的應用

分布式光伏為企業(yè)帶來哪些便捷!

分布式輸電線路故障定位中的分布式是指什么

安科瑞分布式光伏系統(tǒng)在某重工企業(yè)18MW分布式光伏中應用

評論