分散式系統學習筆記
一致性問題
在分散式系統中,一致性(Consistency
,早期也叫 Agreement
)是指對於系統中的多個服務節點,給定一系列操作,在協議(往往通過某種共識演算法) 保障下,試圖使得它們對處理結果達成某種程度的一致。
存在的挑戰
- 節點之間的網路通訊是不可靠的,包括任意延遲和內容故障;
- 節點的處理可能是錯誤的,甚至節點自身隨時可能當機;
- 同步呼叫會讓系統變得不具備可擴充套件性。
一致性條件
- 可終止性(
Termination
) :一致的結果在有限時間內能完成; - 共識性(
Consensus
) :不同節點最終完成決策的結果應該相同; - 合法性(
Validity
) :決策的結果必須是其它程式提出的提案。
CAP原理
- 一致性(
Consistency
) - 可用性(
Availability
) - 分割槽容忍性(
Partition tolerance
)
CAP原理指的是,這三個要素最多隻能同時實現兩點,不可能三者兼顧
最終一致性(eventually consistent
)
對於一致性,可以分為從客戶端和服務端兩個不同的視角。從客戶端來看,一致性主要指的是多併發訪問時更新過的資料如何獲取的問題。從服務端來看,則是更新如何複製分佈到整個系統,以保證資料最終一致。
從客戶端角度,多程式併發訪問時,更新過的資料在不同程式如何獲取的不同策略,決定了不同的一致性。對於關係型資料庫,要求更新過的資料能被後續的訪問都能看到,這是強一致性 。如果能容忍後續的部分或者全部訪問不到,則是弱一致性 。 如果經過一段時間後要求能訪問到更新後的資料,則是最終一致性。
最終一致性總會存在一個時刻,系統達到一致的狀態
把故障(不響應) 的情況稱為“非拜占庭錯誤”,惡意響應的情況稱為“拜占庭錯
誤”(對應節點為拜占庭節點)
FLP不可能性原理
FLP 不可能原理:在網路可靠,存在節點失效(即便只有一個) 的最小化非同步模型系統中,不存在一個可以解決一致性問題的確定性演算法。
兩階段提交2PC
二階段提交(
Two-phaseCommit
)是指,在計算機網路以及資料庫領域內,為了使基於分散式系統架構下的所有節點在進行事務提交時保持一致性而設計的一種演算法(Algorithm
)。通常,二階段提交也被稱為是一種協議(Protocol
))。在分散式系統中,每個節點雖然可以知曉自己的操作時成功或者失敗,卻無法知道其他節點的操作的成功或失敗。當一個事務跨越多個節點時,為了保持事務的ACID
特性,需要引入一個作為協調者的元件來統一掌控所有節點(稱作參與者)的操作結果並最終指示這些節點是否要把操作結果進行真正的提交(比如將更新後的資料寫入磁碟等等)。因此,二階段提交的演算法思路可以概括為:參與者將操作成敗通知協調者,再由協調者根據所有參與者的反饋情報決定各參與者是否要提交操作還是中止操作。
所謂的兩個階段是指:第一階段:準備階段(投票階段)和第二階段:提交階段(執行階段)。
兩階段提交和三階段提交
相關文章
- 分散式系統架構筆記分散式架構筆記
- hadoop 偽分散式模式學習筆記Hadoop分散式模式筆記
- GlusterFS分散式儲存學習筆記分散式筆記
- 彈性分散式深度學習系統分散式深度學習
- 【大資料】BigTable分散式資料儲存系統分散式資料庫 | 複習筆記大資料分散式資料庫筆記
- 分散式學習記錄分散式
- 分散式基礎&專案環境搭建_學習筆記分散式筆記
- Hadoop學習(一)——HDFS分散式檔案系統Hadoop分散式
- 嵌入式系統開發:基於Linux學習筆記整理Linux筆記
- Redis基礎知識(學習筆記2--分散式鎖)Redis筆記分散式
- 學習筆記:NATS--自適應邊緣和分散式系統的連線技術。(更新中)筆記分散式
- Google分散式檔案系統GFS論文學習Go分散式
- 作業系統——記憶體管理學習筆記作業系統記憶體筆記
- async函式學習筆記。函式筆記
- 生成函式 學習筆記函式筆記
- 多項式學習筆記筆記
- Redis學習筆記(三)使用Lua指令碼實現分散式鎖Redis筆記指令碼分散式
- Redis基礎知識(學習筆記22--分散式鎖 Redisson )Redis筆記分散式
- ElasticDL: Kubernetes-native 彈性分散式深度學習系統AST分散式深度學習
- 文字上的演算法讀書筆記四--分散式系統演算法筆記分散式
- Django學習筆記《二》圖書管理系統Django筆記
- 移動地理資訊系統學習筆記筆記
- 作業系統學習筆記:裝置管理作業系統筆記
- 深度學習——loss函式的學習筆記深度學習函式筆記
- 集中式版本控制與分散式版本控制——Git 學習筆記01分散式Git筆記
- 分散式系統分散式
- 正規表示式學習筆記筆記
- Python學習筆記 - lambda表示式Python筆記
- Golang學習筆記-1.6 函式Golang筆記函式
- JavaScript學習筆記 - 原生函式JavaScript筆記函式
- MYSQL學習筆記14: 函式MySql筆記函式
- python學習筆記(六)——函式Python筆記函式
- TS學習筆記(四):函式筆記函式
- 二項式反演學習筆記筆記
- Oracle學習筆記(6)——函式Oracle筆記函式
- 知識學習綜合三---分散式系統大資料分散式大資料
- [業界方案] 用SOFATracer學習分散式追蹤系統Opentracing分散式
- 統計學習方法筆記筆記