ZooKeeper原始碼解析(5)-Snapshot檔案的格式
在ZooKeeper的Snapshot檔案中,儲存了當時ZooKeeper的狀態和資料.
那麼ZooKeeper中到底儲存了什麼內容呢?官方文件中沒有明確說明,所以我們只好通過讀原始碼來獲取.
我是在讀完相關的部分的原始碼之後,總結出來的這樣一個結構.我是通過原始碼中相關類的serialize()方法和deserialize()方法來總結的.
下面我們將會詳細解釋其中每一部分的作用.
File Header
其實每種檔案的十六進位制的表示中,開頭的部分都是Header,ZooKeeper的Snapshot的Header的結構如下:
我們可以看到,在每個格子中,上面都是一個名稱,下面是這個欄位所佔用的位元組數.後面的圖片中,我們都將採用這種方式來表示欄位.
其中第一部分很好理解,就是一個固定的字串-"ZKSN",只有當Snapshot的magic欄位是這個字串以及以特定的方式結尾,那麼這個Snapshot才是有效的.
第二個欄位是version,它代表的是版本號.
第三個欄位是dbid.那麼什麼是db呢?在ZooKeeper中,抽象出來一種資料型別-"ZkDatabase",它在記憶體中維護著ZooKeeper Server的各種狀態,比如sessions,datatree以及committed logs.sessions是ZooKeeper Server和Client中維護的一個連線,datatree是ZNode的形成的一棵樹,這個很容易理解嘛.committed logs指的是已經提交的日誌,這個是Zab中的一個概念.
Other server's information
count欄位指的是更有多個ZooKeeper Server.
接下來是count個server information了,每個server information都包括id和timeout兩部分.
id是ZooKeeper Server的id,ZooKeeper在Cluster模式下啟動時,我們需要在datadir下面建立一個名為myid的檔案,其中的數字就是ZooKeeper Server的id.
timeout是這臺ZooKeeper Server和id為id的那臺ZooKeeper Server之間的超時的時間,當超過了這個時間,就認為那臺ZooKeeper Server不可用了.
ACL Caches
第一個欄位是map,其實ACL Caches的結構就是一個Map<Long, List<ACL>>.這個Map中,key是一個分組的id,value是ACL列表.map欄位表示的是Map的大小.
後面的就很容易解釋了,long表示的是分組的id,acls表示的是這個分組內更有多少個ACL.perms是表示的許可權,在ZooKeeper中,提供了下面的幾種許可權:
scheme前的len表示的是scheme的長度,因為scheme是String型別的,我們需要用它來指明它的長度.id前面的len同樣也是表明id的長度表明的是id的長度,同樣也是因為id是String型別的.
ZooKeeper都支援下面幾種Scheme:
Nodes
Node指的是ZooKeeper中的ZNode.每個Znode都由幾部分組成:路徑,資料,後設資料.每個欄位的含義在ZooKeeper文件中有,這裡我直接貼出來:
根目錄"/"有特殊的形式,它只儲存"1/",表示其長度為1,路徑是"/",在ZooKeeper的Snapshot中,就是用header中的magic以及這個根目錄來判斷檔案是否是Snapshot的.
相關文章
- 原始碼解析Flask的配置檔案原始碼Flask
- Lucene原始碼解析--Lock檔案原始碼
- BVH檔案格式解析
- Qt的.pro檔案格式解析QT
- snapshot原始碼原始碼
- mysql程式碼閱讀-frm檔案格式解析MySql
- java class 檔案格式解析Java
- .Net Core中的配置檔案原始碼解析原始碼
- MP4檔案格式解析
- Java解析ELF檔案:ELF檔案格式規範Java
- 文字檔案的編碼格式
- mybatis原始碼配置檔案解析之五:解析mappers標籤(解析XML對映檔案)MyBatis原始碼APPXML
- Lucene原始碼解析--刪除文件檔案(.del)原始碼
- SpringBoot原始碼解析-配置檔案的載入Spring Boot原始碼
- PE檔案格式詳細解析(一)
- Lucene原始碼解析--Compound File 組合檔案原始碼
- 如何修改檔案的編碼格式
- Zookeeper原始碼分析原始碼
- PE檔案格式詳細解析(二)--IAT
- ZooKeeper系列(4):ZooKeeper的配置檔案詳解
- Zookeeper原始碼分析(二) —– zookeeper日誌原始碼
- Zookeeper原始碼分析(二) ----- zookeeper日誌原始碼
- Laravel Config—— 配置檔案的載入與原始碼解析Laravel原始碼
- ZooKeeper原始碼解讀原始碼
- 如何將Excel檔案解析為json格式ExcelJSON
- Java二進位制Class檔案格式解析Java
- Framework 原始碼解析知識梳理(5) startService 原始碼分析Framework原始碼
- Android 開源專案原始碼解析 -->PhotoView 原始碼解析(七)Android原始碼View
- mybatis原始碼配置檔案解析之五:解析mappers標籤流程圖MyBatis原始碼APP流程圖
- 學習Hibernate原始碼三_Hibernate中的配置檔案解析原始碼
- Netty原始碼解析5-ChannelHandlerNetty原始碼
- zookeeper 清理snapshot及事務日誌
- Android 開源專案原始碼解析 -->Volley 原始碼解析(十五)Android原始碼
- Android 開源專案原始碼解析 -->Dagger 原始碼解析(十三)Android原始碼
- 【Spring原始碼分析】.properties檔案讀取及佔位符${...}替換原始碼解析Spring原始碼
- zookeeper原始碼 — 四、session建立原始碼Session
- 【Zookeeper】原始碼分析目錄原始碼
- Android 開源專案原始碼解析 -->CircularFloatingActionMenu 原始碼解析(八)Android原始碼