Zookeeper 的學習與運用

来源:http://www.cnblogs.com/zbwbest/archive/2016/08/17/5780024.html
-Advertisement-
Play Games

引子 雲計算越來越流行的今天,單一機器處理能力已經不能滿足我們的需求,不得不採用大量的服務集群。服務集群對外提供服務的過程中,有很多的配置需要隨時更新,服務間需要協調工作,這些信息如何推送到各個節點?並且保證信息的一致性和可靠性? 眾所周知,分散式協調服務很難正確無誤的實現,它們很容易在競爭條件和死 ...


引子

雲計算越來越流行的今天,單一機器處理能力已經不能滿足我們的需求,不得不採用大量的服務集群。服務集群對外提供服務的過程中,有很多的配置需要隨時更新,服務間需要協調工作,這些信息如何推送到各個節點?並且保證信息的一致性和可靠性?

眾所周知,分散式協調服務很難正確無誤的實現,它們很容易在競爭條件和死鎖上犯錯誤。如何在這方面節省力氣?Zookeeper是一個不錯的選擇。 Zookeeper背後的動機就是解除分散式應用在實現協調服務上的痛苦。本文在介紹Zookeeper的基本理論基礎上,用Zookeeper實現了一 個配置管理中心,利用Zookeeper將配置信息分發到各個服務節點上,並保證信息的正確性和一致性。

Zookeeper是什麼?

引用官方的說法:“Zookeeper是一個高性能,分散式的,開源分散式應用協調服務。它提供了簡單原始的功能,分散式應用可以基於它實現更高級 的服務,比如同步,配置管理,集群管理,名空間。它被設計為易於編程,使用文件系統目錄樹作為數據模型。服務端跑在java上,提供java和C的客戶端 API”。

Zookeeper總體結構

Zookeeper服務自身組成一個集群(2n+1個服務允許n個失效)。Zookeeper服務有兩個角色,一個是leader,負責寫服務和數據同步,剩下的是follower,提供讀服務,leader失效後會在follower中重新選舉新的leader。

Zookeeper邏輯圖如下,

  1. 客戶端可以連接到每個server,每個server的數據完全相同。
  2. 每個follower都和leader有連接,接受leader的數據更新操作。
  3. Server記錄事務日誌和快照到持久存儲。
  4. 大多數server可用,整體服務就可用。

Zookeeper數據模型

Zookeeper表現為一個分層的文件系統目錄樹結構(不同於文件系統的是,節點可以有自己的數據,而文件系統中的目錄節點只有子節點)。

數據模型結構圖如下,

圓形節點可以含有子節點,多邊形節點不能含有子節點。一個節點對應一個應用,節點存儲的數據就是應用需要的配置信息。

Zookeeper 特點

  • 順序一致性:按照客戶端發送請求的順序更新數據。
  • 原子性:更新要麼成功,要麼失敗,不會出現部分更新。
  • 單一性 :無論客戶端連接哪個server,都會看到同一個視圖。
  • 可靠性:一旦數據更新成功,將一直保持,直到新的更新。
  • 及時性:客戶端會在一個確定的時間內得到最新的數據。

Zookeeper運用場景

  • 數據發佈與訂閱 (我的業務用到這個特性,後面會有詳細介紹)

應用配置集中到節點上,應用啟動時主動獲取,併在節點上註冊一個watcher,每次配置更新都會通知到應用。

  • 名空間服務

分散式命名服務,創建一個節點後,節點的路徑就是全局唯一的,可以作為全局名稱使用。

  • 分散式通知/協調

不同的系統都監聽同一個節點,一旦有了更新,另一個系統能夠收到通知。

  • 分散式鎖

Zookeeper能保證數據的強一致性,用戶任何時候都可以相信集群中每個節點的數據都是相同的。一個用戶創建一個節點作為鎖,另一個用戶檢測該節點,如果存在,代表別的用戶已經鎖住,如果不存在,則可以創建一個節點,代表擁有一個鎖。

  • 集群管理

每個加入集群的機器都創建一個節點,寫入自己的狀態。監控父節點的用戶會受到通知,進行相應的處理。離開時刪除節點,監控父節點的用戶同樣會收到通知。

Zookeeper在我們業務邏輯上的運用

我們公司做極光推送,Push 業務平臺有大量的邏輯伺服器,按業務類型分組。邏輯服務的運行依賴於配置,並且配置會線上調整,需要一個集中的配置項管理中心。Zookeeper的發佈 與訂閱特性以及發送更新通知的機制很好的滿足了我們的需求。Zookeeper的容災特性也免去了我們相關的大量管理工作。

下麵我主要和大家分享一下Zookeeper在我們內部服務中的應用。

a. 我們的邏輯伺服器包含兩類配置。

一種為Acl(訪問控制列表),用戶的消息消費後,按照列表中的條件走向下一個邏輯伺服器。另一種只是單獨的演算法邏輯的外提,稱為Agl(訪問演算法列表),但是其中某些判斷條件會經常變化。這兩類配置被收集到了配置管理中心(即Zookeeper)。

邏輯圖如下,

用戶編輯好策略配置信息(xml格式),通過客戶端載入到Zookeeper。Zookeeper立即通知其下的邏輯伺服器(BLx),邏輯伺服器 下載最新的配置策略,並應用新的策略。新的策略有可能改變某一段id範圍內用戶的數據流向,或越過原來的邏輯伺服器,或指向新加入的邏輯伺服器。

b. 數據模型設計

同一類型的邏輯服務在Zookeeper上創建一個節點,共用相同的配置信息。
該節點下麵為策略配置項,分為Acl和Agl兩類,如下圖:(以代理邏輯服務為例)

Acl1, Acl2, Acl3, Agl1, Agl2分別存有策略配置信息。變化後會通知監聽Proxy節點的邏輯伺服器,Proxy邏輯伺服器下載最新策略,並應用該策略。新節點的加入和退出也會通知到Proxy邏輯伺服器。

c. 業務處理流程如下圖

    1. 邏輯服務監聽自己類型節點(本例如前圖Proxy節點)
    2. 編輯新策略,載入策略到Zookeeper(策略保存在Proxy/Acls/Acl[1..n],或Proxy/Agls/Agl1[1..n])
    3. Zookeeper通知各邏輯節點
    4. 各邏輯節點下載新策略到本地,並應用新策略

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

-Advertisement-
Play Games
更多相關文章
  • 在開發過程當中需要用到配置信息,這些信息不能進行硬編碼,這時配置文件是一個比較好的方式,java提供了properties格式的文件,以鍵值對的方式保存信息,在讀取的時候通過鍵獲得鍵對應的值,spring提供了讀取properties文件的支持,下麵看具體的配置, 一、<context:proper ...
  • --> 斷點續傳: 就像迅雷下載文件一樣,停止下載或關閉程式,下次下載時是從上次下載的地方開始繼續進行,而不是重頭開始... --> RandomAccessFile --> pointer(文件指針) --> seek(移動文件指針) --> 斷點續傳 --> 通過複製來模擬簡單的斷點續傳... ...
  • 什麼是延遲載入? 延遲載入是指當應用程式想要從資料庫獲取對象時(在沒有設置lazy屬性值為false),Hibernate只是從資料庫獲取符合條件的對象的OId從而生成代理對象,並沒有載入出對象 訪問該對象的屬性時才會載入出相應的值。簡答來說就是儘可能的減少查詢的數據量。 如何配置延遲載入 在Hib... ...
  • 原文轉自 http://www.cnblogs.com/ldms/p/4565547.html Yii 有很多 extension 可以使用,在查看了 Yii 官網上提供的與 OAuth 相關的擴展後,發現了幾個 OAuth2 的客戶端擴展,但是並沒有找到可以作為 OAuth2 Server 的擴展 ...
  • 網站業務規模和訪問量的逐步發展,原本由單台伺服器、單個功能變數名稱的迷你網站架構已經無法滿足發展需要。 此時我們可能會購買更多伺服器,並且啟用多個二級子功能變數名稱以頻道化的方式,根據業務功能將網站分佈部署在獨立的伺服器上;或通過負載均衡技術 (如:DNS輪詢、Radware、F5、LVS等)讓多個頻道共用一組服務 ...
  • Hello World! ...
  • Java NIO:NIO概述 在上一篇博文中講述了幾種IO模型,現在我們開始進入Java NIO編程主題。NIO是Java 4裡面提供的新的API,目的是用來解決傳統IO的問題。本文下麵分別從Java NIO的幾個基礎概念介紹起。 以下是本文的目錄大綱: 一.NIO中的幾個基礎概念 二.Channe ...
  • 題意:給定s1,s1兩副撲克,順序從下到上。依次將s2,s1的撲克一張一張混合。例如s1,ABC; s2,DEF. 則第一次混合後為DAEBFC. 然後令前半段為s1, 後半段為s2. 如果可以變換成所給出的字元串,輸出變換次數即可;否則,輸出-1。 這題數據太水了,我是這樣判斷無法變換成題目所給出 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...