分布式系統的特征、瓶頸以及性能指標介紹
分布式的概念存在年頭有點久了,在正式進入我們《分布式專欄》之前,感覺有必要來聊一聊,什么是分布式,分布式特點是什么,它又有哪些問題,在了解完這個概念之后,再去看它的架構設計,理論奠基可能幫助會更大。
本文將從三個方面來講述一下我理解的"分布式系統":
分布式系統的特點
分布式系統面臨的挑戰
如何衡量一個分布式系統
1.分布式系統特點
什么是分布式系統,看一下wiki上的描述
1.1 定義
分布式系統(distributed system)是建立在網絡之上的軟件系統。正是因為軟件的特性,所以分布式系統具有高度的內聚性和透明性。因此,網絡和分布式系統之間的區別更多的在于高層軟件(特別是操作系統),而不是硬件
分布式系統(建立在網絡之上的軟件系統)_百度百科
分布式操作系統(Distributed operating system),是一種軟件,它是許多獨立的,網絡連接的,通訊的,并且物理上分離的計算節點的集合[1]。每個節點包含全局總操作系統的一個特定的軟件子集。每個軟件子集是兩個不同的服務置備的復合物[2]。第一個服務是一個普遍存在的最小的內核,或微內核,直接控制該節點的硬件。第二個服務是協調節點的獨立的和協同的活動系統管理組件的更高級別的集合。這些組件抽象微內核功能,和支持用戶應用程序[3]。
- 分布式操作系統 - 維基百科,自由的百科全書
Distributed system: is a system in which components located on networked computers communicate and coordinate their actions by passing messages. The components interact with each other in order to achieve a common goal[3].
- Distributed systems - Computer Science Wiki
雖然上面幾個描述不完全相同,但是含義其實也差不了太多;基于我個人的理解,用大白話來描述一下分布式系統,就是“一個系統的服務能力,由網絡上多個節點共同提供”,正如其名的“分布一詞”
在了解完分布式系統的概念之后,接下來抓住其主要特點,來加深這個分布式的理解
1.2 分布性
分布式系統分布在多個節點(可以理解為多個計算機),這些節點可以是網絡上任意的一臺計算機,即在空間上沒有原則性的限制
1.3 對等性
分布式系統中有很多的節點,這些節點之間沒有主從、優劣直說,它們應該是對等的,從服務能力來說,訪問分布式系統中的任何一個節點,整個服務請求應該都是等價的
看到這里可能就會有一個疑問了,分布式系統中經典主從架構,數據拆分架構,就不滿足這個對等特性了啊(這個問題先留著,后續再詳情中進行解答)
1.4 自治性
分布式系統中的各個節點都有自己的計算能力,各自具有獨立的處理數據的功能。通常,彼此在地位上是平等的,無主次之分,既能自治地進行工作,又能利用共享的通信線路來傳送信息,協調任務處理。
1.5 并發性
分布式系統既然存在多個節點,那么天然就存在多個節點的同事響應請求的能力,即并發性支持,如何做好分布式系統的并發控制則是所有分布式系統需要解決的一個問題
2. 分布式系統面臨的問題
當系統分布在多個節點之上時,自然而然就帶來了很多單機場景下不會有問題,如經典的 分布式系統的8個謬誤 | 一灰灰Learning
2.1 全局時鐘
分布式系統的多個節點,如何保證每個節點的時鐘一致?這個是需要重點考慮的問題
我們知道大名鼎鼎的分布式主鍵生成算法 “雪花算法” 就是利用了機器時鐘來作為算法因子,如果一個系統的多個節點不能保證時鐘統一,那這個算法的唯一性將無法得到保障
2.2 網絡延遲、異常
網絡是有開銷的,多個節點之間的通信是有成本的,既然存在網絡的開銷、或異常狀況,那么如何保證多個節點的數據一致性呢?當無法保證數據的一致性時,如何提供分布式系統的對等性呢?
在經典的CAP理論中,對于P(網絡分區)一般都是需要保障的,一個系統存在多個計算節點,那么網絡問題將不可避免,網絡分區必然會存在
2.3 數據一致性
如何保證所有節點中的數據完全一致是一個巨大的挑戰,這個問題比較好理解,我們操作分布式系統中的一個節點實現數據修改,如果要保證數據一致性,則要求所有的節點,同步收到這個修改
但是我們需要注意的時,網絡是不可靠的,且網絡的傳輸是存在延遲的,如何衡量數據的一致性和服務的可用性則是我們在設計一個分布式系統中需要取舍的
2.4 節點異常
機器宕機屬于不可抗力因素,如果分布式系統中的一個節點宕機了,整個系統會怎么樣?要如何確保機器宕機也不會影響系統的可用性呢?機器恢復之后,又應該如何保證數據的一致性呢?又應該如何判斷一個節點是否正常呢?
2.5 資源競爭
前面說到分布式系統天然支持并發,那么隨之而來的問題則是如何資源競爭的問題;當一個資源同一時刻只允許一個實例訪問時,怎么處理?多個系統同時訪問一個資源是否會存在數據版本差異性(如經典的ABA問題)、數據一致性問題?
基于這個問題,分布式鎖可以說是應運而生,相信各位開發大佬都不會陌生這個知識點
2.6 全局協調
這個協調怎么理解呢?舉幾個簡單的實例
- 如何判斷分布式系統中那些節點正常提供服務,那些節點故障
- 如一個任務希望在分布式系統中只執行一次,那么應該哪個節點執行這個任務呢?
- 如一組有先后順序的請求發送給分布式系統,但是由于網絡問題,可能出現后面的請求先被系統接收到,這種場景怎么處理呢?
- 一個用戶已經登錄,如何在所有節點中確認他的身份呢?
2.7 一灰灰的小結
實際上分布式系統面臨的挑戰并不止于上面這些,一個具體的系統面臨的問題可能各不相同,但總的來說,分布式系統的理論基礎會給我們非常好的指引方向,這一節推薦查看 * 分布式設計模式綜述 | 一灰灰Learning
3. 分布式系統的衡量指標
最后再來看一下如何衡量一個分布式系統的“好差”,它的指標有哪些
3.1 性能指標
常見的性能指標如rt, QPS, TPS來判斷一個系統的承載能力,重點關注是哪個要點
- 響應延遲
- 并發能力
- 事務處理能力
3.2 可用性
這個就是傳說中你的系統達到幾個9的那個指標,即系統的異常時間占總的可用時間的比例
統的可用性可以用系統停服務的時間與正常服務的時間的比例來衡量,也可以用某功能的失敗次數與成功次數的比例來衡量。可用性是分布式的重要指標,衡量了系統的魯棒性,是系統容錯能力的體現。
3.3 擴展性
系統的可擴展性(scalability)指分布式系統通過擴展集群機器規模提高系統性能(吞吐、延遲、并發)、存儲容量、計算能力的特性
最簡單來講,就是你的系統能不能直接加機器,來解決性能瓶頸,如果能加機器,有沒有上限(如由于數據庫的連接數限制了機器的數量上限, 如機器加到某個程度之后,服務能力沒有明顯提升)
3.4 一致性
分布式系統為了提高可用性,總是不可避免的使用副本的機制,從而引發副本一致性的問題。越是強的一致的性模型,對于用戶使用來說使用起來越簡單
4. 總結
這一篇文章相對來說比較干燥,全是文字描述,介紹下什么是分布式系統,分布系統的特點及面對的問題和衡量指標,提煉一下關鍵要素,如下
分布式系統的特點
- 分布性
- 對等性
- 并發性
- 自治性
分布式系統面臨的挑戰
- 全局時鐘
- 網絡延遲、異常
- 數據一致性
- 節點異常
- 資源競爭
- 全局協調
分布式系統衡量指標
- 性能指標
- 可用性
- 擴展性
- 一致性