Write Ahead Log(WAL)的工作原理

2021-09-24 05:18:36 字數 1131 閱讀 2934

在儲存系統的執行過程中,每時每刻都發生著資料的更新,背後意味著諸如建立,刪除,修改檔案等資料的操作。拋開物理檔案資料的改變,對於中心控制節點而言,這些都會涉及到元資料的更新操作。而為了保持系統元資料和物理資料間的狀態一致性,系統所有的資料操作對應的元資料變更都需要持久化到元資料db內,但其實這裡有乙個效能問題,我們的每次變更如果都要實時同步到外部db內,是否意味著高頻的io操作?是否有延時寫入的手段呢?本文將要闡述的預寫式日誌write ahead log(wal),正是對此的優化。

上面只介紹了wal的概述內容,本小節我們來深入了解wal的內部執行細節。

首先我們要搞清楚一點的是,wal不記錄元資料的本身,而是變更的record。那麼何為」變更的record「?乙個刪除操作記錄,乙個新增記錄,至於每個記錄會包含有什麼資訊呢,大家可以參考audit log的內容屬性。不過wal的log格式和audit log還是有所區別的。

追本溯源,對於wal來說,它是被誰寫入的呢?答案是wal buffer,當這個buffer滿了的時候或者人工觸發flush動作時,它就會將transaction資料寫出到wal的log內。當然,系統在每次完成乙個操作時,同時會將改動應用到memory和wal buffer內,然後自己再控制buffer flush出去的邏輯。

上述wal細節過程如下圖:

hdfs作為乙個成熟的分布式系統,在其內部也有wal模型的應用。這裡的wal則是editlog,而對應的stable db則是standby nn的fsimage。hdfs的editlog用了雙緩衝模式來加大transaction的throughput。整個過程的資料流操作是從active nn到editlog到standby nn。當standby nn準實時的讀取完editlog的資訊後,定期checkpoint出新的fsimage檔案後,再sync到active nn上。按照時間順序和commit tx id,老的editlog會被purge掉。hdfs的wal模型如下圖所示(步驟如線條中數字顯示):

以上就是本文主要闡述的關於wal的內容了。

[1].

uWSGI django nginx的工作原理流程

wsgi 一種實現python解析的通用介面標準 協議,是一種通用的介面標準或者介面協議,實現了python web程式與伺服器之間互動的通用性。利用它,web.py或bottle或者django等等的python web開發框架,就可以輕鬆地部署在不同的web server上了 uwsgi 同ws...

Read Write spinlock工作原理

1 假設臨界區內沒有任何的thread,這時候任何read thread或者write thread可以進入,但是只能是其一。2 假設臨界區內有乙個read thread,這時候新來的read thread可以任意進入,但是write thread不可以進入 3 假設臨界區內有乙個write thr...

SpringCloud Eureka工作原理

eureka 作為 spring cloud 體系中最核心 預設的註冊中心元件,研究它的執行機制,有助於我們在工作中更好地使用它。eureka 註冊中心 包含兩個元件 eureka server和eureka client。服務提供者和服務的消費者。eureka負責管理 記錄服務提供者的資訊。服務呼...