天天看點

ZooKeeper學習——概述篇一、分布式一緻性問題二、CAP理論、BASE理論以及分布式一緻性協定三、ZooKeeper的應用場景四、ZooKeeper是什麼?ZooKeeper的設計理念是什麼?五、ZooKeeper的設計目标?六、ZooKeeper的特性?七、ZAB協定八、小結

前言:最近學習分布式架構,發現随處可見ZooKeeper。于是花了點時間了解一下什麼是ZooKeeper,這篇文章是入門概述篇,不會涉及到源碼相關。

一、分布式一緻性問題

  • 集中式系統:應用的各項業務邏輯集中在一個伺服器上。
  • 分布式系統:應用的各項業務邏輯可以分布在不同的伺服器上,彼此之間通過消息傳遞進行通信、協調的系統。

我們都知道事務有ACID特性,随着計算機技術的發展,計算機系統從以前的集中式系統漸漸走向了分布式系統,由于分布式環境存在的諸如通信異常、網絡分區、節點故障、三态(成功/失敗/逾時)等各種問題,事務的特性也變得更加難以保證。于是,在大型分布式存儲系統中,經常會出現分布式一緻性問題。 案例:銀行的跨行轉賬業務,這項業務包含從開戶行将錢取出,然後将錢存入異地銀行兩個過程。銀行系統可以類比為分布式系統,這項業務就是一項分布式事務。試想這種情況,使用者成功将錢從開戶行取出,卻在存錢的時候出現了系統異常,那使用者的錢豈不是白白沒了。這時我們就稱出現了分布式一緻性問題(這裡展現在系統的資料狀态已經出現了本不該出現的異常)。      為了解決這種分布式一緻性問題,大神們提出了CAP理論、BASE理論以及各種分布式一緻性協定。

二、CAP理論、BASE理論以及分布式一緻性協定

CAP理論:一個分布式系統不可能同時滿足一緻性(Consistency),可用性(Availability),分區容忍性(Partition tolerance)這三個特性,最多隻能滿足兩個。在實際的情況中,因為分布式系統通常都是部署在不同的伺服器上的,是以分區容忍性一般我們是不能舍棄的一個因素,是以我們需要考慮的一般是一緻性和可用性之間的權衡。   BASE理論:BASE理論是對CAP理論中一緻性和可用性進行權衡之後提出來的一種思想。即基本可用(Basically Available),軟狀态(Soft state),最終一緻性(Eventually Consistent)。    在這兩個理論的指導下,先後出現了一些常見的分布式一緻性協定,例如2PC,3PC,Paxos,ZAB等,這裡就不具體展開了。ZooKeeper正是根據ZAB協定開發出來的分布式協調服務。

三、ZooKeeper的應用場景

為什麼先說應用場景呢?因為我以前會覺得這個ZooKeeper到處都出現,以至于我反而覺得不知道它是幹嘛的,是以這裡先介紹一下ZooKeeper的應用場景。也即是ZooKeeper能夠解決的問題。

  • 資料釋出/訂閱
  • 命名服務
  • 叢集管理
  • 分布式鎖
  • 負載均衡
  • 分布式協調/通知
  • Master選舉
  • 分布式隊列

這裡隻是羅列出來,并不會深入到具體的實作,有興趣的可以自行查閱網上資料。 為了正常使用ZooKeeper,需要準備一個或多個伺服器,并在各伺服器上下載下傳和安裝ZooKeeper,進行簡單的ZooKeeper叢集配置之後,這個伺服器叢集就可以正常對外提供ZooKeeper分布式協調服務了。使用ZooKeeper的應用并不需要部署在與ZooKeeper相同的伺服器上,當然也可以這麼做。 ZooKeeper用戶端通過用戶端腳本/Java API/開源用戶端與ZooKeeper叢集進行互動,進而保證ZooKeeper用戶端應用的分布式一緻性。

四、ZooKeeper是什麼?ZooKeeper的設計理念是什麼?

ZooKeeper是典型的分布式資料一緻性解決方案。設計理念是将複雜且容易出錯的分布式一緻性服務封裝起來,構成一個高效可靠的原語集,并以一系列簡單易用的接口提供給使用者使用。

五、ZooKeeper的設計目标?

  • 簡單的資料模型
  • 可以建構ZooKeeper叢集
  • 順序通路
  • 高性能

六、ZooKeeper的特性?

  • 順序一緻性
  • 原子性
  • 單一視圖
  • 可靠性
  • 實時性

七、ZAB協定

那麼ZooKeeper是如何做到對外提供這種分布式協調服務的呢?這得益于ZooKeeper采用的ZAB協定,ZAB(即ZooKeeper Atomic Broadcast---ZooKeeper原子消息廣播協定)是分布式一緻性協定的一種,是為ZooKeeper專門設計的一種支援崩潰恢複的原子廣播協定。ZAB協定包括兩種模式:崩潰恢複&消息廣播。 伺服器架構剛啟動時,或Leader伺服器出現網絡中斷、崩潰退出、重新開機等異常時,ZooKeeper伺服器叢集會進 入崩潰恢複模式。當選舉産生了新的Leader伺服器,同時叢集中有過半的機器與Leader伺服器完成狀态同步 後,進入消息廣播。    ZAB協定的核心是定義了對于那些會改變ZooKeeper伺服器資料狀态的事務請求的處理方式。    關于ZAB協定是如何工作的,我打算重新寫一篇博文。

八、小結

其實我很想把自己學習過程中慢慢領悟的過程寫出來,但是寫完之後發現也說得不是很清楚,ZooKeeper還是需要在一些項目的實踐中去體會的,紙上得來終覺淺。

繼續閱讀