1. 分布式原理
分布式系統是硬體和軟體分布在不同網路計算機上,彼此間通過訊息傳遞進行通信和協調的系統,
1.1 分布式環境存在的問題
- 通信例外:分布式環境存在訊息丟失和訊息延遲的情況,
- 網路磁區:在組成分布式系統的所有節點中只有部分節點能進行正常通信,另一些則不能,形成網路磁區孤島,也稱為腦裂,
- 三態:分布式環境請求有3種狀態,成功、失敗、超時,
- 節點故障:分布式環境中每個節點都有可能出現故障,
1.2 分布式系統特性
- 分布性:服務分布在網路的不同的機器上,可能會變動,
- 副本:
- 資料副本:多節點持久化同一份資料,當某個節點宕機或存盤的資料丟失,可從副本讀取到資料,解決分布式系統資料丟失的問題,
- 服務副本:多節點提供同樣的服務,每個節點都能接收外部的請求并進行相應的處理,
- 并發性:并發情況較單點系統更為復雜,對于共享資源的訪問需要準確和高效地協調,
- 故障:分布式系統中每個節點都有可能發生故障,設計時應該充分考慮可能發生的故障和備案,
1.3 CAP和BASE理論
1.3.1 分布式系統的幾個基本要求
- 一致性:在分布式環境中,多個資料副本之間是否能夠保持一致的特性,如果對一個資料項更新后,所有用戶在集群其他節點都能讀到更新后的值,那么認為系統具備強一致性(嚴格一致性),
- 可用性:對于用戶的每一個請求,系統可以在有限的時間內回傳結果,有限的時間隨系統型別不同而不同,是滿足用戶預期的時間,回傳結果是指系統應該回傳正確的回應,而不是用戶無法理解的結果,比如OutOfMemory,
- 磁區容錯性:分布式系統在遇到任何網路磁區故障時,仍需要保證對外提供一致性和可用性的服務,除非是整個網路發生故障,
1.3.2 CAP理論
CAP理論:一個系統不可能同時滿足一致性(C:Consistency)、可用性(A:Avaliability)和磁區容錯性(P:Partition Tolerance)這三個基本需求,最多只能滿足其中的兩項,
那么為什么會這樣呢?以下2個地方講的都挺好的:
- https://www.zhihu.com/question/54105974
- https://blog.csdn.net/yeyazhishang/article/details/80758354
通過以上2個地方的講解,概括下自己的理解:
磁區容錯性是分布式系統的基礎,放棄則表示失去了系統的擴展性,違背了分布式系統設計的初衷,所以通常提到CAP的取舍,是在CA之間的取舍,
- 保證磁區容錯性:需要用到上文中提到的資料副本,即同一份資料分布到不同的節點上,在網路發生故障時,仍需要保證對外提供一致性和可用性的服務,除非是整個網路發生故障,
- 保證一致性:此時為滿足磁區容錯性的需求,設定了多個資料副本(副本越多,磁區容錯性越強),分布式系統需要承擔資料同步的作業,如果要保證強一致性,那么部分節點需要犧牲可用性,等待資料同步完成后再提供服務,極端情況下,當網路出現故障形成網路孤島的時候,孤島內的節點為保證強一致性,需要徹底停止服務,等待網路恢復,同步最新的資料保證強一致性,
- 保證可用性:同樣是多個資料副本的場景,保證強可用性的一個方法即是犧牲一致性,在資料同步的同時提供服務,此時可能各個節點對同一個資料回傳的值不同(還未完成資料同步),出現資料不一致的情況,
這樣看來,不管單純地犧牲一致性,還是可用性,都是不太可取的,所以會有BASE理論,
1.3.3 BASE理論
BASE理論:基本可用、軟狀態、最終一致性
- 基本可用:分布式系統在遇到問題時,允許損失部分可用性,回應時間上的延長、功能降級,
- 軟狀態:和強一致性相比,軟狀態允許系統中的資料存在中間狀態,允許系統在不同節點的資料副本之間進行資料同步的延遲,
- 最終一致性:系統中的所有資料副本,在經過一段時間的同步后,最終能夠達到一個一致的狀態,
這樣看來,還是可以在一致性和可用性之間做一定的權衡,來達到一個相對滿意的狀態,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/158154.html
標籤:其他
下一篇:作為程式員為什么要閱讀原始碼
