云計算技術系列叢書 云原生分布式存儲基石: etcd深入解析》—1.4.4日志壓縮與快照

      網友投稿 1020 2022-05-29

      1.4.4日志壓縮與快照

      在實際的系統中,Raft節點上的日志記錄不可能無限制地增加下去。一方面日志記錄會對節點的存儲空間造成壓力,另一方面當Raft節點重啟時需要花費大量的時間進行日志回放(replay),進而影響系統的可用性。

      使用快照進行日志壓縮的方法并不少見,ZooKeeper和Chubby中都有應用。在快照系統中,系統的全部狀態都以快照的形式寫入持久化存儲,然后刪除那個時間點之前的全部日志。下文將詳細介紹Raft的快照原理。

      圖1-21展示了Raft快照的基本原理,一個Raft節點從1號到5號位置的日志條目生成了一個新的快照文件。從圖1-21可以看出,Raft的快照文件具有如下特點。

      每個節點獨立創建,只包含已經被提交的日志條目。

      存儲了節點某一時刻復制狀態機的狀態。

      全量式,非增量式的(即使數據沒有改變)。

      在快照中存儲少量元數據,比如,被快照取代的最后一個日志條目的索引位置和對應的任期號。

      圖1-21 Raft快照原理圖

      Raft快照元數據中會存儲被快照取代的最后一個日志條目的索引位置和對應的任期號,這是為了支持快照后第一個日志條目的AppendEntries RPC一致性檢查(因為這個日志條目需要它前一個日志條目的索引值和任期號)。為了支持集群成員關系列表的更新(將在下文展開討論),快照文件也會將最后一次的配置作為最后一條日志保持。一旦Raft節點成功生成快照文件,就可以刪除最后的索引位置及其之前的所有日志和快照了。

      盡管在通常情況下,Raft節點之間都是獨立創建快照的,但是Leader偶爾也需要向一些過于落后的Follower發送快照。這種情況通常發生在Leader因為做快照刪除了還未發送給Follower的日志條目的情況下。當然,其實與Leader保持同步的Follower通常不需要Leader做這個操作,需要Leader發送的對象往往是一個運行非常緩慢的Follower或者是一個新加入集群的節點。因此,通過網絡傳輸快照文件也是讓Follower盡快同步Leader狀態的一種方式。但是,當快照文件較大時,就不能忽視網絡和磁盤的開銷了。

      Raft算法的InstallSnapshot RPC實現了Leader和Follower之間發送和接收快照文件的過程。當有些快照文件過大時,需要對其進行分塊傳輸。對于每個節點,領導人總是順序執行InstallSnapshot RPC,即順序發送快照分塊。

      InstallSnapshot RPC的參數說明如表1-5所示。

      InstallSnapshot RPC的返回值說明如表1-6所示。

      接收者實現快照的步驟具體如下。

      1)與前文介紹的RPC類似,如果term < currentTerm,則立刻返回currentTerm,即如果節點的當前任期號大于Leader的任期號,則拒絕該快照;否則執行步驟2)。

      2)如果是第一個分塊(offset為0),則新建一個快照。

      《云計算技術系列叢書 云原生分布式存儲基石: etcd深入解析》—1.4.4日志壓縮與快照

      3)在指定偏移量處將分塊數據寫入快照文件,并響應Leader。

      4)如果done是false,則表示快照文件尚未傳輸完成,需要繼續等待更多的數據塊。

      5)當接收到的done是true時,保存該快照文件,丟棄本地的lastIncluded-Index值較小(較舊)的現存快照。

      6)節點將根據快照包含的最后一條日志的索引值和任期號搜索與之匹配的日志項,如果存在,則繼續保留后面該日志項之后的日志,前面的日志項將全部刪除。

      7)應用快照內容重置節點狀態機,并且加載快照文件中的集群配置信息。

      以上便是關于InstallSnapshot RPC的一個簡要概述。快照分塊除了要便于傳輸之外,還可作為每個領導人的心跳包,Leader每次接收到快照分塊都需要重置一次選舉超時定時器。

      1)發送快照會浪費網絡帶寬并且增加了快照處理的時延。每個Follower本地已經擁有了產生快照需要的所有信息,從本地狀態創建快照顯然比通過網絡接收別人發來的要經濟得多。

      2)增加領導人實現的復雜性。例如,領導人需要在發送快照的同時并行地將新的日志條目發送給跟隨者,這樣才不會阻塞新的客戶端請求。

      快照操作會對系統的性能造成一定的影響,集群管理員需要決定創建快照的時機。如果快照操作太頻繁,則會消耗大量的I/O帶寬和CPU資源。如果超過時間不做快照,那么節點存儲空間就有被日志文件耗盡的風險,而且Raft節點一旦重啟就需要回放大量日志,進而影響系統的可用性。我們推薦的解決方法是當日志達到某個固定的大小時做一次快照。

      另外,一次寫入快照文件可能會消耗較長的時間,如果不希望影響正常日志條目的復制,則可以通過使用寫時復制(copy-on-write)的技術來解決。這樣就能在接受寫日志請求的同時而不影響正在被寫入的快照文件。另外,操作系統的寫時復制技術的支持(如Linux上的fork)可以被用來創建完整的狀態機內存快照。

      后面的章節會專門介紹etcd的快照實現細節。

      專屬分布式存儲服務 云計算

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:利用ansible、stress-ng進行壓力測試
      下一篇:【云端大事件】萬物互聯時代的網絡身份,該如何搞定?
      相關文章
      亚洲hairy多毛pics大全| 亚洲色欲久久久久综合网| 亚洲欧洲日韩综合| 亚洲国产精品无码久久一线| 亚洲精品成人a在线观看| 国产精品亚洲专区一区| 亚洲av无码专区在线电影天堂| 亚洲情A成黄在线观看动漫软件 | 亚洲午夜国产精品无卡| 亚洲色偷偷av男人的天堂| 亚洲综合区图片小说区| 亚洲成人网在线观看| 亚洲国产成人手机在线电影bd| 亚洲白嫩在线观看| 亚洲人成免费电影| 亚洲一区二区三区不卡在线播放| 亚洲成aⅴ人在线观看| 亚洲另类古典武侠| 亚洲一区二区三区免费在线观看 | 亚洲中文无码线在线观看| 亚洲一区中文字幕| 亚洲熟妇无码八V在线播放| 亚洲欧美日韩久久精品| 亚洲avav天堂av在线网毛片| 成人亚洲综合天堂| 亚洲精品456播放| 成人午夜亚洲精品无码网站| 亚洲成A人片在线观看WWW| 亚洲国产高清在线| 亚洲字幕在线观看| 亚洲国产精品一区二区三区在线观看| 亚洲色大成网站www永久网站| 亚洲国产aⅴ成人精品无吗| 国产亚洲视频在线| 最新国产AV无码专区亚洲| 久久精品亚洲中文字幕无码网站| 亚洲香蕉免费有线视频| 国产成人精品日本亚洲18图| 亚洲国产欧美国产综合一区| va亚洲va日韩不卡在线观看| 亚洲尤码不卡AV麻豆|