Zookeeper中主從模式結構場景練習
下面這個部分,我們將通過zkCli工具來實現簡單的主從結構模式,主從模式結構設計到了下面的幾個角色。
Master
Master監視著新的worker和tasks,並且分配任務到workers上
Worker
Worker註冊到系統中,好讓master知道他們是可以來執行任務的
Client
Client用來建立任務並且等待系統的響應,
TheMaster Role
由於只能有一個master,所以只能有一個程序來獲得主控權去成為master,為了表示master,我們來建立一個臨時的節點叫做/master
上面操作中,我們建立了一個臨時的節點/master,並且讓該節點儲存了一些主機的資訊,上面的-e引數表明了我們建立的是一個臨時的節點。
此時我們在開啟另外一個程序,執行下面的操作
當再次建立/master時,告訴我們已經存在,此時,我們在此節點上建立一個監聽,用stat命令操作,此時關閉剛才的程序,我們在當前的程序中會看到如下的提示內容
監視告訴我們master節點已經刪除了。
Workers,.tasksand assignment
在我們進一步的討論workers和client之前,我們先建立幾個重要的節點資訊
上面的三個節點都是永久性的節點並且沒有包含資料,我們想用這些節點來告訴我們那些workers是可用的,當我們要分配工作的時候給他們。
在實際的應用中,這些節點既可以被主master建立,也可以被其他的載入程式來建立。下面我需要對這些節點新增一個監聽。
在上面中,我們利用可選的true引數來新增監聽,效果與stat命令一樣。
TheWorker Role
首先,worker需要通知master它是可以執行task的,因此我們建立一個臨時的節點來代表worker的子節點。注意到workers下面建立了子節點,我們可以從監聽中看到相應的輸出資訊。
接下來,worker需要建立一個父節點/assign/worker1.example.com,並且對他進行監聽的操作
Worker現在已經開始受到作業了,接下來我們將會討論客戶端的角色。
Client的角色
Client新增任務到系統中。這個例子的目的並不在於任務是否真正的被執行了。在這裡我們假設客戶端讓主從模式系統執行了一個cmd的命令,為了向系統中新增任務,客戶端需要執行以下操作。
一旦task節點被建立,將會看到如下的輸出資訊
接下來master檢查新的任務,得到可以利用的worker資訊,並且分配任務
緊接著worker收到了監聽的資訊,如下所示
Worker接下來檢查taske資訊
一旦worker完成了正在執行的任務,他就會新增一個狀態的節點到/asks
接下來客戶端收到了通知,就開始檢查結果
客戶端檢查狀態節點的內容決定是否成功的被執行,如果被執行的話,那麼內容將會是done資訊。當然了也可能會涉及到其他的分散式系統,但不管是什麼,機制都是一樣的,畢竟zookeeper的本質都是一樣的。