Hadoop系列-zookeeper基礎

来源:https://www.cnblogs.com/zeem0ny/archive/2019/03/29/10624545.html
-Advertisement-
Play Games

目前是剛剛初學完zookeeper,這篇文章主要是簡單的對一些基本的概念進行梳理強化。 zookeeper基礎概念的理解 有時候電腦領域很多名詞都是從一長串英文提取首字母縮寫而來,但很不幸zookeeper不是。那麼,zookeeper到底是用來乾什麼的?我這裡先擺一段官網的介紹: ZooKeep ...


目前是剛剛初學完zookeeper,這篇文章主要是簡單的對一些基本的概念進行梳理強化。

  1. zookeeper基礎概念的理解

    有時候電腦領域很多名詞都是從一長串英文提取首字母縮寫而來,但很不幸zookeeper不是。那麼,zookeeper到底是用來乾什麼的?我這裡先擺一段官網的介紹:

    ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services. All of these kinds of services are used in some form or another by distributed applications. Each time they are implemented there is a lot of work that goes into fixing the bugs and race conditions that are inevitable. Because of the difficulty of implementing these kinds of services, applications initially usually skimp on them, which make them brittle in the presence of change and difficult to manage. Even when done correctly, different implementations of these services lead to management complexity when the applications are deployed.(官網鏈接:http://zookeeper.apache.org

    由於目前還沒有實際項目使用zookeeper的經驗,針對上述的情況,目前只是對configuration、distributed synchronization有比較清楚的一個認識,認識到什麼程度就先記錄到什麼程度,後期有更加深刻的認識後還會修改更新。首先,要明確兩點,第一,zk是在分散式場景中使用,第二,主要的工作就是任務進程的協調調度。在多個應用訪問同一個資源的情況下會出現資源競爭,例如一個是查詢餘額操作、一個是取錢操作、一個是存錢操作,這三個操作不可能放任不管讓其自動操作,那麼就會出現一個用於協調任務的調度器,zk就扮演這樣一個角色,當然這隻是其中一種應用-分散式鎖,zk的其他應用還包括配置維護、分散式消息隊列、分散式通知等。

  2. zk的基本數據模型

    zk的基本數據模型與Linux文件系統具有相似的結構,其中每一個節點稱為znode,每一個znode都包含有兩部分內容:

    • 數據(預設最大存儲空間為1MB,是原子操作)

    • 元數據信息,包括cZxid、ctime、mtimp、pZxid等節點屬性信息

       

       

       

 

  1. 節點類型

    znode的類型在創建時就確定唯一,不可改變,包括:

    • 臨時節點、臨時有序節點

    • 永久節點、永久有序節點

       

    臨時性的節點生命周期取決於會話(session),會話結束節點自動消失,同時臨時性節點不允許有子節點。永久性節點不依賴於會話,只有執行刪除操作後才會消失。

  1. watch機制

    客戶端可以通過設置watcher來監視節點的增、刪、改等狀態變化,當watcher被觸發時,客戶端會收到一條通知,考慮到需要減小網路數據傳輸流量,一個watcher只能被觸發一次,要想多次觸發,需要在觸發執行的代碼中再次設置watcher。

  2. 應用場景

    • 配置管理

      在一個分散式的系統中,每台機器運行一個app,app需要讀取資料庫的信息,而app與資料庫連接需要相應的資料庫信息,如ip地址、埠等,這個信息就可以通過一個配置文件存儲在配置中心中,配置中心將配置信息寫入znode的數據中進行存儲,同時每個app會在相應的節點上註冊一個watcher。一旦配置信息改變,配置中心將新的數據寫入到節點中之後,watch機制觸發,相應的app就會更改連接資料庫所需的信息重新與資料庫建立連接。

       

       

       

       

    • 分散式鎖

      假設同一時間只能允許一個任務訪問資料庫中的某條數據,那麼首先各個app會在ZK上註冊一個自己的臨時節點比如節點分別為/app_lock_00001、/app_lock_00002、/app_lock_00003,我們設置序號最小的節點獲得鎖,即/app_lock_00001,同時/app_lock_00002監聽/app_lock_00001,/app_lock_00003監聽/app_lock_00002,此時app1開始執行訪問數據的操作,執行完成後斷開連接,臨時節點消失,/app_lock_00002節點監聽到之後app2開始執行,同樣的操作一直到app3執行完畢。

       

       

       

       

  3. zk各台機器節點之間的角色

    zk中各個機器節點之間的角色有:leader、follower、observe,三種,先不考慮observer,哪台節點是leader、哪些是follower是通過選舉機制決定的。具體來講有兩種選舉機制:

    • client端在連接zk servers的時候,會創建臨時節點,根據client端與zk servers創建節點的時間順序,哪一個先創建,哪一個作為leader,其他的就是follower。

    • client端在連接zk servers的時候,會創建臨時有序節點,根據節點序號的大小,最小的為leader,其它為follower,並依次監聽比當前節點號小的節點

    zk運行正常情況下有以下特點:

    • 客戶端可隨便連接其中的一臺機器節點

    • 客戶端可以同時連接多台機器,實現連接的冗餘

    • 與事務(增、刪、改)有關的操作會通過follower轉發至leader,查詢操作直接由所連接的伺服器負責響應。

    那麼,對於事務操作轉發給leader之後是如何進行的呢?首先,leader收到事務操作之後提出一個Proposal,其它的follower負責投票,leader收集投票之後如果超過半數,那麼這次提議成功,同時響應對應的事務操作。同時發送消息給follower,follower接收消息之後會把操作更新至記憶體,最後響應client端。加入client數量不斷增加的話,zk servers有可能就滿足不了客戶端訪問的需求,而leader只有一個,那麼就只能添加機器作為follower角色。依照這個邏輯,follower會不斷增加,那麼就會出現一個問題:一旦出現事務操作,leader要搜集半數以上的投票,follower越多,收集過程就會越慢。為瞭解決這個問題,在zookeeper3.3.3版本後引入了observer角色,observer不參與投票,但是其他方麵包括轉發事務操作、響應客戶端查詢操作都與follower一樣,這樣在增加機器的同時就不會因為投票規則而影響整體的響應性能。

    以上是一個基本的認識,深入的細節可以參考博文:

    http://www.cnblogs.com/sunddenly/p/4033574.html

 

 

 

 

 

 

 

 


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

-Advertisement-
Play Games
更多相關文章
  • 學習目標: 1、分析u-boot-1.1.6環境變數,瞭解環境變數初始化、設置以及過程 2、為後面能夠掌握u-boot-1.1.6如何啟動內核過程打下基礎 1、環境變數的概念 在分析uboot環境變數的源碼實現之前,先介紹一下環境變數的概念。u-boot通過環境變數為用戶提供一定程度的可配置性,在不 ...
  • 文件1內容 文件2內容 把文件2的內容放到文件1最後一列的後面,我們只需要系統自帶命令paste ...
  • 一、登陸伺服器並輸入如下命令: 根據提示輸入密碼、埠、加密方法等即可,成功安裝後出現如下提示: 二、啟動shadowsocks服務,命令如下: 三、在阿裡雲安全組開啟前面設置的埠 四、shadowsocks客戶端設置如下: 五、啟動系統代理即可開始上網。 六、打開谷歌網站如下圖: ...
  • 首先呢,你的先有一臺自己的伺服器把,這個就不多贅述了,我自己買了一臺國外的VPS. 一、docker的安裝 首先我們來看下伺服器的版本信息: 1、docker安裝 安裝完之後查看是否安裝成功: 啟動docker服務 查看docker是否啟動成功 看到那個綠色的字體了嘛,OK,啟動成功 查看docke ...
  • 一、Linux最高許可權用戶root,預設可以直接登錄sshd。為了提高伺服器的安全度,需要對它進行禁止,使得攻擊者無法通過暴力破解來獲取root許可權。 1,新建一個用戶; 2,為新用戶設置密碼; 3,修改SSHD配置,禁止root直接登錄 #vi /etc/ssh/sshd_config 查找“#P ...
  • Linux伺服器中, 經常發生"error: too many open files", 或者 "ulimit: max user processes: cannot modify limit" 類型的錯誤, 這些問題為什麼會發生? 又要如何解決? 本文記錄了我遇到問題、解決問題的過程, 最後還對u... ...
  • 由於系統中沒有yum環境需要編譯安裝redis,但系統中卻沒有安裝gcc和gcc-c++,掛載本地鏡像安裝gcc和gcc-c++由於版本太高,由於一時疏忽誤將系統的依賴庫glibc使用rpm -e 命令卸載,導致系統瞬間奔潰無法使用bash登錄伺服器。現將解決方案整理總結以便後人查閱。 使用Secu ...
  • ICMP ICMP(Internet Control Message protocol)互聯網信息控制協議,用於實現鏈路連通性測試和鏈路追蹤,可以實現鏈路差錯報告,屬於UDP協議。ICMP有多種類型的報文,同一類型的報文會有多個不同的Code。 ping、tracert 等命令的內部就是用的 icm ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...