zookeeper是如何保證集羣之間的數據一致性的

zk是 leader -follower機制,所有的寫操作是leader廣播通知到所有follower,有一半確認即可。那麼廣播肯定是不可靠的,萬一有的follower沒有操作本地數據,所有打到這臺follower的請求讀到的不是髒數據了嗎?

1、zk保證的是順序一致性,短時間是會有髒讀的產生。leader會爲每一個follower創建一個廣播隊列,保證消息的順序性。folower端:在下一個消息到來時,必已經順序操作之前的消息了。

2、如果一個客戶端將Znode z的值更新爲a,在之後的操作中,它又將z的值更新爲b,則沒有客戶端能夠在看到z的值是b之後再看到值a;因爲客戶端也會保存一個它見過的最大的 zxid,如果讀取的時候,如果客戶端發現 本地 zxid 比 server 端的最大 zxid 大,則拒絕,client 會自動重連到其他server。所以client可能會讀到髒數據,但不會讀到實時數據後,還會再讀到髒數據。

3、如果是廣播同步數據的過程中,集羣崩潰了。集羣會進入投票狀態,會通過投票機制選出一個commit最高(數據最新)的zk節點,然後其他follower 都會同步數據到最高commit(數據最新)。

 

zk基礎看這裏:  https://blog.csdn.net/wypblog/article/details/103268246

 

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