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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

ZooKeeper 定位:能解决什么问题?不能解决什么问题?

發(fā)布時間:2025/3/21 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ZooKeeper 定位:能解决什么问题?不能解决什么问题? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

ZooKeeper 很流行,有個基本的疑問:

  • ZooKeeper 是用來做什么的?

  • 之前沒有ZK,為什么會誕生 ZK?

OK,解答一下上面的疑問:(下面是憑直覺說的)

  • ZooKeeper 是用于簡化分布式應(yīng)用開發(fā)的,對開發(fā)者屏蔽一些分布式應(yīng)用開發(fā)過程中的底層細(xì)節(jié)

  • ZooKeeper 對外暴露簡單的 API,用于支持分布式應(yīng)用開發(fā)

  • ZooKeeper 在提供上述功能的同時,其還是一個 高性能、高可用、高可靠的分布式集群

上面說這么多,總結(jié)一下,ZK 能解決分布式應(yīng)用開發(fā)的問題,ZK 能很好的解決問題。到這一步,疑問就更多了:

  • 分布式應(yīng)用開發(fā),有哪些常見問題?ZK 是如何屏蔽這些底層細(xì)節(jié)的?

  • ZooKeeper 對外暴露了那些 API?這些 API 如何支持分布式應(yīng)用開發(fā)的?這些 API 還能簡化嗎?API 的語義性怎么樣?

  • ZooKeeper 自身是一個高性能、高可用、高可靠的分布式集群,那有個簡單的問題:

    • 高性能是指什么?ZooKeeper 為了達(dá)到高性能,做了哪些工作?

    • 高可用同上

    • 高可靠同上

  • Note:本篇 wiki 就是為了解決上述第一個疑問的。(其他疑問會在其他 blog 中逐步解答)

    為什么有 ZooKeeper

    一個應(yīng)用程序,涉及多個進(jìn)程協(xié)作時,業(yè)務(wù)邏輯代碼中混雜有大量復(fù)雜的進(jìn)程協(xié)作邏輯。

    上述多進(jìn)程協(xié)作邏輯,有 2 個特點:

    • 處理復(fù)雜

    • 處理邏輯可重用

    因此,考慮將多進(jìn)程協(xié)作的共性問題拎出,作為基礎(chǔ)設(shè)施,讓 RD 更加專注業(yè)務(wù)邏輯開發(fā),即:

    ZooKeeper 就是上述多進(jìn)程協(xié)作基礎(chǔ)服務(wù)的一種。

    ZooKeeper 的特點

    ZooKeeper 有幾個簡單特點:

    • ZooKeeper 的 API:從 文件系統(tǒng) API 得到的啟發(fā),提供簡單的 API

    • ZooKeeper 運行在專用服務(wù)器上,跟業(yè)務(wù)邏輯分離,保證了高容錯性可擴(kuò)展性

    ZooKeeper 是存儲設(shè)施,但特別注意

    • ZK上存儲的數(shù)據(jù)聚焦為:協(xié)作數(shù)據(jù)(元數(shù)據(jù)),而不是應(yīng)用數(shù)據(jù),應(yīng)用數(shù)據(jù)有自己的存儲方案,例如 HDFS 等

    • ZK 本質(zhì)上,可以看作一種特殊的 FS

    特別說明:

    應(yīng)用數(shù)據(jù)和元數(shù)據(jù),由于使用場景不同,對一致性和持久性的要求有差異, 因此,架構(gòu)設(shè)計、數(shù)據(jù)治理過程中,應(yīng)將 2 類數(shù)據(jù)獨立看待、獨立存儲。

    ZooKeeper 的使命

    ZK 要解決的核心問題:

    ZK 目標(biāo):簡化分布式應(yīng)用開發(fā)中,多進(jìn)程協(xié)作問題。為分布式應(yīng)用,提供高效、可靠的分布式協(xié)調(diào)服務(wù)(基礎(chǔ)服務(wù)),例如:

    • 統(tǒng)一的命名服務(wù)

    • 分布式鎖

    • 進(jìn)程崩潰檢測

    • Leader 選舉

    • 配置管理:配置變更時,及時下發(fā)到各個 Client。

    一個簡單的問題:多進(jìn)程的協(xié)作是什么?尼瑪呀,有完沒完,啥問題你都有,面對這個掉咋天的腦殼,還是回答一下。

    多進(jìn)程協(xié)作,整體分為 2 類:

  • 協(xié)作:多進(jìn)程需要一同處理某些事情,一些進(jìn)程采取行動是的其他進(jìn)程能夠正常工作,例如:主從結(jié)構(gòu),M 向 S 分配任務(wù),S 才會執(zhí)行,否則 S 就保持空閑狀態(tài)

  • 競爭:兩個進(jìn)程不能同時工作,一個進(jìn)程必須等待另個進(jìn)程執(zhí)行完畢,例如:主從結(jié)構(gòu),M 節(jié)點失效后,很多 S 都想成為 M,這時,就需要互斥鎖,只有第一個獲得鎖的 S 成為 M

  • 特別說明:

  • 不跨網(wǎng)絡(luò)協(xié)作:多進(jìn)程,可以在同一臺物理主機(jī)上,同步原語很方便(比如?管道、共享內(nèi)存、消息隊列、信號量)

  • 跨網(wǎng)絡(luò)協(xié)作:多進(jìn)程,分布在不同的物理主機(jī)上,ZK 關(guān)注這一類

  • 跨網(wǎng)絡(luò)多進(jìn)程協(xié)作,進(jìn)程通信,基本思路有 2 個:

  • 消息機(jī)制:通過網(wǎng)絡(luò),直接信息交換,多消息傳遞算法,實現(xiàn)同步原語

  • 共享存儲:利用外部共享存儲,實現(xiàn)多進(jìn)程協(xié)作,要求共享存儲提供有序訪問,ZK 采用這種方式

  • 真實系統(tǒng)中,跨網(wǎng)絡(luò)通信,有幾個共性問題:

  • 消息延遲:由于網(wǎng)絡(luò)原因,后發(fā)送先到達(dá)

  • 處理器性能:由于系統(tǒng)調(diào)度原因,消息到達(dá)后,延遲處理

  • 時鐘偏移:不同物理主機(jī),時鐘發(fā)生偏移

  • ZK 精心設(shè)計用于屏蔽上述 3 個共性問題,使得這些問題在應(yīng)用服務(wù)層面完全透明化。

    ZooKeeper 特性

    ZooKeeper 解決的本質(zhì)問題

    分布式系統(tǒng)的一致性問題:

  • 消息傳遞:延遲性,先發(fā)送的消息,不一定先到達(dá);

  • 消息傳遞:丟失性,發(fā)送的消息,可能丟失;

  • 節(jié)點崩潰:分布式系統(tǒng)內(nèi),任何一個節(jié)點都可能崩潰;

  • 在這種情況下,如何保證數(shù)據(jù)的一致性?

  • 提案投票:基于投票策略,2PC

  • 選舉投票:基于投票策略,投出優(yōu)先級最高的節(jié)點(包含最新數(shù)據(jù)的節(jié)點)

  • Paxos 目標(biāo):解決分布式一致性問題,提高分布式系統(tǒng)容錯性的一致性算法。

    Paxos 本質(zhì):基于消息傳遞的高度容錯的一致性算法

    ZooKeeper 定位

    ZooKeeper 是:

  • 分布式協(xié)調(diào)服務(wù)

  • 高效、可靠

  • 方便應(yīng)用程序,聚焦業(yè)務(wù)邏輯開發(fā),而不需要過多關(guān)注分布式進(jìn)程間協(xié)作細(xì)節(jié)

  • ZooKeeper 不直接暴露原語,而是,暴露一部分調(diào)用方法組成的 API,類似文件系統(tǒng)的 API,支持應(yīng)用程序?qū)崿F(xiàn)自己的原語。

    ZooKeeper 特性

    ZooKeeper 可以保證如下分布式一致性特性:

    • 順序一致性:同一個 Client 發(fā)起的事務(wù)請求,嚴(yán)格按照發(fā)起順序執(zhí)行

    • 原子性:事務(wù)請求,要么應(yīng)用到所有節(jié)點,要么一個節(jié)點都沒有應(yīng)用

    • 單一視圖:Client 無論連接到哪個節(jié)點,看到的服務(wù)端數(shù)據(jù)都是一致的(Note:不準(zhǔn)確,其實是最終一致性

    • 可靠性:事務(wù)一旦執(zhí)行成功,狀態(tài)永久保留

    • 實時性:事務(wù)一旦執(zhí)行成功,Client 并不能立即看到最新數(shù)據(jù),但 ZooKeeper 保證最終一致性

    ZooKeeper 設(shè)計目標(biāo)

    ZooKeeper 致力于提供高性能、高可用、順序一致性的分布式協(xié)調(diào)服務(wù),保證數(shù)據(jù)最終一致性。

    目標(biāo)一:高性能(簡單的數(shù)據(jù)模型)

  • 采用樹形結(jié)構(gòu)組織數(shù)據(jù)節(jié)點;

  • 全量數(shù)據(jù)節(jié)點,都存儲在內(nèi)存中;

  • Follower 和 Observer 直接處理非事務(wù)請求;

  • 目標(biāo)二:高可用(構(gòu)建集群)

  • 半數(shù)以上機(jī)器存活,服務(wù)就能正常運行

  • 自動進(jìn)行 Leader 選舉

  • 目標(biāo)三:順序一致性(事務(wù)操作的順序)

  • 每個事務(wù)請求,都會轉(zhuǎn)發(fā)給 Leader 處理

  • 每個事務(wù),會分配全局唯一的遞增id(zxid,64位:epoch + 自增 id)

  • 目標(biāo)四:最終一致性

  • 通過提議投票方式,保證事務(wù)提交的可靠性

  • 提議投票方式,只能保證 Client 收到事務(wù)提交成功后,半數(shù)以上節(jié)點能夠看到最新數(shù)據(jù)

  • ZooKeeper 出現(xiàn)之前

    ZK 出現(xiàn)之前,分布式系統(tǒng)常用兩種方式,實現(xiàn)多進(jìn)程協(xié)作:

  • 分布式鎖管理器

  • 分布式數(shù)據(jù)庫

  • ZK 更專注于進(jìn)程協(xié)作,而不提供任何鎖接口和通用的存儲數(shù)據(jù)接口。(疑問:ZK 也可以提供啊,我們不使用就行了)

    應(yīng)用服務(wù)器,常見的 2 種需求:

  • Master-Slave?Leader 選舉:要求提供Master節(jié)點選舉功能

  • 進(jìn)程響應(yīng)跟蹤?崩潰檢測:要求提供進(jìn)程存活狀態(tài)的跟蹤

  • 分布式鎖:互斥排它鎖

  • ZK 為上述 2 種策略提供了基礎(chǔ) API。

    ZooKeeper 不適用的場景:

  • 海量數(shù)據(jù)存儲:ZK 本質(zhì)是特殊的 FS,但 ZK 用于存儲元數(shù)據(jù),需要單獨存儲應(yīng)用數(shù)據(jù)

  • 來源 |?https://urlify.cn/67BZnm

    總結(jié)

    以上是生活随笔為你收集整理的ZooKeeper 定位:能解决什么问题?不能解决什么问题?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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