HBASE-Procedure架構(gòu)

簡介

Hbase Procedure是HBASE服務(wù)端負責事物處理的一個架構(gòu),寫的非常棒。。??梢园窍聛砀囊桓淖约河玫哪欠N。。。

背景知識

實現(xiàn)事物,需要處理的問題很多,主要的三個如下

  1. 程序掛掉
  2. 事物異常處理
  3. 未知狀態(tài)處理(分布式事物常有)
    對于程序掛掉,需要將整個事物分為幾個流程,多個流程之間的狀態(tài)要存儲在不易失性存儲上,流程需要實現(xiàn)冪等。

對于事物的異常處理,要實現(xiàn)回滾操作。

對于未知狀態(tài)處理,需要實現(xiàn)冪等與重試,當然實現(xiàn)分布式事物還有很多別的方面,這里省略。

HBASE的Procedure就是依據(jù)以上背景實現(xiàn)。

組件

Procedure

Procedure代表上述的流程部分,多個流程的劃分為如果要執(zhí)行下一個流程,那么需要將這兩個流程之間的狀態(tài)存儲下來,也是冪等執(zhí)行的最小單位。
最主要的三個方法為

  1. execute 負責執(zhí)行這個流程
  2. rollback 負責回滾這個流程
  3. abort 負責終止這個流程

Procedure之間是有派生關(guān)系的,即一個Procedure會派生出一個子Procedure,父Procedure和子Procedure共同組成一個事物,最頂層的流程為Root Procedure

對于資源的鎖定:

  1. acquireLock 獲取Procedure所需資源的鎖
  2. releaseLock 釋放Procedure所需資源的鎖

ProcedureExecutor

執(zhí)行Procedure的線程池。

RootProcedureState

保存事物的執(zhí)行過程,用來在事物出錯的時候,依次回滾事務(wù),是一個棧結(jié)構(gòu)。

ProcedureStore

用來在執(zhí)行Procedure前存儲Procedure的信息,用以在程序死亡重啟時恢復(fù)執(zhí)行事物。

ProcedureScheduler

用于組織執(zhí)行Procedure的優(yōu)先級

WorkerThread

對Procedure的執(zhí)行線程邏輯實現(xiàn)

Procedure狀態(tài)流轉(zhuǎn)圖

Procedure狀態(tài)流轉(zhuǎn)圖

Procedure 繼承簡圖

Procedure 繼承簡圖

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容