日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

微服务为什么一定要Zookeeper?

發(fā)布時(shí)間:2025/3/21 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微服务为什么一定要Zookeeper? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

了解微服務(wù)的小伙伴都應(yīng)該知道ZookeeperZookeeper是一個(gè)分布式的,開源的分布式應(yīng)用程序協(xié)調(diào)服務(wù)。

現(xiàn)在比較流行的微服務(wù)框架Dubbo、Spring Cloud都可以使用Zookeeper作為服務(wù)發(fā)現(xiàn)與組冊(cè)中心。但是,為什么Zookeeper就能實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)與組冊(cè)呢?

Zookeeper的特性

我們先來了解一下Zookeeper的特性吧,因?yàn)樗奶匦詻Q定了它的使用場(chǎng)景。

1.樹狀目錄結(jié)構(gòu)

如上圖,Zookeeper是一個(gè)樹狀的文件目錄結(jié)構(gòu),有點(diǎn)想應(yīng)用系統(tǒng)中的文件系統(tǒng)的概念。每個(gè)子目錄(如App)被稱為znode,我們可以對(duì)每個(gè)znode進(jìn)行增刪改查。

2.持久節(jié)點(diǎn)(Persistent)

客戶端與Zookeeper服務(wù)端斷開連接后,該節(jié)點(diǎn)仍然存在。

3.持久有序節(jié)點(diǎn)(Persistent_sequential)

在持久節(jié)點(diǎn)基礎(chǔ)上,由zookeeper給該節(jié)點(diǎn)名稱進(jìn)行有序編號(hào),如0000001,0000002。

4.臨時(shí)節(jié)點(diǎn)(Ephemeral)

客戶端與Zookeeper服務(wù)端斷開連接后,該節(jié)點(diǎn)被刪除。臨時(shí)節(jié)點(diǎn)下,不存在子節(jié)點(diǎn)。

5.臨時(shí)有序節(jié)點(diǎn)(Ephemeral_sequential)

在臨時(shí)節(jié)點(diǎn)基礎(chǔ)上,由Zookeeper給該節(jié)點(diǎn)名稱進(jìn)行有序編號(hào),如0000001,0000002。

6.節(jié)點(diǎn)監(jiān)聽(Wacher)

客戶端2注冊(cè)監(jiān)聽它關(guān)心的臨時(shí)節(jié)點(diǎn)SubApp1的變化,當(dāng)臨時(shí)節(jié)點(diǎn)SubApp1發(fā)生變化時(shí)(如圖中被刪除的時(shí)候),zookeeper會(huì)通知客戶端2。

該機(jī)制是zookeeper實(shí)現(xiàn)分布式協(xié)調(diào)的重要特性。我們可以通過get,exists,getchildren三種方式對(duì)某個(gè)節(jié)點(diǎn)進(jìn)行監(jiān)聽。但是該事件只會(huì)通知一次。

微服務(wù)中應(yīng)用場(chǎng)景

1.分布式鎖

分布式鎖主要解決不同進(jìn)程中的資源同步問題。大家可以聯(lián)想一下單進(jìn)程中的多線程共享資源的情況,線程需要訪問共享資源,首先要獲得鎖,操作完共享資源后便釋放鎖。Zookeeper怎么實(shí)現(xiàn)分布式鎖?這篇推薦大家閱讀。

分布式中,上述的鎖就變成了分布式鎖了。那這個(gè)分布式鎖又是如何實(shí)現(xiàn)呢?

步驟1: 如圖,根據(jù)Zookeeper有序臨時(shí)節(jié)點(diǎn)的特性,每個(gè)進(jìn)程對(duì)應(yīng)連接一個(gè)有序臨時(shí)節(jié)點(diǎn)(進(jìn)程1對(duì)應(yīng)節(jié)點(diǎn)/znode/00000001,進(jìn)程2對(duì)應(yīng)節(jié)點(diǎn)/znode/00000002…如此類推)。

每個(gè)進(jìn)程監(jiān)聽對(duì)應(yīng)的上一個(gè)節(jié)點(diǎn)的變化。編號(hào)最小的節(jié)點(diǎn)對(duì)應(yīng)的進(jìn)程獲得鎖,可以操作資源。

步驟2: 當(dāng)進(jìn)程1完成業(yè)務(wù)后,刪除對(duì)應(yīng)的子節(jié)點(diǎn)/znode/00000001,釋放鎖。此時(shí),編號(hào)最小的鎖便獲得鎖(即/znode/00000002對(duì)應(yīng)進(jìn)程)。

重復(fù)以上步驟,保證了多個(gè)進(jìn)程獲取的是同一個(gè)鎖,且只有一個(gè)進(jìn)程能獲得鎖,就是Zookeeper分布式鎖的實(shí)現(xiàn)原理。

2.服務(wù)注冊(cè)與發(fā)現(xiàn)

2.1 背景

在微服務(wù)中,服務(wù)提供方把服務(wù)注冊(cè)到Zookeeper中心去如圖中的Member服務(wù),但是每個(gè)應(yīng)用可能拆分成多個(gè)服務(wù)對(duì)應(yīng)不同的Ip地址,Zookeeper注冊(cè)中心可以動(dòng)態(tài)感知到服務(wù)節(jié)點(diǎn)的變化。

服務(wù)消費(fèi)方(Order 服務(wù))需要調(diào)用提供方(Member 服務(wù))提供的服務(wù)時(shí),從Zookeeper中獲取提供方的調(diào)用地址列表,然后進(jìn)行調(diào)用。這個(gè)過程稱為服務(wù)的訂閱。

2.2服務(wù)注冊(cè)原理

rpc框架會(huì)在Zookeeper的注冊(cè)目錄下,為每個(gè)應(yīng)用創(chuàng)建一個(gè)持久節(jié)點(diǎn),如order應(yīng)用創(chuàng)建order持久節(jié)點(diǎn),member應(yīng)用創(chuàng)建member持久節(jié)點(diǎn)。

然后在對(duì)應(yīng)的持久節(jié)點(diǎn)下,為每個(gè)微服務(wù)創(chuàng)建一個(gè)臨時(shí)節(jié)點(diǎn),記錄每個(gè)服務(wù)的URL等信息。

2.3服務(wù)動(dòng)態(tài)發(fā)現(xiàn)原理

由于服務(wù)消費(fèi)方向Zookeeper訂閱了(監(jiān)聽)服務(wù)提供方,一旦服務(wù)提供方有變動(dòng)的時(shí)候(增加服務(wù)或者減少服務(wù)),Zookeeper就會(huì)把最新的服務(wù)提供方列表(member list)推送給服務(wù)消費(fèi)方,這就是服務(wù)動(dòng)態(tài)發(fā)現(xiàn)的原理。

作者:Marvin Mai

來源:https://dwz.cn/6ByfGykc

總結(jié)

以上是生活随笔為你收集整理的微服务为什么一定要Zookeeper?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。