從這周開始深刻學習Zookeeper,主要是看PAXOS到ZOOKEEPER分佈式一致性理論與實踐以及Zookeeper3.5的源碼,在整個學習過程當中會整理一些學習筆記。html
1.分佈式基本概念數據庫
2.一致性協議服務器
分佈式系統是一個硬件或者軟件組件分佈在不一樣網絡計算機上,彼此之間僅僅經過消息傳遞來進行通訊和協調的系統。一個分佈式系統一般具備如下特色:網絡
- 分佈式:在空間上隨意分佈,
- 對等性:組成分佈式系統的全部節點都是對等的。
- 併發性
- 缺少全局時鐘。在分佈式系統很難肯定多個時間的順序,緣由就是分佈式系統缺少一個全局的時鐘。
- 故障老是會發生。
分佈式系統體系機構面對着諸多的難題和挑戰:併發
- 通訊異常:分佈式系統須要在各個節點之間進行網絡通訊,而網絡自己是不可靠的。
- 網絡分區:當網絡因爲發生異常狀況,最終致使組成分佈式系統的全部節點,只有部分節點之間可以進行通訊,另外一些節點則不能。這種現象稱爲網絡分區,俗稱腦裂。
- 三態:分佈式系統的每一次請求與響應存在特有的三態概念,即成功、失敗、超時。
- 節點故障:指組成分佈式系統的服務器節點出現的宕機或「僵死」現象。
從ACID到CAP/BASE
ACID
事務是由一系列對系統中數據進行訪問與更新的操做所組成的一個程序執行邏輯單元,一個數據庫事務具備如下四個特性:分佈式
- 原子性(Atomicity):指事務必須是一個原子的操做序列單元。在執行過程當中要麼所有執行,要麼所有不執行。
- 一致性(Consistency):事務的執行不能破壞數據庫的完整性和一致性,事務在執行先後數據庫必須處於一致的狀態。
- 隔離性(Isolation):併發的事務是互相隔離的,一個事務的執行不能被其餘事務干擾。標準的SQL規範中,定義了4個事務隔離級別:Read Uncommitted、Read Committed、Repeatable Read和Serializable。MySQL的默認隔離級別是:Repeatable Read,Oracle的默認隔離級別是:READ COMMITTED。
- 持久性(Durability):指一個事務一旦提交,它對數據庫中對應數據狀態的變動是永久性的。
分佈式事務
分佈式事務是指事務的參與者、支持者的服務器、資源服務器以及事務管理器分別位於分佈式系統的不一樣節點之上。一般一個分佈式事務中涉及對過個數據源或者業務系統的操做。學習
CAP理論:一個分佈式系統不可能同時知足一致性(C:Consistency)、可用性(A:Availability)可分區容錯性(P:Partition tolerance)。htm
- 一致性:一致性是數據在過個副本之間是否可以保持一致的特性。
- 可用性:指系統提供的服務必須一致處於可用的狀態。
- 分區容錯性:分佈式系統在遇到任何網絡分區的故障時候。仍然須要可以保證對外提供知足一致性和可用性的服務。
BASE是Basically Available(基本可用)、Soft state(軟狀態)、Eventually Consistency(最終一致性)。blog
- 基本可用:指分佈式系統在出現不可預知的故障時容許損失部分可用性。
- 軟狀態:是指容許系統中的數據存在中間狀態,並認爲該中間狀態的存在不會影響系統的總體可用性,即容許在不一樣節點的數據副本之間存在數據同步的延時
- 最終一致性:系統中的全部數據副本,在通過一段時間的同步後,最終可以到達一個一直的狀態。