天天看點

Zookeeper場景實踐:(4)命名服務

命名服務是指通過指定的名字來擷取資源或者服務的位址,提供者的資訊。利用zookeeper很容易建立一個全局的路徑,而這個路徑就可以作為一個名字,它可以指向叢集中的叢集,提供的服務的位址,遠端對象等。簡單來說使用zookeeper做命名服務就是用路徑作為名字,路徑上的資料就是其名字指向的實體。

阿裡巴巴集團開源的分布式服務架構dubbo中使用zookeeper來作為其命名服務,維護全局的服務位址清單。在dubbo實作中:

服務提供者在啟動的時候,向zk上的指定節點/dubbo/${servicename}/providers目錄下寫入自己的url位址,這個操作就完成了服務的釋出。

服務消費者啟動的時候,訂閱/dubbo/{servicename}/providers目錄下的提供者url位址, 并向/dubbo/{servicename} /consumers目錄下寫入自己的url位址。

注意,所有向zk上注冊的位址都是臨時節點,這樣就能夠保證服務提供者和消費者能夠自動感應資源的變化。

另外,dubbo還有針對服務粒度的監控,方法是訂閱/dubbo/{servicename}目錄下所有提供者和消費者的資訊。

上面的介紹已經滿詳細,實際實作起來也比較容易。下面講講模拟程式的主要特點。模拟程式有3個參數

<code>-m</code> 程式運作的方式,指定是服務提供者provider還是服務消費者consumer,或者是服務監控者monitor

<code>-n</code> 表示服務名稱

<code>-s</code> 表示zookeeper的服務位址ip:port

運作指令如下:

服務提供者:

<code>&gt;nameservice -m provider -n query_bill -s172.17.0.36:2181</code>

服務消費者:

<code>&gt;nameservice -m consumer -n query_bill -s172.17.0.36:2181</code>

服務監控者:

<code>&gt;nameservice -m monitor -n query_bill -s172.17.0.36:2181</code>

第一條指令是啟動一個服務提供程序,它提供了一個名為query_bill的服務,程式首次運作時會建立

<code>/nameservice</code>,<code>/nameservice/query_bill</code>,<code>/nameservice/query_bill/provider</code>,<code>/nameservice/query_bill/consumer/</code>等幾個路徑。然後在服務提供程序在<code>/nameservice/query_bill/provider</code>下建立臨時序列節點.

第二條指令是啟動一個服務消費程序,它在<code>/nameservice/query_bill/consumer/</code>下建立臨時序列節點,并watch<code>/nameservice/query_bill/provider</code>的子節點變化事件,及時更新provider清單。

第三條指令是啟動一個服務監控程序,它watch <code>/nameservice/query_bill/provider</code>,<code>/nameservice/query_bill/consumer/</code>兩個路徑的子節點變化,及時更新provider清單和comsumer清單。

完整的代碼如下:

繼續閱讀