【ZooKeeper怎麼玩】之一:爲何須要ZK

博客已經搬家,見【ZooKeeper怎麼玩】之一:爲何須要ZKgit


學習新東西首先須要搞清楚爲何學它,這是符合咱們的一個認知過程。
<!--more-->
#ZooKeeper是什麼
ZooKeeper是一個分佈式協調服務,它致力去解決如何在分佈式環境下保持數據一致性的問題。github

#分佈式環境下遇到的問題
共享的資源在併發的狀況下會出現競爭,在線程間可使用Java提供的鎖機制來協調這些資源,那麼在分佈式的環境下,如何來協調這些資源呢?服務器

如何協調分佈式環境下的資源,首先應該明確由單機環境轉到分佈式環境下遇到了什麼問題?網絡

1. **分佈式環境下沒法保證順序**。併發

在單機環境若是想讓A先執行,B後執行,先調用A後調用B就能夠了;因爲網絡是不可靠的,分佈式環境中則不一樣,在網絡延遲的狀況下A可能比B執行要晚。
2. **分佈式環境下沒法明確執行結果**。分佈式

單機中調用A成功和失敗很明確;而在分佈式環境中,即便調用A執行成功了,而在網絡傳輸中超時了,此時沒法判斷A是否執行成功了,須要經過重試的方式才能判斷A有沒有執行成功。
3. **分佈式環境下沒法保證數據一致性**。學習

分佈式環境若是不少臺服務器提供相同的服務,如何保證服務的某一個改動要麼同時生效,要麼失敗,是分佈式和單機環境的最重要的區別。線程

#沒有ZooKeeper以前的世界是什麼樣子blog

1. **保證事務順序一致性**。事務

若是事務A在一臺服務器上優先於事務B先執行,則在全部的服務器上事務A都將優先於事務B執行。因爲網絡是不可靠的,若是沒有ZooKeeper如何保證在全部服務器上事務順序一致將是一個很複雜的問題,而ZooKeeper使咱們專一於業務邏輯,而不用過度關注於分佈式協調。

2. **保證單調一致性**。 單調一致性是最終一致性的變種。在任何狀況下,用戶一旦讀到某個數據的某次更新後的值,就不會再讀到比這個值更舊的值了。

相關文章
相關標籤/搜索