<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ZooKeeper 到底解決了什么問題?

          共 3323字,需瀏覽 7分鐘

           ·

          2021-01-18 18:29

          點擊上方“開源Linux”,選擇“設為星標”

          回復“學習”獲取獨家整理的學習資料!

          目標

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

          • ZooKeeper 是用來做什么的?
          • 之前沒有ZK,為什么會誕生 ZK?

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

          • ZooKeeper 是用于簡化分布式應用開發(fā)的,對開發(fā)者屏蔽一些分布式應用開發(fā)過程中的底層細節(jié)
          • ZooKeeper 對外暴露簡單的 API,用于支持分布式應用開發(fā)
          • ZooKeeper 在提供上述功能的同時,其還是一個 高性能、高可用、高可靠的分布式集群

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

          1. 分布式應用開發(fā),有哪些常見問題?ZK 是如何屏蔽這些底層細節(jié)的?
          2. ZooKeeper 對外暴露了哪些 API?這些 API 如何支持分布式應用開發(fā)的?這些 API 還能簡化嗎?API 的語義性怎么樣?
          3. ZooKeeper 自身是一個高性能、高可用、高可靠的分布式集群,那有個簡單的問題:
            • 高性能是指什么?ZooKeeper 為了達到高性能,做了哪些工作?
            • 高可用同上
            • 高可靠同上

          Note:本篇 wiki 就是為了解決上述第一個疑問的。(其他疑問請持續(xù)關注公眾號互聯網架構師,會逐步進行解答)

          為什么有 ZooKeeper

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

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

          • 處理復雜
          • 處理邏輯可重用

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

          ZooKeeper 就是上述多進程協(xié)作基礎服務的一種。

          ZooKeeper 的特點

          ZooKeeper 有幾個簡單特點:

          • ZooKeeper 的 API:從 文件系統(tǒng) API 得到的啟發(fā),提供簡單的 API
          • ZooKeeper 運行在專用服務器上,跟業(yè)務邏輯分離,保證了高容錯性可擴展性

          ZooKeeper 是存儲設施,但特別注意

          • ZK上存儲的數據聚焦為:協(xié)作數據元數據),而不是應用數據,應用數據有自己的存儲方案,例如 HDFS 等
          • ZK 本質上,可以看作一種特殊的 FS

          特別說明:

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

          ZooKeeper 的使命

          ZK 要解決的核心問題:

          ZK 目標:簡化分布式應用開發(fā)中,多進程協(xié)作問題。為分布式應用,提供高效可靠的分布式協(xié)調服務(基礎服務),例如:

          • 統(tǒng)一的命名服務
          • 分布式鎖
          • 進程崩潰檢測
          • Leader 選舉
          • 配置管理:配置變更時,及時下發(fā)到各個 Client。

          一個簡單的問題:多進程的協(xié)作是什么?面對這個問題,還是回答一下。

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

          1. 協(xié)作多進程需要一同處理某些事情,一些進程采取行動使得其他進程能夠正常工作,例如:主從結構,M 向 S 分配任務,S 才會執(zhí)行,否則 S 就保持空閑狀態(tài)
          2. 競爭:兩個進程不能同時工作,一個進程必須等待另個進程執(zhí)行完畢,例如:主從結構,M 節(jié)點失效后,很多 S 都想成為 M,這時,就需要互斥鎖,只有第一個獲得鎖的 S 成為 M

          特別說明:

          1. 不跨網絡協(xié)作:多進程,可以在同一臺物理主機上,同步原語很方便(比如?管道、共享內存、消息隊列、信號量)
          2. 跨網絡協(xié)作:多進程,分布在不同的物理主機上,ZK 關注這一類

          跨網絡多進程協(xié)作,進程通信,基本思路有 2 個:

          1. 消息機制:通過網絡,直接信息交換,多消息傳遞算法,實現同步原語
          2. 共享存儲:利用外部共享存儲,實現多進程協(xié)作,要求共享存儲提供有序訪問,ZK 采用這種方式

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

          1. 消息延遲:由于網絡原因,后發(fā)送先到達
          2. 處理器性能:由于系統(tǒng)調度原因,消息到達后,延遲處理
          3. 時鐘偏移:不同物理主機,時鐘發(fā)生偏移

          ZK 精心設計用于屏蔽上述 3 個共性問題,使得這些問題在應用服務層面完全透明化。

          ZooKeeper 特性

          ZooKeeper 解決的本質問題

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

          1. 消息傳遞:延遲性,先發(fā)送的消息,不一定先到達;
          2. 消息傳遞:丟失性,發(fā)送的消息,可能丟失;
          3. 節(jié)點崩潰:分布式系統(tǒng)內,任何一個節(jié)點都可能崩潰;

          在這種情況下,如何保證數據的一致性?

          1. 提案投票:基于投票策略,2PC
          2. 選舉投票:基于投票策略,投出優(yōu)先級最高的節(jié)點(包含最新數據的節(jié)點)

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

          Paxos 本質:基于消息傳遞高度容錯一致性算法

          ZooKeeper 定位

          ZooKeeper :

          1. 分布式協(xié)調服務
          2. 高效、可靠
          3. 方便應用程序,聚焦業(yè)務邏輯開發(fā),而不需要過多關注分布式進程間協(xié)作細節(jié)

          ZooKeeper 不直接暴露原語,而是,暴露一部分調用方法組成的 API,類似文件系統(tǒng)的 API,支持應用程序實現自己的原語

          ZooKeeper 特性

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

          • 順序一致性:同一個 Client 發(fā)起的事務請求,嚴格按照發(fā)起順序執(zhí)行
          • 原子性:事務請求,要么應用到所有節(jié)點,要么一個節(jié)點都沒有應用
          • 單一視圖:Client 無論連接到哪個節(jié)點,看到的服務端數據都是一致的(Note:不準確,其實是最終一致性
          • 可靠性:事務一旦執(zhí)行成功,狀態(tài)永久保留
          • 實時性:事務一旦執(zhí)行成功,Client 并不能立即看到最新數據,但 ZooKeeper 保證最終一致性

          ZooKeeper 設計目標

          ZooKeeper 致力于提供高性能高可用順序一致性的分布式協(xié)調服務,保證數據最終一致性。關注公眾號互聯網架構師回復2T可以獲取 Zookeeper 及 Java系列架構視頻。

          目標一:高性能(簡單的數據模型)

          1. 采用樹形結構組織數據節(jié)點;
          2. 全量數據節(jié)點,都存儲在內存中;
          3. Follower 和 Observer 直接處理非事務請求;

          目標二:高可用(構建集群)

          1. 半數以上機器存活,服務就能正常運行
          2. 自動進行 Leader 選舉

          目標三:順序一致性(事務操作的順序)

          1. 每個事務請求,都會轉發(fā)給 Leader 處理
          2. 每個事務,會分配全局唯一的遞增id(zxid,64位:epoch + 自增 id)

          目標四:最終一致性

          1. 通過提議投票方式,保證事務提交的可靠性
          2. 提議投票方式,只能保證 Client 收到事務提交成功后,半數以上節(jié)點能夠看到最新數據

          ZooKeeper 出現之前

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

          1. 分布式鎖管理器
          2. 分布式數據庫

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

          應用服務器,常見的 2 種需求:

          1. Master-Slave?Leader 選舉:要求提供Master節(jié)點選舉功能
          2. 進程響應跟蹤?崩潰檢測:要求提供進程存活狀態(tài)的跟蹤
          3. 分布式鎖:互斥排它鎖

          ZK 為上述 2 種策略提供了基礎 API。

          ZooKeeper 不適用的場景:

          1. 海量數據存儲:ZK 本質是特殊的 FS,但 ZK 用于存儲元數據,需要單獨存儲應用數據

          術語介紹

          術語解釋
          分布式系統(tǒng)跨多個物理主機,由多個獨立運行的節(jié)點組成的系統(tǒng)
          原語業(yè)務上不可分割的元素/過程,舉例:分布式鎖原理,可以暴露創(chuàng)建查詢釋放幾個方法

          作者:NingG
          地址:http://ningg.top/zookeeper-positioning/

          參考資料
          [1]

          ZooKeeper-Distributed Process Coordination:?http://shop.oreilly.com/product/0636920028901.do

          [2]

          從Paxos到Zookeeper分布式一致性原理與實踐:?https://book.douban.com/subject/26292004/


          - End -

          關注「開源Linux」加星標,提升IT技能

          瀏覽 66
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  美女扒开尿口让男生桶爽视频 | 国产免费麻豆 | 亚洲久久视频 | 亚洲无码手机在线观看 | 国产亚洲人妻 |