《從Paxos到ZooKeeper》技術內幕之數據存儲

2020-12-05 老孟IT讀書筆記

1. 內存數據

DataTree

「樹」的數據結構,代表內存中的一份完整數據。(無耦合,非常獨立的組件)

nodes = ConcurrentHashMap<String, DataNode>存放All節點,所有對ZK的操作,就是對這個Map的操作KEY = pathVALUE = DataNodeephemerals = ConcurrentHashMap<Long, HashSet<String>>()臨時節點,單獨存儲DataNode

data[]ACL列表Stat節點狀態parent節點children節點ZKDatabase

zk的內存資料庫

管理zk的sessionDataTree存儲(定時dump快照--->磁碟)事務日誌啟動時,事務日誌+dump快照 = 恢復內存資料庫2. 事務日誌

日誌文件存儲

配置項:

dataDir 默認存儲dataLogDir 單獨存儲路徑帶版本號 ./事務日誌目錄/version-2/...事務日誌文件特點

文件名: log.xxxxxxxxxx文件大小一致:64M文件擴展名非常規律,16進位數字,越修改越大(擴展名其實就:ZXID,且是該日誌文件的第一條事務記錄的ZXID)日誌文件格式

格式化日誌文件工具 org.apache.zookeeper.Server.LogFormatterjava LogFormatter log.xxxxxxx

文件頭,主要是事務日誌產的DBID及版本號Zookeeper Transactional Log File with dbid 0 txnlog format version 2事務日誌..11:07:41 session 0x123124124142 cxid 0x0 zxid 0x1234567890 createSession 30000......(具體可參見:org.apache.zookeeper.Server.LogFormatter源碼)日誌文件寫入

FileTxnLog負責維護事務日誌對外的接口public synchronized boolean append(TxnHeader hdr, Record txn)

寫入的6個步驟:

1. 事務日誌文件,是否可寫FileTxnLog是否與一個可寫的日誌文件「關聯」 ,有就用,沒有則創建 (不關聯的原因:日誌文件滿了,或zk啟動後需要進行第一次的日誌寫入)

2. 日誌文件 「預分配」 及 「擴容」

目的:提高I/O效率,不忙的時候先創建好文件,填充0擴容:小於4KB時,再填充64M的0配置:zookeeper.preAllocSize可設置默認大小64M3. 事務序列化

TxnHeader 事務頭序列化Record 事務體序列化CreateSessionTxnCreateTxnDeleteTxnSetDataTxn4. 生成Checksum通過第3步的序列化二進位結果,計算Checksum,默認使用 Adler32算法

5. 寫入事務日誌FileStream使用BufferedOutputStream,還並沒有真正寫入磁碟

6. 事務日誌刷入磁碟第1步有streamToFlush流,從它取出FileStream,並調用FileChannel.force() 強制刷入磁碟

日誌截斷

peerLastZxid 非Leader上記錄的事務ID任務 peerLastZxid 不能比 Leader上的最後事務ID大TRUNC命令,強制非leader進行日誌截斷3. snapshot數據快照

快照:某一時刻,全量內存數據內容,並將其寫入磁碟文件名:snapshot.xxxxxxxxxx(本次快照的伺服器最新ZXID,很重要,恢復時用) 格式化工具: org.apache.zookeeper.server.SnapshotFormatter使用: java SnapshotFormatter snapshot.xxxxxx

數據快照操作

FileSnap來維護,維護過程如下:

「判斷」 是否需要進行快照每次FileTxnLog後,需判斷是否需要snap,有個snapCount,並採取「過半隨機」策略 logCount > (snapCount / 2 + randRoll)logCount = 已記錄的TxnLog數量 randRoll = 1 ~ snapCount/2 之間的隨機數 意思是:當snapCount設置為10w,那麼zk會在 5w~10w之間,進行一次快照(過半隨機是也)「切換」 事務日誌文件創建快照 「異步線程」「獲取」 全量數據 + Session信息「生成文件名」 (快照數據的文件名)數據 「序列化」4. 初始化

初始化 FileTxnSnapLog初始化 FileTxnLog初始化 FileSnap初始化 ZKDatabase創建 PlayBackListener 監聽器事務應用過程的回調,用於數據的訂正處理快照文件獲取最新100個snap文件解析snap文件逐個解析,從最新的開始,當遇到能用的,就不再解析了獲取最新的ZXID處理事務日誌獲取所有 zxid_for_snap之後提交的事務事務應用獲取最新zxid檢驗epoch5. 數據同步

Leader選舉後,非Leader向 Leader伺服器進行 「註冊」,完成註冊即開始同步操作

獲取Learner狀態Learner發送ACKEPOCH數據包,Leader解析出:currentEpochlastZxid數據同步初始化同步前,先初始化,從ZKDatabase中提取出「事務請求」對應的「提議緩存隊列」,完成三個ZXID值的初始化peerLastZxid:該Learner最後處理的zxidminCommittedLog:Leader「提議緩存隊列」的最小zxidmaxCommittedLog:~最大zxid同步方式DIFF(直接差異化同步)場景:場景:minCommittedLog < peerLastZxid < maxCommittedLog 就是把Leader有的,Learner沒有的,發給Learner(Proposal包 + commit包)TRUNC + DIFF(先回滾,再差異化同步)場景:Leader寫入TxnLog,但沒有發送就掛掉,等恢復後,開始同步時出現 領導說了,以我的為準,把你有的,我沒有的先咔嚓掉,再走DIFF方式處理TRUNC(僅回滾同步)場景:peerLastZxid > maxCommittedLogSNAP(全量同步) 場景1:peerLastZxid < minCommittedLog 場景2:Leader上沒有「提議緩存隊列」,peerLastZxid != lastProcessedZxid(Leader數據恢復後得到的最大zxid)

相關焦點

  • ZooKeeper基本原理你懂了麼?
    最終一致性:client不論連接到哪個Server,展示給它都是同一個視圖,這是zookeeper最重要的性能。2. 可靠性:具有簡單、健壯、良好的性能,如果消息m被到一臺伺服器接受,那麼它將被所有的伺服器接受。3. 實時性:Zookeeper保證客戶端將在一個時間間隔範圍內獲得伺服器的更新信息,或者伺服器失效的信息。
  • 聊聊分布式系統的數據一致性
    進入公司以來,先後參與了分布式資料庫、分布式文件系統、NOS對象存儲雲服務等多個大型存儲系統的開發工作。保證各個數據副本間的一致性,是評價存儲系統優劣的核心指標,也是貫穿整個開發過程中的討論重點。要解決這個問題,其實也不用多費腦筋了,業界已經有了共識:paxos算法。基於這個算法能夠保證任何情況下都能副本間一致,而且經過優化後可保證大部分情況下只要一輪通信就能達成一致,性能也能接受。一切都完美,對於一個一致性算法真不能要求他更多了。Paxos有個小問題是不能保證消息全序,不過這個事情並不難搞。我們新版本分布式文件系統用的算法PacificA、zookeeper用的ZAB,都解決了這個事情。
  • 威騰電子「分區存儲「技術席捲2019中國數據與存儲峰會
    未來幾年,我們將邁入一個新的數據時代,其中處理數據是一個非常關鍵的因素,涉及到ZB級數據存儲和處理,會有三個重要的趨勢:一個是在多雲、雲應用之間,保持數據的流動;第二個趨勢是根據數據的熱度,或者說數據生命周期,採用不同的存儲介質進行數據分層和保護;第三就是藉助人工智慧技術,智能化管理數據。總之海量數據存儲和處理已經成為用戶面臨的主要挑戰。
  • Zookeeper和Eureka有哪些區別?
    即Client端寫入一個數據後,Server端將數據同步到整個系統,從而保證系統的數據都相同但是分布式系統之間網絡異常是客觀存在的,如果避免了P,只能把分布式系統退回到單實例系統。CP在網絡分區發生時,兩個分布式節點之間無法進行通信,我們對一個節點進行的修改操作將無法同步到另外一個節點,所以數據的「一致性」將無法滿足,因為兩個分布式節點的數據不再保持一致。除非我們犧牲「可用性」,也就是暫停分布式節點服務,在網絡分區發生時,不再提供修改數據的功能,直到網絡狀況完全恢復正常再繼續對外提供服務「當選擇CP時,相當於放棄系統的可用性,換取一致性」。
  • Zookeeper什麼,它可以做什麼?看了這篇就懂了
    4.Znode 中的數據可以有多個版本,比如某一個路徑下存有多個數據版本,那麼查詢這個路徑下的數據就需要帶上版本。5.客戶端應用可以在節點上設置監視器。6.節點不支持部分讀寫,而是一次性完整讀寫。ZooKeeper 的節點特性ZooKeeper 節點是生命周期的,這取決於節點的類型。
  • 【大數據】最新大數據學習路線(完整詳細版】
    大數據學習路線java(Java se,javaweb)Linux(shell,高並發架構,lucene,solr)Hadoop(Hadoop,HDFS,Mapreduce,yarn,hive,hbase,sqoop,zookeeper,flume)機器學習(R,mahout)Storm(Storm,kafka
  • 數據同享到數據感知,軟體界說的存儲是雲數據中心的中心
    多重檢查技術提高了數據安全性,整體可靠性達到6x 9,固態存儲正在被商場接受。孫剛表明,2016年將是wave固態存儲大規模推廣的第一年,未來固態存儲將獲得更多成果。在軟體界說的存儲方面,跟著數據的爆炸式增加,企業對數據效能和數據認識提出了更多要求,支撐業務的IT數據中心將升級到軟體界說的。
  • 多活元數據技術,讓浪潮軟體定義存儲管理EB級數據
    智能時代產生海量非結構化數據 信息技術的飛速發展,特別是移動網際網路應用、數據智能挖掘技術的快速發展,使眾多相關行業面臨業務數據量指數級增長的趨勢。例如:智慧型手機的普及,使移動手機用戶可以隨心所欲拍攝高清照片、視頻以記錄自己生活的點滴,並可以方便地把影音資料存儲在雲端,這類新的生活習慣必然產生大量數據。
  • 新型數據存儲技術:耗電量將大幅降低
    導讀據日本東北大學官網近日報導,該校與法國洛林大學的研究人員報告了一項創新技術,它將導致數據存儲的耗電量大幅降低。背景如今,全世界每年產生的數字數據以澤字節(2^70位元組)來計算,相當於每秒鐘為數億冊圖書提供數據。產生的數據量還在持續增長。如果現有的技術停止發展,那麼到2040年,目前全球全部的耗電量都將用於數據存儲。
  • 中科院細胞所存儲進化史:從數據抽屜發展到10PB數據平臺
    一花一世界「目前,研究所數據中心的容量已經達到10PB,而且幾乎全部採用浪潮的設備。」徐姚晨將話跳至10餘年後。而從GB到PB不僅是兩個數量級的差異,這更代表了IT技術與生命科學的深度融合。為什麼人類基因會如此之多?等一系列問題。 所謂一花一世界,大致就可描述科學家對細胞的研究。因為顯微成像、基因組學、蛋白質組學檢測,均會產生海量數據,而中科院生化與細胞所正是基於對上述課題的研究,決定進行數據存儲設備採購,以數位化技術提升為細胞研究提速。 數據存儲也必須分層問題也是由此而來。
  • 中科院細胞所存儲進化史:從數據抽屜發展到10PB數據平臺
    而從GB到PB不僅是兩個數量級的差異,這更代表了IT技術與生命科學的深度融合。 其實,2010年是一個重要時間節點,生物科學的試驗手段和試驗設備,在此後均出現大規模更新換代。當然,此時需要採集的研究數據也呈現爆發式增長。而這背後,更隱含著對存儲空間、I/O性能、高並發性能的更高訴求,以及設備管理、子系統管理、數據管理等諸多問題。 這又是一個相對專業的話題。
  • 從邊緣到數據中心到雲,HCP對象存儲八大利器
    掘金數字新基建,對象存儲迎來全新發展期  數據不僅成為企業的新石油,更是價值的新來源,當數據成為企業數位化進程中的「主角」時,如何尋求更好的配角來展現出數據更多的魅力。  來自多個分析機構的數據綜合說明,非結構化數據隨著雲計算、大數據、物聯網等新興技術的蓬勃發展呈現出井噴式的增長。
  • CRISPR技術成功將數據存儲在活細胞DNA中
    科技日報記者 馮衛東據最新一期《自然·化學生物學》雜誌報導,美國研究人員通過CRISPR技術,將數字電子信號直接轉換為存儲在活細胞基因組中的遺傳數據,這或是邁向開發用於長期數據存儲的新介質的關鍵一步。美國哥倫比亞大學研究團隊使用CRISPR基因編輯技術,將編碼二進位數據(計算機用來存儲數據的1和0)的特定DNA序列插入細菌細胞。通過將這些DNA序列的不同排列分配給不同英文字母,研究人員將文本消息「hello world!」成功編碼進了大腸桿菌細胞內的DNA中。研究團隊隨後通過提取和測序細菌DNA解碼了該消息。
  • 天賦異稟,高存儲密度成為海量數據存儲首選
    更神奇的是,作為最古老的存儲技術之一,IBM 磁帶存儲在時光的長河中歷久彌新,保持對社會需求變化的敏感度,擁抱新的時代,持續進化與演變,煥發新的生機,再次迎來屬於自己的高光時刻。 天賦異稟,高存儲密度成為海量數據存儲首選 說到磁帶,有人可能會想起在 VCD 上播放錄像帶看港片的年代,或者用磁帶聽歌時拿鉛筆一圈圈倒帶的場景。
  • 計算存儲分離之「數據存儲高可用性設計」 - 基礎設施_CIO時代網...
    自然地,我們把目光聚焦到了分布式存儲系統上。  從目前行業發展趨勢來看,各大網際網路公司都設計或者維護了自己的分布式存儲系統。如Google的GFS(Colossus 為GFS第二代分布式存儲系統),Facebook和LinkedIn的HDFS等。由此可見,分布式存儲也是大勢所趨。
  • 非關鍵業務數據管理的技術關鍵點:存儲、共享、分析、安全
    會議以「新數智·新未來」為主題,特邀中國工程院鄭緯民院士以及中國電子學會、中國計算機學會存儲專委會、SNIA等單位的嘉賓,與領先供應商、典型企業用戶代表,探討新數據時代存儲技術發展趨勢,分享數位化轉型成果,共話智慧未來。
  • 杉巖數據:對象存儲智能化的探路者
    然而,伴隨「股神」巴菲特押注科技股的美國雲數據倉庫公司在紐交所上市,存儲圈一陣叫好因為,業內專業人員注意到,這家雲數據倉庫中,使用的是對象存儲,對象存儲不僅可以存儲大規模的數據,還可通過機器學習算法等應用進行數據處理。對象存儲的廣泛被應用,充分驗證了對象存儲不僅能解決非結構化數據,還能解決OLAP結構化數據的存儲問題。對此,專注於對象存儲的杉巖數據頗受鼓舞。
  • DNA:終極數據存儲方式
    在人類的基因序列中,1克的重量就可以包含幾十億GB的數據,而1毫克分子的信息存儲空間就可以包含美國國會圖書館 全部的書籍,並且還有剩餘。在過去,這些只是理論上的概念。現在,最新的一項研究表明,研究人員可以把一部遺傳學教科書的內容存儲到1微微克 (picogram,相當於萬億分之一克)DNA中,這一技術上的突破很可能會革命性的提升人類存儲信息的能力。
  • 從光譜存儲到光譜套件,軟體定義帶來存儲經濟性
    於是整機就有了流行的價值,IBM的光譜套件與裝機有著異曲同工之妙,都是把零散的東西靈活地組織在一起獲取價值。SVC技術為核心的IBM Spectrum Virtualize,此外原來的數據和存儲管理解決方案調整為IBM Spectrum Control ,數據備份恢復解決方案調整為IBM Spectrum Protect ,近線磁帶文件系統調整為IBM Spectrum Archive ,這其中Spectrum Accelerate是最為搶眼,它可以看做是IBM高端存儲XIV的軟體版本。
  • 雲棲大會驚現技術內幕?趣拍CEO王強宇揭秘創業新模式
    雲棲大會是目前全球最大規模的雲計算大數據行業巡迴峰會,此次阿里雲主辦的雲棲大會集合四大亮點「技術突破無邊界」「萬物連接皆跨界」「DT生態無國界」「雲端價值新世界」,備受矚目。趣拍CEO王強宇應邀出席大會並做了主題演講,為各大創業者帶來福利,揭秘技術內幕。