ZooKeeper分佈式過程協同技術詳解-第一章

Zookeeper簡介

對於現在的分佈式系統,應用服務由很多個獨立的程序組成,這些獨立的程序則運行在形形色色、千變萬化的一組計算機上。相對於開發在一臺計算機上運行的單個程序,如何讓一個應用中多個 獨立的程序協同工作是一件非常困難的事情。開發這樣的應用,很容易讓很多開發人員陷入如何使多個程序協同工作的邏輯中,最後導致沒有時間更好地思考和實現他們自己的應用程序邏輯;又或者開發人員對協同邏輯 關注不夠,只是用很少的時間開發了一個簡單脆弱的主協調器,導致不可靠的單一失效點。

ZooKeeper的設計保證了其健壯性,這就使得應用開發人員可以更多關 注應用本身的邏輯,而不是協同工作上。

ZooKeeper從文件系統API得到啓 發,提供一組簡單的API,使得開發人員可以實現通用的協作任務,包括 選舉主節點、管理組內成員關係、管理元數據等。ZooKeeper包括一個應用 開發庫(主要提供Java和C兩種語言的API)和一個用Java實現的服務組 件。ZooKeeper的服務組件運行在一組專用服務器之上,保證了高容錯性和 可擴展性。

當你決定使用ZooKeeper來設計應用時,最好將應用數據和協同數據獨立開。比如,網絡郵箱服務的用戶對自己郵箱中的內容感興趣,但是並不 關心由哪臺服務器來處理特定郵箱的請求。在這個例子中,郵箱內容就是 應用數據,而從郵箱到某一臺郵箱服務器之間的映射關係就是協同數據 (或稱元數據)。整個ZooKeeper服務所管理的就是後者。

1、zookeeper的使命

zookeeper可以在分佈式系統中協作多個任務。一個協作任務是指一個包含多個進程的任務。 這個任務可以是爲了協作或者是爲了管理競爭。協作意味着多個進程需要 一同處理某些事情,一些進程採取某些行動使得其他進程可以繼續工作。 比如,在典型的主-從(master-worker)工作模式中,從節點處於空閒狀態 時會通知主節點可以接受工作,於是主節點就會分配任務給從節點。競爭則不同。它指的是兩個進程不能同時處理工作的情況,一個進程必須等待 另一個進程。同樣在主-從工作模式的例子中,我們想有一個主節點,但是 很多進程也許都想成爲主節點,因此我們需要實現互斥排他鎖(mutual exclusion)。實際上,我們可以認爲獲取主節點身份的過程其實就是獲取 鎖的過程,獲得主節點控制權鎖的進程即主節點進程。

當開發人員使用 ZooKeeper進行開發時,開發人員設計的那些應用往往可以看成一組連接到 ZooKeeper服務器端的客戶端,它們通過ZooKeeper的客戶端API連接到 ZooKeeper服務器端進行相應的操作。Zookeep的客戶端API功能強大,其中包括:

  • 保障強一致性、有序性和持久性。
  • 實現通用的同步原語的能力。
  • 在實際分佈式系統中,併發往往導致不正確的行爲。ZooKeeper提供了一種簡單的併發處理機制。

2、zookeeper不適用場景

  • 整個ZooKeeper的服務器集羣管理着應用協作的關鍵數據。ZooKeeper 不適合用作海量數據存儲。

3、通過ZooKeeper構建分佈式系統

分佈式系統中的進程通信有兩種選擇:直接通過網絡進行信息交換, 或讀寫某些共享存儲。ZooKeeper使用共享存儲模型來實現應用間的協作和 同步原語。對於共享存儲本身,又需要在進程和存儲間進行網絡通信。我 們強調網絡通信的重要性,因爲它是分佈式系統中併發設計的基礎。

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