ZooKeeper--分散式系統的基石

来源:https://www.cnblogs.com/sunnick/archive/2018/09/21/9688294.html
-Advertisement-
Play Games

分散式架構有以下幾點普適性的共性需求: 1. 提供集群的集中化的配置管理功能,可以不重啟就讓新的配置參數生效,類似與配置中心 2. 簡單可靠的集群節點動態發現機制,便於動態發現服務,動態擴展節點 3. 簡單可靠的leader選舉機制 4. 提供分散式鎖 zookeeper的數據結構整體上可以看作一顆 ...


分散式架構有以下幾點普適性的共性需求:

     1. 提供集群的集中化的配置管理功能,可以不重啟就讓新的配置參數生效,類似與配置中心

     2. 簡單可靠的集群節點動態發現機制,便於動態發現服務,動態擴展節點

     3. 簡單可靠的leader選舉機制

     4. 提供分散式鎖

 

    zookeeper的數據結構整體上可以看作一顆目錄樹,其中每個節點被稱作ZNode,每個Znode都可以通過其路徑(Path)唯一標識,如/services/helloworld。每個ZNode都可以綁定一個二進位存儲數據(Data),用來存儲少量數據,預設最大1MB。不建議在ZNode中存儲大量的數據,因為數據多份複製,會帶來寬頻壓力,降低性能。

  



    ZNode有一個ACL訪問許可權列表,用來決定當前操作API 的用戶是否有操作此節點的許可權。ZNode還提供了實時通知的介面--Watch,應用可以選擇任意ZNode進行監聽,如果被監聽的ZNode或者其Child發生變化,則應用可以實時收到通知,這樣一來,很多場景和需求都能通過ZooKeeper來實現了。

 

    此外,ZNode是有生命周期的,這取決於節點的類型,節點的類型分為以下幾類:

    1. 持久節點:節點創建後就一直存在,直到有刪除操作來主動刪除該節點

    2. 臨時節點:臨時節點的生命周期和創建該節點的客戶端會話綁定,即如果客戶端會話失效(客戶端宕機或下線),這個節點自動刪除 

    3. 時序節點:創建節點是可以設置這個屬性,ZooKeeper會自動為給定的節點加上一個數字尾碼,作為新的節點名。數字尾碼的範圍是整型的最大值

     4. 臨時性時序節點:同時具備臨時節點與時序節點的特性,主要用於分散式鎖的實現

 

    從上面的分析來看,持久節點主要用於保存持久化數據,如集群的配置信息,結合Watch特性,實現配置的實時生效。

    臨時節點可以實現複雜的動態服務發現和服務路由功能。通常的做法是,分散式集群不同伺服器上的服務註冊到同一個ZooKeeper上,併在某個指定的路徑下創建各自對應的臨時節點,如/serviceA/node1, /serviceA/node2,客戶端則監聽/service目錄。當有新的節點加入集群時,ZooKeeper會把變化實時通知到所有客戶端,客戶端就可以及時更新自己的服務路由轉發表,實現全自動透明的服務發現和服務路由功能。

    時序類型的節點,在創建時,每個節點名都會被追加一個遞增的序號,類似於資料庫自增主鍵,每個ZNode都有唯一序號,而且不會衝突。以此可以實現簡單的Master(Leader)選舉機制。即把一組service實例都註冊為臨時性時序節點ZNode,每次選取Master時,選取序號最小的為Master,而當Master宕機時,相應的ZNode會消失,新的伺服器列表會推送至客戶端,繼續選舉下一任Master,這樣就做到了動態選舉Master。

 

 

    ZooKeeper主要用於以下場景:

    1. 實現配置管理(配置中心)

    2. 服務註冊中心

    3. 集群通信與控制子系統

 

    作為服務註冊中心時:


 

    首先服務提供者將自身的服務信息註冊到註冊中心。通常註冊信息包含如下內容:

    1. 服務的類型

    2. 隸屬於哪個系統

    3. 服務的IP/埠

    4. 服務的請求URL

    5. 服務的權重

    其次註冊中心要將所有服務信息存儲,同時負責將註冊信息的更新推送到所有的消費者(通過Watch機制實現)。

    最後,服務消費者只有在初始化及服務變更時會依賴註冊中心,而在整個服務調用過程中與服務提供方直接通信,不依賴於任何第三方,包括註冊中心。

 

 

 

歡迎關註我的微信公眾號(Sunnick,請掃碼關註),隨時留言交流~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 給定 S 和 T 兩個字元串,當它們分別被輸入到空白的文本編輯器後,判斷二者是否相等,並返回結果。 # 代表退格字元。 示例 1: 示例 2: 示例 3: 示例 4: 提示: 根據這一題,掌握數據結構中棧的使用 題目分析: 題目的意思是,在兩個字元串中,對於每一個字元串,如果存在'#'符號,並且它前 ...
  • 我想很多程式員應該記得 GitHub 上有一個 Awesome - XXX 系列的資源整理。awesome-ios 就是 vsouza 發起維護的 iOS 資源列表,內容包括:框架、組件、測試、Apple Store、SDK、XCode、網站、書籍等。Swift 語言寫成的項目會被標記為 ★ ,Ap ...
  • 前言:項目中經常要用到Maven,從來也沒有配置過,直到當人問到Maven是乾什麼的,是怎麼管理項目的?一頭霧水,所以寫了這篇博客,首先附上百度百科的詞條: Maven項目對象模型(POM),可以通過一小段描述信息來管理項目的構建,報告和文檔的軟體項目管理工具。 一、Maven的下載環境變數配置 下 ...
  • 題意 題目鏈接 Sol 如果給出的樹是鏈的話顯然就是LIS 不是鏈的時候直接當鏈做,每個節點維護一個multiset表示計算LIS過程中的單調棧 啟髮式合併即可 時間複雜度:$O(nlog^2n)$ ...
  • 明白生產環境中的jvm參數 寫代碼的時候,程式寫完了,發到線上去運行,跑一段時間後,程式變慢了,cpu負載高了……一堆問題出來了,所以瞭解一下生產環境的機器上的jvm配置是有必要的。比如說: JDK版本是多少?採用何種垃圾回收器? 程式啟動的時候預設分配堆記憶體空間是多少?隨著程式的運行,程式最多能使 ...
  • 每個程式員、或者說每個工作者都應該有自己的職業規劃,如果你不是富二代,不是官二代,也沒有職業規劃,希望你可以思考一下自己的將來。今天給大家分享的是一篇來自阿裡Java架構師對普通程式員的職業建議,希望對你有啟發。 普通程式員,三年成為年薪70w架構師,只因做到了這些 ...
  • 1.分析 上傳文件的過程:客服端選擇一個文件後,寫入到伺服器端,伺服器端使用一個目錄來存儲該文件--底層IO流操作 2.jsp文件上的表單設計 表單傳輸格式用multipart/form-data,要上傳的文件input標簽name屬性最好用同樣的首碼或者尾碼好獲取 3後臺Servlet處理 1.S ...
  • 題意 題目鏈接 題意:給出一張無向圖,每次詢問兩點之間的最短路,滿足$m - n <= 20$ $n, m, q \leqslant 10^5$ Sol 非常好的一道題。 首先建出一個dfs樹。 因為邊數-點數非常少,所以我們可以對於某些非樹邊特殊考慮。 具體做法是:對於非樹邊連接的兩個點,暴力求出 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...