閱讀了下yarn
的原始碼,架構中設計模式除了服務生命週期管理模式外,還包括事件驅動和狀態機模式。生命週期管理模式在容器設計時候比較常見,包括資源模型的載入,解除安裝等等,比如
tomcat
、jboss
等開源產品。
這裡重點講一下事件驅動和狀態機模式的使用。
從提交任務到任務處理完成,yarn
架構中整個任務的處理過程的設計都是事件驅動和狀態機器的模式。
對於事件驅動模式,物件包括事件型別eventtype
、事件物件
event
、事件分發器
dispatcher
、事件處理器
eventhandler
,每種事件都有對應的事件處理器註冊在
dispatcher
中,yarn
中的事件分發器
asyncdispatcher
是非同步處理的事件的
(事件傳送到
queue
中,單獨執行緒從佇列中取
event
,根據事件型別取對應的
eventhandler
進行處理),
eventhandler
處理邏輯中也可以包括傳送下乙個事件。
對於狀態機模式,基本做法是
根據發生的事件和當前狀態,來執行下一步的動作action
yarn中狀態機物件
statemachine
,涉及的物件包括事件操縱的物件
operand
)、狀態
state
、事件event
、事件型別
eventtype。
1、在宿主物件中構造狀態機拓撲
statemachinefactory
statemachinefactory
= new
new)
newnew
,node_update
, new
............... .
installtopology
();
this
.statemachine
= statemachinefactory
.make(
this);
2、在宿主物件中進行狀態跳轉控制邏輯
(宿主物件是特殊的
eventhandler)
輸入是當前的狀態currstate
和發生的事件
event
,經過transition
處理後,跳轉到下乙個狀態
this
.statemachine
.dotransition
(event.gettype(),
event);
3、狀態轉換處理邏輯,在事件邏輯處理中可以傳送事件
event(
事件event
由asyncdispacher
非同步分發,在
eventhandler
中呼叫狀態機調整控制邏輯
),進行下一次的狀態遷移
public
inte***ce
singlearctransition
參見下圖,
狀態機模式
狀態機又叫有限狀態機,它有 3 個部分組成 狀態 事件 動作。其中,事件也稱為轉移條件。事件觸發狀態的轉移及動作的執行。不過,動作不是必須的,也可能只轉移狀態,不執行任何動作。針對狀態機,有三種實現方式。第一種實現方式叫分支邏輯法。利用 if else 或者 switch case 分支邏輯,參照狀...
狀態機模式實戰
最近在為澳洲一家保險公司做web應用,在乙個收集使用者位址資訊的頁面中,我遇到了乙個問題 1.當使用者輸入正確的位址,通過驗證。2.當使用者第一次輸入錯誤的位址,不通過。3.當使用者第二次輸入,不論正確與否,都將通過。當面對這樣的需求的時候,我立馬有了解決方案,首先要有乙個全域性變數來儲存他輸入的位...
Linux rpc結構 一種事件驅動的狀態機處理
linux的rpc是作為nfs的底層支援介面放在核心中的。當然,需要的話,其他模組也能呼叫rpc介面。為了高效的排程各個rpc請求,linux的prc排程實際上是乙個事件驅動模型。c s結構,大多使用多程序服務模型,這種模型的優點是程式設計簡單,因為作業系統都是基於程序排程的,可以直接使用作業系統的...