hbase的wal機制是保證hbase使用lsm樹儲存模型把隨機寫轉化成順序寫,並從記憶體read資料,從而提高大規模讀寫效率的關鍵一環。wal的多生產者單消費者的執行緒模型讓wal的寫入變得安全而高效。
在文章《wal在regionserver呼叫過程》中從**層面闡述了乙個client的「寫」操作是如何到達hbase的regionserver,又是如何真正地寫入到wal(fshlog)檔案,再寫入到memstore。但是hbase是支援mvcc機制的儲存系統,本文件將說明regionserver是如何把多個客戶端的「寫」操作安全有序地落地日誌檔案,又如何讓client端優雅地感知到已經真正的落地。
wal為了高效安全有序的寫入,筆者認為最關鍵的兩個機制是wal中使用的執行緒模型和多生產者單消費者模型。
其執行緒模型主要實現實在fshlog中,fshlog是wal介面的實現類,實現了最關鍵的apend()和sync()方法,其模型如圖所示:
下面將從原始碼角度分析其中具體實現過程和細節。
追蹤**可以分析出sync()方法會往ringbuffer中放入乙個syncfuture物件,並阻塞等待完成(喚醒)。
這部分原始碼是說明sync操作的syncfuture會被提交到syncrunner中,這裡可以注意syncfuture例項其實並不是乙個個提交到syncrunner中執行的,而是以syncfutures(陣列,多個syncfuture例項)方式提交的。下面這部分原始碼是注釋中說明批量刷盤的決策。
hbase的wal機制是保證hbase使用lsm樹儲存模型把隨機寫轉化成順序寫,並從記憶體read資料,從而提高大規模讀寫效率的關鍵一環。wal的多生產者單消費者的執行緒模型讓wal的寫入變得安全而高效,本文件從原始碼入手分析了其執行緒模型為以後更好開發和研究hbase其他相關知識奠定基礎。
mysql 執行緒池原始碼 執行緒池原始碼解析
1.前言 我個人覺得理論性的東西可能大家都懂,但是具體的實現細節可能並不是很清楚所以才想記錄一下,加深記憶。2.關鍵原始碼解析 1 ctl private final atomicinteger ctl new atomicinteger ctlof running,0 private static...
quartz原始碼分析 執行引擎和執行緒模型
title quartz原始碼分析 執行引擎和執行緒模型 date 2017 09 09 23 14 48 categories quartz tags quartz,原始碼分析 toc 軟體版本 quartz 2.2.3 類名 從上述配置檔案可以看出quartz配置了乙個執行緒池,實現名稱為 th...
原始碼學習 執行緒池原始碼自學篇
執行緒池作為專案中經常用到的類,也在面試中備受青睞,個人對於原始碼也只是讀過一些,很多知識點都是一知半解,藉此機會自己再溫故一下。我是在邊自學邊寫這些東西,可能語言上或者邏輯上不太完善,請大家不要介意。執行緒池是什麼?官網解釋 執行緒池主要解決兩個問題 在需要執行大量執行緒的場景,減少建立每個執行緒...