En 400-6655-581
5
返回列表
> 資源中心 > 技術干貨 | 服務編排基礎—狀態(tài)機

技術干貨 | 服務編排基礎—狀態(tài)機

2020-02-19瀏覽次數:1285

服務編排里有個核心的服務,就是狀態(tài)機(State Machine)服務,也稱為決策(Decider)服務,用Netflix Conductor服務編排的架構作為參考,我們可以看看狀態(tài)機所在的位置,下圖用紅框框著的就是狀態(tài)機服務。



什么是狀態(tài)機呢?


狀態(tài)機一般分為有限狀態(tài)機FSM(Finite State Machine)、分層有限狀態(tài)機HFSM(Hierarchical Finite State Machine),包含狀態(tài)(State)、事件(Event)、轉換(Transition)、動作(Action)幾個關鍵元素,它們之間相互關聯(lián)和協(xié)同,在游戲或AI領域用得比較普遍。


玩過游戲的人肯定不陌生,特別是RPG,當你用鼠標或鍵盤上下左右指揮游戲角色行走或奔跑時就是一種狀態(tài),當遇到敵人時就進入了戰(zhàn)斗模式,這又是另種狀態(tài),而從一種狀態(tài)進入另一種狀態(tài)是需要事件觸發(fā)的,也就是事件驅動,當你中途退出后又重新進入游戲,這時需要補償機制,也就是把之前游戲中的場景恢復回來。


FSM需要記住各種狀態(tài),通過事件的觸發(fā)(有條件),完成狀態(tài)之間的轉換。



當狀態(tài)太多的時候,FSM會變得不容易維護,這時候就需要進行歸類,抽離相同或相似的狀態(tài)組成同類型的狀態(tài)機,再用一個大的狀態(tài)機來維護這些不同類型的狀態(tài)機,這樣就有了HFSM,同類型狀態(tài)機只關心內部的狀態(tài)轉換,并不需要關心外部狀態(tài)的跳轉,這樣就做到了無關狀態(tài)的隔離,而外部的狀態(tài)機只需要關注幾個同類型狀態(tài)機的跳轉,如果狀態(tài)還比較多,可以再次提取進行多層歸類,這樣一來大大降低了狀態(tài)機的復雜度。





狀態(tài)機在服務編排中能干什么用呢?


簡單的說在服務編排中就是做更新和調度的事情,更新工作流狀態(tài),確定下一個狀態(tài),結合分布式隊列服務調度合適的任務,當然也可以處理失敗、錯誤、異常補償機制??梢姞顟B(tài)機服務在服務編排中的重要作用,其實就是一個中樞內核



如果只是體驗,覺得Netflix Conductor還太復雜,網上也有多種實現思路,用Camel結合activeMQ也是不錯的簡單組合,當然也要求你的動手能力夠強,類似于品牌機和組裝機的選擇。