ZooKeeper產生的背景

        在上一篇文章中提到,ZK是一個分佈式的、開源的、分佈式應用程序協調服務。這其中提到三個概念分佈式、開源和協調服務。開源很好理解,ZK代碼的源代碼你可以在網上找到,你也可以自己修改和發佈,這都是基於開源協議而來的。在全球最大同性交友網站-->github上,你可以找到它的源碼,可以閱讀並修改它的源碼。關於分佈式和協調服務,後面慢慢的學習。

(1)分佈式

        ZK是一個分佈式系統,關於分佈式系統的介紹網上有很多文章,講的都非常詳細。借用《分佈式系統概念與設計》一書中的定義:分佈式系統是一個硬件或者軟件組件分佈在不同的網絡機器上,彼此之間僅僅通過消息傳遞進行通信和協調的系統。這裏的定義很明確的說明一些事情。首先,系統中的組成部分是分離的,而且彼此之間是不分主次的,系統中每個個體之間相對獨立,他們之間僅僅是消息傳遞,每個組成部分通過協調組成分佈式系統。

        我們都知道,網絡通信是不可靠的,網絡總是會通過各種各樣的原因出現消息丟失,這樣就容易造成網絡分區,也就是本來應該成爲一體的分佈式系統,由於網絡錯誤而造成一部分機器跟另一部分機器失去聯繫,從而分成幾個系統,這也就是“腦裂”。爲了解決通信不可靠造成的分佈式系統的不一致性,一些分佈式系統理論就產生了。

(2)ACID

        首先是事務的概念,事務是指一些列對系統數據訪問和更新的操作組成的一個邏輯的執行單元,而接觸最多的就是數據庫的事務,事務可以保證在異常情況下的數據一致性。面對事務,只有成功和失敗兩種狀態,這樣操作完,系統中的數據是具有一致性的。說到事務,事務具有四個特性,分別是:原子性、一致性、隔離性和持久性。那麼怎麼去理解呢?

        原子性。原子我們都知道是不可再分的(當然在物理學概念裏,原子是可以再分的),我們從日常的理解中出發,說它有原子行那麼就意味着它的操作只有兩個狀態成功和失敗,而在事務裏,原子性就意味着我們的邏輯的執行單元要麼執行成功,要麼執行失敗回滾,沒有中間的狀態存在。

        一致性。所謂一致性就是說事務的執行必須是系統數據狀態從一個一致性狀態到另一個一致性狀態,這裏必須要說明下,這個一致性狀態到底是個什麼意思。這裏可以理解爲,在一個事務正確完成之前,如果沒有其他的更新操作,那麼其他對該數據的讀操作都應該是一樣的結果。所以說一致性就是,事務完成後,如果沒有其他更新操作,所有對這些數據的讀操作的結果應該是一樣的。

        隔離性。隔離性涉及到併發的情況,事務的隔離性是在併發情況下,每個事務之間的操作應該是隔離的,不應該互相干擾。一個事務的內部操作和使用的數據對其他的事務是隔離的。

        持久性。持久性就很好理解,就是說一個事務如果完成提交,那麼這個事務所做的更改就應該被永久保存下來,即使系統發生崩潰或者宕機問題。

(3)CAP/BASE

        CAP理論是分佈式計算理論的公理,它說明一個分佈式系統不可能同時滿足一致性、可用性和分區容錯性,這三個特性最多滿足兩個。

        一致性。這裏的一致性說的是在分佈式系統中,一致性代表相同的數據副本在不同的數據節點之間能否保持一致性的特徵。針對某一個具有多個數據副本的數據節點的操作,如果執行完成併成功提交,那麼對於所有的用戶來說都會讀到它最新的數據值。滿足這個條件的被稱爲具有強一致性。系統如果不滿足一致性,系統對外提供的服務就可能出現錯誤,整個系統就可能出現不可用的狀態。

        可用性。可用性表示系統的功能一直是可用的,對於用戶的請求總能在有限的時間內返回結果。這個有限的時間一般根據用戶對請求期望的時間而定,如果我是用戶,當然不希望等半天才有反應。

        分區容錯性。分區容錯指的是系統在發生網絡分區的時候,仍能提供滿足一致性和分區容錯性的服務。

        對於分佈式系統而言,一般情況下,出現分區的可能性很大,分區容錯性是在一般分佈式系統中必然要解決的問題。因此一般情況下,在三者中選擇時都會選擇分區容錯性,至於一致性和可用性只能在二者之間進行一個權衡。

        根據以上的CAP理論,A和C之間必須選一,這是個讓人頭疼的事情。能不能都兼得呢?這裏BASE理論就應運而生了,它代表:基本可用、軟狀態和最終一致性。

        基本可用。它代表着當系統出現不可預知的問題時,允許系統犧牲一部分性能,但是系統仍然可用。

        軟狀態。允許數據出現中間狀態,在強一致性中,數據是不允許出現中間狀態的。這裏允許不同數據節點之間數據進行同步時出現部分延時。

        最終一致性。最終一致性強調的是系統中所有數據副本,在經過一段時間的同步以後,系統最終能夠達到一致性的狀態。不需要系統數據的實時強一致性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章