精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

詳解 ZooKeeper 數據持久化

開發 前端
們通過之前的文章有介紹過,小S(Sync)負責對辦事處的數據進行歸檔,所以今天他就是我們的主角,讓我們一起深入了解他的日常工作吧!

[[388266]]

本文轉載自微信公眾號「HelloGitHub」,作者HelloGitHub。轉載本文請聯系HelloGitHub公眾號。

Hi,這里是 HelloGitHub 推出的 HelloZooKeeper 系列,免費開源、有趣、入門級的 ZooKeeper 教程,面向有編程基礎的新手。

項目地址:https://github.com/HelloGitHub-Team/HelloZooKeeper

前一篇文章我們介紹了 ZK 是如何進行選舉的,這篇我們開始學習 ZK 是如何將數據持久化到磁盤中的。

一、優秀員工小S(Sync)

我們通過之前的文章有介紹過,小S(Sync)負責對辦事處的數據進行歸檔,所以今天他就是我們的主角,讓我們一起深入了解他的日常工作吧

為了喚醒大家的遠古記憶,我放一張之前的

今天我們會重點講一下圖中的藍色部分,不過在此之前還是得先從整體架構上介紹下 ZK 的數據管理,ZK 的數據大致是分為了兩部分,一個是內存,一個就是磁盤文件。

1.1 內存

雖然今天我們的主角是磁盤文件,但是內存還是稍微再提一下下,幫助大家記憶的同時也能有一個比較全面的視角去認知 ZK 整體的數據管理。

ZK 在內存中的存儲就是之前故事中有提到的兩個賬本:小紅本和小黃本。如果排除作為回調通知記錄的小黃本,那 ZK 的內存中就是小紅本對應的哈希表而已,但是小黃本中的數據依然非常重要,所以需要將兩者作為整體一起看待,以及之前我有說過小F(Final)掌管了這兩個賬本,作為業務處理的最后一個負責人,小S(Sync) 從時間上來說是優先于小F(Final)先處理的,所以 ZK 的設計是優先將數據存入磁盤,再去修改內存中的數據保證盡可能的提升數據的可靠性。下面我們繼續了解磁盤文件(還真就提一下下!)

1.2 磁盤文件

ZK 的開發者給 ZK 設計了兩種磁盤文件,對應的路徑分別是 zoo.cfg 配置中的 dataDir 和 dataLogDir 這兩項目錄的配置。為了之后的描述清楚,我給這兩種磁盤文件起了名字:dataDir 對應 snapshot,dataLogDir 對應 log,log 就是的是小S(Sync)工作中的歸檔,snapshot 就是的是小S(Sync)工作中的快照。

log 是負責順序記錄每一個寫請求到文件,snapshot 則是直接將整個內存對象持久化至文件中。假設我現在 zoo.cfg 的配置是這樣:

  1. dataDir=/tmp/zookeeper/snapshot 
  2. dataLogDir=/tmp/zookeeper/log 

當 ZK 啟動后會基于上面兩個路徑繼續創建 version-2 子路徑,之后的文件都會在該子路徑下創建

  1. /tmp 
  2. └── zookeeper 
  3.     ├── snapshot 
  4.       └── version-2 
  5.         └── ... 
  6.     └── log 
  7.       └── version-2 
  8.         └── ... 

二、文件的創建和寫入

兩種文件分別是在什么時候被寫入磁盤的呢?寫入的內容又是哪些呢?我們接下來對兩種文件一一進行分析。

2.1 log 文件

log 文件名的格式是這樣 log.{zxid} zxid 對應當時創建該文件時的最大 zxid,假設現在創建時 zxid 為 0,那目錄結構會是這樣:

  1. /tmp 
  2. └── zookeeper 
  3.     └── log 
  4.       └── version-2 
  5.         └── log.0 

這個 log.0 文件創建的時機你也可以簡單的理解為當服務端收到第一個寫請求的時候,而且當創建完成后,并不能直接將數據寫入,而是要先寫一些文件頭的字段,比如大名鼎鼎的魔數,版本號等元信息。

而 log 文件的魔數是 ZKLG(4 個字節),版本號固定為 2(4 個字節),還要記錄一個 dbId 固定為 0(8 個字節) (當前沒用,可能之后會派用處吧),所以前 16 個字節是固定這樣的:

  1. Z K L G        2                 0 
  2. A4B4C47 00000002 00000000 00000000 

那之后的業務數據是如何記錄的呢?

每一個寫請求都可以分為四個部分:校驗和、請求頭、請求數據、簽名,校驗和是通過后面三個字段計算出來的,小S每次收到寫請求后都會按照這樣的順序將對應請求的四個字段寫入 log 文件,由于不同的業務請求數據不固定,而且數據長度也比較大,這里就不給大家展示具體的值(如果大家想要知道這硬核的存儲過程,不妨給我留言,我以后單獨做下,嘗試逐個字節解釋)

然后是 zookeeper.txnLogSizeLimitInKb 這個環境變量配置,默認是 -1,這個配置限制了 log 單個文件大小(單位是 KB),每次小S(Sync)歸檔的時候(圖中右下角粉色部分“是否歸檔”),將數據統一刷到磁盤后,如果用戶手動配置了該參數,就會檢查當前 log 文件大小是否超過了該參數大小,如果超過了就會進行 rollLog,相當于下一次的寫請求會創建一個新的 log 文件。除此之外,當小S(Sync)每次快照的時候會強制執行一次 rollLog。

2.2 snapshot 文件

snapshot 文件名的格式是這樣 snapshot.{zxid} zxid 對應當是創建該文件時的最大 zxid,假設現在創建是最大 zxid 是 0,那目錄結構會是這樣:

  1. /tmp 
  2. └── zookeeper 
  3.     └── snapshot 
  4.       └── version-2 
  5.         └── snapshot.0 

而關于是否快照(圖中中間區域粉色部分“是否快照”),之前有簡單介紹過是和隨機數有關,這次我們深入了解下。

首先有兩個配置 zookeeper.snapCount (默認 100000)和 zookeeper.snapSizeLimitInKb(默認 4194304 單位是KB,相當于 4 GB)在啟動后會基于這兩個配置分別生成兩個隨機數,假設上述的配置是按照默認的設置,這兩個隨機數的范圍就是:

  1. randRoll = [0, 50000] 
  2. randSize = [0, 4194304 * 1024 / 2] 

可以簡單的認為就是上述兩個配置的一半之內的隨機數,至于 randSize 為什么要乘以 1024 因為最終文件計算大小是以 byte 作為單位的。

而是否快照就是取決于上面兩個隨機數,有兩個條件:

  • 當前寫請求的數量達到了 zookeeper.snapCount 的一半并加上 randRoll 的數量
  • 當前 log 文件的大小達到了 zookeeper.snapSizeLimitInKb 的一半并加上 randSize 的大小

上述條件滿足任意一個條件后就會重置上面的兩個隨機數,并開始生成快照,生成快照這個過程是啟動一個子線程去創建的。

snapshot 和 log 還有個不同的地方就是,snapshot 文件 ZK 提供了三種不同的壓縮實現,GZIP、SNAPPY、CHECKED,通過 zookeeper.snapshot.compression.method 進行配置,默認是 CHECKED,就是原始按照字節順序寫入,另外兩個這里就不展開了。那我們接下來看看 snapshot 文件是怎么記的吧。

和 log 文件一樣,也要先記一些文件的頭部字段,而 snapshot 文件的魔數是 ZKSN(4 個字節),版本號固定為 2(4 個字節),還要記錄一個 dbId 固定為 -1(8 個字節) (當前沒用,可能之后會派用處吧),所以前 16 個字節是固定這樣的:

  1. Z K S N        2         -1 
  2. 5A4B534E 00000002 FFFFFFFF FFFFFFFF 

然后緊跟其后的部分客戶端的會話信息,客戶端的數量,然后循環記錄每一個客戶端的 sessionId、超時時間,然后是小紅本里的所有信息了包括但不限于 ACL,節點的統計數據,節點的數據,子節點的信息等。最后一部分就是校驗和和簽名。和 log 一樣,如果大家有興趣的話,我之后單獨再做一篇逐個字節講解的。

三、從文件中恢復

如果只是單單存文件,那這文件也沒什么用,所以文件另一個重要用途就是幫助 ZK 恢復服務端的信息。

在 ZK 啟動的時候就會嘗試讀取 dataDir 和 dataLogDir 這兩個目錄下的文件,假設在這兩個路徑下的文件是:

  1. /tmp 
  2. └── zookeeper 
  3.     ├── snapshot 
  4.       └── version-2 
  5.         └── snapshot.5 
  6.         └── snapshot.37 
  7.         └── snapshot.100 
  8.     └── log 
  9.       └── version-2 
  10.         └── log.0 
  11.         └── log.6 
  12.         └── log.38 
  13.         └── log.90 
  14.         └── log.108 

我這里例子中的文件名的后綴數字是我隨便舉例只是為了說明恢復的過程,實際未必是這樣,切記。

現在 ZK 服務端啟動后,會先從 snapshot 的目錄中找到 zxid 最大的那個文件,然后根據它的內容恢復小紅本

恢復完后就會去 log 文件目錄下尋找所有比 100 要大的 log 文件以及比 100 要略小一點的 log 文件,本例子中就是 log.90 和 log.108 這兩個文件。

你可能會問為什么要找小于 100 的 log.90 這個文件呢?因為文件名中的 90 只是說明這個文件建立的時候,最大的 zxid 是 90,但是文件中記錄的寫請求是很有可能會大于 100 的,所以 log.90 也需要被找到。

然后就是從 log.90 這個文件開始恢復,先從 zxid 比 100 大的寫請求開始讀取并執行該寫請求,然后繼續讀取 log.108,等待所有符合條件的 log 文件讀取后,整個 ZK 的數據就恢復完成了。

四、總結

今天我們介紹了關于 ZK 持久化的知識:

ZK 會持久化到磁盤的文件有兩種:log 和 snapshot

log 負責記錄每一個寫請求

snapshot 負責對當前整個內存數據進行快照

恢復數據的時候,會先讀取最新的 snapshot 文件

然后在根據 snapshot 最大的 zxid 去搜索符合條件的 log 文件,再通過逐條讀取寫請求來恢復剩余的數據

今天的內容還是比較簡單的,為我們下一篇文章打好了基礎~下一篇我們開始介紹之前選舉中沒有介紹的內容:選舉完成后,Follower 和 Observer 是如何同 Leader 同步數據的?

 

責任編輯:武曉燕 來源: HelloGitHub
相關推薦

2011-08-17 15:19:38

iPhone應用數據

2019-05-15 09:44:33

數據Redis持久化

2019-05-15 09:04:47

Redis數據存儲數據

2024-09-29 09:25:53

2023-12-14 07:30:04

PicklePython模塊

2011-08-25 14:26:40

LUA數據文件

2023-08-17 16:17:00

Docker前端

2019-05-17 08:55:49

RedisRDBAOF

2024-04-03 15:40:14

WebSocketWeb應用Spring

2024-04-25 16:17:53

SentinelNacos數據源

2011-07-07 15:45:45

iPhone SQLite 數據

2013-09-12 14:56:02

iOS持久化

2024-09-06 17:49:46

2018-12-14 09:48:23

Redis數據故障

2017-09-21 08:16:33

數據存儲環境

2022-08-30 10:15:27

Kubernetes數據持久化管理

2011-06-07 17:16:47

iPhone 數據

2020-01-06 14:54:31

RDBAOFRedis

2024-03-26 00:03:08

Redis數據RDB

2023-11-26 09:06:46

點贊
收藏

51CTO技術棧公眾號

日韩av一二三四| 福利视频久久| 日韩一区二区三区四区视频| 亚洲免费看片| 亚洲自拍另类综合| 欧美第一黄网| 国产免费福利视频| 亚洲欧美清纯在线制服| 最新国产成人av网站网址麻豆| 激情久久综合网| 综合另类专区| 国产理论片在线观看| 97久久人人超碰caoprom欧美 | 日韩av网站在线| 国产真实乱对白精彩久久| av女在线播放| 日韩福利视频导航| 欧美老少做受xxxx高潮| 最近中文字幕在线mv视频在线| 99国内精品久久久久| 欧美日韩在线第一页| 91制片厂免费观看| 九一在线视频| www.日韩在线| 成人看片人aa| 中文av免费观看| 亚洲黄色视屏| 欧美日本黄视频| 久久一级免费视频| 亚洲人成伊人成综合图片| 日韩欧美在线观看一区二区三区| www国产黄色| 波多野结衣在线高清| 日韩一区在线看| 日韩国产美国| 久久久久久青草| 成人激情午夜影院| 亚洲一区二区自拍| 在线观看亚洲国产| 日韩在线a电影| 人人爽久久涩噜噜噜网站| 久久久久久久久久综合| 国产少妇在线观看| 不卡av在线网站| 中国女人做爰视频| av在线资源网| 国产日韩欧美精品综合| 久久精品一二三区| 免费在线一区二区| 欧美日韩国产123| 男人的天堂日韩| 超级碰碰久久| 高跟丝袜一区二区三区| 国产中文字幕二区| 九九精品调教| 亚洲福中文字幕伊人影院| 国产乱人伦偷精品视频免下载| 亚洲视频分类| 午夜久久久影院| 日韩专区第三页| 日本乱理伦在线| 一区二区三区蜜桃| 免费人成在线观看视频播放| 欧美日韩a v| 美女的奶胸大爽爽大片| 韩国一区二区三区视频| 欧美一区二区三区四区高清| 日本黄色www| 综合成人在线| 亚洲国产高清自拍| 3d动漫精品啪啪一区二区下载| 久久av综合| 色妞久久福利网| 欧美成人精品欧美一级私黄| 伊人久久综合| 日本成人激情视频| 91福利免费视频| 国产精品一区一区三区| 国产一区不卡在线观看| 欧美黄色小说| ...xxx性欧美| 欧美大胆一级视频| 成人日韩av在线| www.日韩在线观看| 久久综合狠狠综合久久激情| 日本精品一区二区三区视频| 免费av在线网址| 性欧美疯狂xxxxbbbb| 999香蕉视频| 成人97精品毛片免费看| 精品久久久久久久久久久久包黑料 | 五月婷婷激情综合| 色国产在线视频| 51精品国产| 国产亚洲一区二区精品| 午夜少妇久久久久久久久| 国产精品久久久久久久久久妞妞| 国产精品永久在线| 天堂av资源网| 成人免费一区二区三区视频| 久色视频在线播放| 色综合视频一区二区三区44| 亚洲国内高清视频| 中文字幕乱码av| 中文精品在线| 亚洲影院污污.| 男同在线观看| 亚洲国产精品一区二区久久恐怖片 | 久久精品女人天堂av免费观看| 91麻豆精品国产91久久久使用方法| 超碰男人的天堂| 在线精品视频在线观看高清| 国产成人亚洲综合91| 国产亚洲情侣一区二区无| 精品国产精品网麻豆系列| 一区二区三区在线观看免费| 国产免费永久在线观看| 色一情一乱一伦| 男人天堂av电影| 高潮一区二区三区| 综合久久国产| 成年人的黄色片| 欧美美女在线直播| 中文字幕最新精品| 9i精品福利一区二区三区| 成人中文字幕在线| 男人天堂成人网| 日韩黄色三级| 在线色欧美三级视频| 中文字幕亚洲精品一区| 成人免费观看男女羞羞视频| 91精品一区二区三区四区| 久久91超碰青草在哪里看| 亚洲欧洲在线看| 一级片视频在线观看| 成人av免费在线播放| 2022中文字幕| 深夜福利一区| 久久综合久中文字幕青草| 91国产精品一区| 1024成人网| 一级黄色片国产| 91综合久久一区二区| 国产精品欧美日韩久久| 国产精品久久久久一区二区国产| 欧美网站在线观看| 成人无码www在线看免费| 国产一级久久| 欧美激情第六页| 欧美黑人疯狂性受xxxxx野外| 亚洲乱码国产乱码精品精天堂| 欧美一级特黄视频| 久久―日本道色综合久久| 日韩手机在线观看视频| 欧美少妇性xxxx| 国产精品小说在线| 成人精品一区二区三区校园激情 | 一区二区视频在线免费| 97精品国产99久久久久久免费| 一本色道久久综合狠狠躁篇怎么玩 | 99香蕉国产精品偷在线观看| 久久久久久久有限公司| 欧美性xxx| 中文字幕精品在线| 国产精品无码一区二区桃花视频 | 国产剧情一区二区在线观看| 欧美成人激情视频| 欧美一级特黄aaaaaa| 天天色综合天天| 精品一区二区三区蜜桃在线| 精品午夜一区二区三区在线观看| a级片一区二区| 精品三级av在线导航| 国产91精品网站| 在线观看麻豆| 日韩精品一区二区三区视频播放| 日韩毛片在线播放| 国产日产欧美一区二区三区 | 国产女主播喷水视频在线观看| 国产精品免费aⅴ片在线观看| 中文字幕线观看| 欧美日韩免费观看一区=区三区| 久久99精品国产一区二区三区| 亚洲a∨精品一区二区三区导航| 久久人人爽人人爽爽久久| 国产精品女人久久久| 亚洲夂夂婷婷色拍ww47| 99久久久无码国产精品性| 国产在线不卡一卡二卡三卡四卡| www精品久久| 日韩在线精品| 国产视频在线观看一区| 国产精品伦一区二区| 97精品国产91久久久久久| www.av在线播放| 亚洲精品国产拍免费91在线| 国产乱叫456在线| 一本在线高清不卡dvd| 欧美丰满熟妇bbbbbb| 久久综合九色综合97婷婷女人| 日韩欧美理论片| 日韩国产在线观看一区| 亚洲 自拍 另类小说综合图区| 久久成人综合| 久久免费视频1| 日韩三级网址| 国产精品视频自拍| 密臀av在线播放| 欧美激情视频一区| 淫片在线观看| 亚洲亚裔videos黑人hd| 黄频在线免费观看| 欧美一区欧美二区| 中文字幕乱码在线观看| 日韩欧美中文第一页| 国产亚洲精品码| 亚洲视频图片小说| 一级二级黄色片| 久久先锋资源网| 黄色在线免费播放| 国产suv精品一区二区6| 国产高清av片| 久草这里只有精品视频| 在线黄色免费观看| 日本欧美一区二区在线观看| 国产男女在线观看| 亚洲精品综合| 免费在线观看视频a| 国内精品福利| 国产 国语对白 露脸| 91精品国产乱码久久久久久| 亚洲人成影视在线观看| 精品一级毛片| 日韩福利一区二区三区| sdde在线播放一区二区| 天堂资源在线亚洲视频| 精品国产中文字幕第一页| 日本一区免费看| 免费视频国产一区| 日本在线免费观看一区| 欧美精品一区二区三区中文字幕| 欧美一进一出视频| 视频精品在线观看| 日韩亚洲一区在线播放| 成人精品影院| 中文字幕av导航| 在线中文一区| 国产美女永久无遮挡| 亚洲国内精品| 爱福利视频一区二区| 噜噜噜久久亚洲精品国产品小说| 欧美牲交a欧美牲交aⅴ免费下载| 久久久久在线| 午夜精品爽啪视频| 国产永久免费网站| 国产真实乱子伦精品视频| 人妻精品久久久久中文字幕69| 国产成人丝袜美腿| 人妻换人妻a片爽麻豆| 91丨九色丨蝌蚪富婆spa| 51调教丨国产调教视频| 国产丝袜美腿一区二区三区| 天天舔天天操天天干| 亚洲欧洲韩国日本视频| 中文字幕在线有码| 亚洲国产精品久久不卡毛片 | 欧美日本国产| 欧美在线一区视频| 久久这里有精品15一区二区三区| 久久久久国产一区| 国产剧情av麻豆香蕉精品| 午夜不卡久久精品无码免费| 久久久噜噜噜久噜久久综合| 殴美一级黄色片| 一区二区高清免费观看影视大全| 日韩精品在线免费视频| 欧美日韩精品欧美日韩精品一 | 天堂av一区| 久久五月天婷婷| 国产精品福利在线观看播放| 日本福利视频在线观看| 乱码第一页成人| 欧美国产日韩在线视频| 91丨九色丨蝌蚪富婆spa| 日本午夜在线观看| 天天综合天天做天天综合| 亚洲综合视频在线播放| 精品国产123| 丝袜美腿美女被狂躁在线观看| 欧美激情视频一区| 玖玖精品在线| 国产精品久久一区二区三区| 亚洲小说图片视频| 免费看日b视频| 蜜桃视频在线观看一区| 精品视频站长推荐| 国产精品传媒视频| 中文字幕在线观看视频网站| 91精品国产综合久久久蜜臀粉嫩| 日韩欧美在线番号| 久久国产精品首页| 久久久成人av毛片免费观看| 国产亚洲情侣一区二区无| 91偷拍一区二区三区精品| 国产性xxxx18免费观看视频| 国产91精品一区二区麻豆亚洲| 国产极品视频在线观看| 欧美日韩一区二区精品| www.成人精品| 久久精品国产一区二区三区| 二区三区不卡| 韩国精品一区二区三区六区色诱| 黄色免费在线播放| 亚洲一区二区五区| 中文av免费观看| 亚洲裸体xxxx| 日韩精品av| 国产伦视频一区二区三区| 久久久久久免费视频| 午夜两性免费视频| 久久青草国产手机看片福利盒子| 久久高清免费视频| 日韩亚洲欧美一区| 国产原厂视频在线观看| 国产美女久久久| 日本不卡二三区| 欧美一级黄色影院| 国产亚洲欧美日韩在线一区| 国产无码精品在线播放| 精品va天堂亚洲国产| 污污片在线免费视频| 亚洲aⅴ男人的天堂在线观看| 色喇叭免费久久综合网| 亚洲不卡视频在线| 国产欧美一区二区在线观看| 五月婷婷激情五月| 国产亚洲欧美日韩精品| 欧美日韩免费观看视频| 日韩精品久久久毛片一区二区| 亚洲免费在线| 18禁裸乳无遮挡啪啪无码免费| 精品日本美女福利在线观看| 香蕉av在线播放| 青草热久免费精品视频| 免费视频国产一区| 天堂中文视频在线| 国产精品女同互慰在线看| 亚洲一区二区激情| 久久精品一本久久99精品| 麻豆国产精品| 国产精品www在线观看| 波多野洁衣一区| 精品人妻无码一区二区性色| 亚洲天堂成人在线视频| 欧美伊人亚洲伊人色综合动图| 波多野结衣激情| 国产成人高清在线| 影音先锋亚洲天堂| 一本大道亚洲视频| 精品一区二区三区在线观看视频 | av免费在线网站| 国产成人亚洲欧美| 亚洲综合好骚| 岛国片在线免费观看| 日韩欧美你懂的| 天堂av在线| 一区二区日本伦理| 国产91丝袜在线播放九色| 亚洲 欧美 成人| 综合国产在线观看| 伊人久久影院| 成人免费毛片播放| 亚洲欧美日韩国产综合| 天天干天天摸天天操| 国产精品免费小视频| 综合激情一区| 亚洲av无码国产精品久久| 欧美久久一二三四区| 大黄网站在线观看| 亚洲国产一区二区三区在线| 国产精品一区二区你懂的| 久久久久久久久影院| 中文字幕欧美精品日韩中文字幕| 欧美一区一区| 国产一区亚洲二区三区| 亚洲男人的天堂在线aⅴ视频| 五月天激情开心网| 国产一区视频在线| 99亚洲一区二区| 国产性生活大片| 日韩成人xxxx| 国产aⅴ精品一区二区四区| 国产亚洲精品网站| 一区二区三区精品| 成年人免费在线视频| 国产精品久久久久久久久久久久冷 | 中文字幕一区日韩精品欧美| 西西人体44www大胆无码| 亚洲va男人天堂| 水蜜桃久久夜色精品一区的特点|