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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...