亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

大中臺模式下如何構建復雜業務核心狀態機組件

發布時間:2020-08-07 21:40:28 來源:ITPUB博客 閱讀:549 作者:古月木易01 欄目:軟件技術

大中臺戰略下,中臺將公司業務的公共能力下沉,并采用更加合理、可復用的架構和技術來實現這些基礎能力。在電商行業內,將面臨貨物的采購、商品上架、交易發生、訂單狀態變化、客服介入等大量狀態維護。每個狀態之間具有很強的邏輯關聯關系,比如:退款操作在發貨前和發貨后將是完全不同的流程,如圖1訂單退款流程。

大中臺模式下如何構建復雜業務核心狀態機組件 圖1 退款流程圖

由此可見,對于復雜狀態的管理是一個業務依賴,需求多變的場景。在公司初創期,可以采用硬編碼方式,對于每一個操作進行狀態判斷,每一步操作定制一套邏輯鏈路。隨著業務的增加,定制化鏈路顯然不優雅,大量流程代碼無法維護,此時中臺通用解決思路就尤為重要,有限狀態機(Finite State Machine,縮寫:FSM)開始在中臺落地。

1 有限狀態機

有限狀態機(以下簡稱FSM)又稱有限狀態自動機,簡稱狀態機。維基百科定義是表示有限個狀態以及在這些狀態之間的轉移和動作等行為的數學模型。

這個模型和業務中臺遇到的問題十分吻合。圖1是狀態轉移圖,可以用來表示狀態機,此外可以使用狀態轉移表來表示。如圖2所示:

大中臺模式下如何構建復雜業務核心狀態機組件

圖2 狀態轉移表

可以看出,FSM是通過抽象為動作和狀態,管理有限個狀態轉移的模型。動作是在給定時刻要進行的活動的描述,我們總結動作類型有如下:

  • 進入動作:在進入狀態時進行

  • 退出動作:在退出狀態時進行

  • 輸入動作:依賴于當前狀態和輸入條件進行

  • 轉移動作:在進行特定轉移時進行

在FSM框架下,將流水線的狀態流轉流程進行了抽象和結構化,將復雜的狀態轉移圖,分割成相鄰狀態的最小單元。這樣相當于搭建了樂高積木,在這套機制上可以組合成復雜的狀態轉移圖。

2 Spring StateMachine

Spring Statemachine框架主要是幫助開發者簡化狀態機的開發過程,讓狀態機結構更加層次化,我們來看下Spring SM怎么實現。首先最小的樂高模型如圖3所示 :

大中臺模式下如何構建復雜業務核心狀態機組件

圖3 SM最小單元

假如有狀態 STATE1, STATE2和事件EVENT1, EVENT2。事件驅動狀態流轉。下面來分析下Spring SM的主要代碼。

2.1 依賴pom

<dependencies> 

     <dependency> 

            <groupId>org.springframework.statemachine</groupId> 

            <artifactId>spring-statemachine-core</artifactId> 

            <version>2.1.3.RELEASE</version> 

    </dependency> 

</dependencies>

2.2 創建狀態機

 通過注解來注冊狀態機的三要素:source、target、event

大中臺模式下如何構建復雜業務核心狀態機組件

2.3 注解監聽器

通過監聽器感知事件發生,并相應的處理相關邏輯

大中臺模式下如何構建復雜業務核心狀態機組件

2.4 運行狀態機

大中臺模式下如何構建復雜業務核心狀態機組件

3 交易中臺

在交易場景,定義了自己的狀態機框架,抽象了符合交易場景的狀態角色:

  • 初始狀態、目標狀態:狀態關系

  • 角色:不同角色有不同的操作權限,比如賣家、買家、系統、客服

  • 操作:對應事件

  • handler:事件操作相應的action實現

因此一個事件我們可以定義為:在角色A,在初始狀態S1下,執行OP1操作,將使用handler來處理,執行成功將狀態設置為目標狀態S2。

3.1 個性化FSM抽象

鑒于交易的個性化需要,擴展了狀態表的條件,同時使用handler和Java反射,來對邏輯代碼進一步結構化。到這一步后,我們可以將數據模板存儲到數據庫中。如圖4:

大中臺模式下如何構建復雜業務核心狀態機組件

圖4 交易中臺FSM狀態表

通過改造,核心代碼FSM執行引擎只有不到100行。通過注冊業務handler,可以靈活的擴充業務能力。同時數據狀態的維護是通過狀態表,而不依賴手動編寫代碼,這對于代碼質量的保證、工程回歸測試都節省了大量的時間。也為中臺實現配置化做好了鋪墊。

3.2 中臺賦能業務

中臺沉淀了基礎能力,如何實現?中臺如何賦能業務的,業務是否滿意呢?

看下面一個例子,基于交易,C2C、自營是兩個具有極大區別的業務,他們有完全不同的兩套業務流程。C2C平臺需要對買賣兩端進行擔保,而自營更多的是給予買家保證權益。簡化版流程如圖5:

大中臺模式下如何構建復雜業務核心狀態機組件

圖5 簡化版交易流程

通過中臺FSM能力,我們只要能將狀態圖繪制出來,那么相應的狀態流轉表配置也已經產生。handler 只需要關注當前操作的業務邏輯,極大的解耦了狀態和業務。

可以毫不夸張的說,一個新業務過來,中臺能在2天時間內單人完成狀態機配置開發上線。這就是中臺的效率。

4 總結

FSM解決復雜業務狀態流轉的問題,并以交易業務進行舉例。但是FSM的應用場景遠多于交易。比如客服工單,商品狀態等。但不是所有的流程都需要使用FSM,需要做好業務流程的折中,就像中臺戰略更適用于10-100 階段的公司一樣。

同時FSM只是一個框架,還需要搭建一整套基于它的外圍業務邏輯。在狀態流轉過程中,業務邏輯才是我們的肌肉。框架就像骨骼約束著我們,從而讓技術成長更加健康,這也許就是中臺的魅力。

更多免費技術資料及視頻

大中臺模式下如何構建復雜業務核心狀態機組件

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

凤阳县| 达州市| 云霄县| 阿城市| 徐水县| 曲沃县| 安西县| 余庆县| 平度市| 乌苏市| 天门市| 谢通门县| 分宜县| 杭锦后旗| 郧西县| 巴里| 曲松县| 宣城市| 万年县| 西昌市| 巨鹿县| 六安市| 含山县| 呼和浩特市| 广水市| 渑池县| 盐边县| 自贡市| 罗田县| 肥东县| 平遥县| 秦皇岛市| 开鲁县| 五家渠市| 凤山市| 平武县| 运城市| 黄平县| 扎赉特旗| 西青区| 延津县|