背景
目前的業(yè)務背景是需要與某平臺(類似于大眾點評網(wǎng))進行對接,售賣我們的保險產(chǎn)品,而之前由于業(yè)務緊急, 開發(fā)小伙伴為了趕進度,基本都是業(yè)務代碼一把梭(懂得都懂)驰坊, 因此導致后期的業(yè)務擴展和對接都非常的麻煩嗡载。 之前邏輯如下:
目前的架構邏輯,用戶在B平臺的APP上訂餐,定完餐后彈出廣告或者推薦鏈接, 如果用戶點擊鏈接則可以跳轉到A保險系統(tǒng)的定制化出單頁面進行對應保險產(chǎn)品的出單(目前為用餐保險 類似于美團外賣的放心吃)窑多。如果用戶選擇購買,則A系統(tǒng)需要與B點餐平臺的支付網(wǎng)關進行交互洼滚,用戶在B系統(tǒng)支付完成后, 則與A保險系統(tǒng)交互進行保險出單的后續(xù)操作埂息。具體的支付邏輯后面會介紹
此類架構的不足是
- A系統(tǒng)所有C端對外交互都依賴于業(yè)務定制化服務,因此會導致該服務越來越臃腫遥巴,業(yè)務耦合也越來越嚴重千康。
- A系統(tǒng)的業(yè)務集成系統(tǒng)不僅與第三方支付交互,同時也與核心系統(tǒng)進行交互, 職責不單一,業(yè)務耦合嚴重铲掐,不利于擴展拾弃。如果新對接第三方系統(tǒng)或者第三方系統(tǒng)對應的接口升級,則可能牽扯到多系統(tǒng)的升級修改迹炼。
- 后端服務調用使用Feign , 成倍的序列化反序列化操作砸彬,消耗資源。
概念以及思路
升級思路
- 新增支付代理服務,使用Gateway中間件做代理(比如 Spring Cloud Gateway,Apache Shenyu)斯入。
- 引入訂單的概念并且使用有限狀態(tài)機來管理和更新訂單狀態(tài)砂碉。這里使用的是COLA 框架中的狀態(tài)機組件,完全解耦第三方支付功能, 針對內部核心系統(tǒng),只有訂單的信息需要維護刻两。不需要在乎對外第三方支付的集成和維護增蹭。
有限狀態(tài)機
有限狀態(tài)機(Finite State Machine,F(xiàn)SM)是一種抽象的計算機模型磅摹,用于描述對象滋迈、系統(tǒng)或程序在不同狀態(tài)之間的轉換以響應外部輸入或事件。FSM 是一種數(shù)學概念户誓,廣泛用于計算機科學饼灿、工程、自動化帝美、電子和通信領域碍彭。下面是有關有限狀態(tài)機的詳細解釋:
- 狀態(tài)(State):狀態(tài)是系統(tǒng)或對象可以處于的特定情況或模式。狀態(tài)通常用來描述系統(tǒng)的特定配置或條件。例如庇忌,一個電梯系統(tǒng)可能有狀態(tài)舞箍,如 "停止"、"上升" 和 "下降"皆疹。
- 狀態(tài)轉換(State Transition):狀態(tài)轉換描述了系統(tǒng)從一個狀態(tài)切換到另一個狀態(tài)的過程疏橄。這些狀態(tài)轉換可以由外部事件、輸入或條件觸發(fā)略就。例如捎迫,當用戶按下電梯按鈕時,電梯從 "停止" 狀態(tài)切換到 "上升" 或 "下降" 狀態(tài)残制。
- 事件(Event):事件是導致狀態(tài)轉換的外部觸發(fā)器立砸。事件可以是用戶的輸入掖疮、傳感器數(shù)據(jù)初茶、時鐘信號等。在電梯系統(tǒng)中浊闪,事件可以是用戶按下樓層按鈕恼布。
- 動作(Action):動作是與狀態(tài)轉換相關聯(lián)的操作或行為。當狀態(tài)機從一個狀態(tài)切換到另一個狀態(tài)時搁宾,可以執(zhí)行特定的動作折汞。這些動作可以包括向用戶顯示信息、控制輸出設備盖腿、記錄數(shù)據(jù)等爽待。
- 初始狀態(tài)(Initial State):初始狀態(tài)是狀態(tài)機的起始狀態(tài),在系統(tǒng)啟動或重置時進入翩腐。從初始狀態(tài)開始鸟款,狀態(tài)機可以根據(jù)事件觸發(fā)狀態(tài)轉換。
- 終止狀態(tài)(Final State):終止狀態(tài)是狀態(tài)機的結束狀態(tài)茂卦,表示狀態(tài)機已完成其任務何什。一旦狀態(tài)機達到終止狀態(tài),它將不再進行狀態(tài)轉換等龙。
有限狀態(tài)機分為以下兩種主要類型:
- 確定性有限狀態(tài)機(Deterministic Finite State Machine处渣,DFA):在任何給定時間,DFA 從當前狀態(tài)只有一個可能的狀態(tài)轉換蛛砰。每個輸入事件都精確地確定下一個狀態(tài)罐栈。
- 非確定性有限狀態(tài)機(Non-deterministic Finite State Machine,NFA):NFA 具有多個可能的狀態(tài)轉換泥畅,取決于輸入事件和當前狀態(tài)荠诬。這使得NFA在某些情況下更靈活,但也更復雜。
狀態(tài)語義模型:
應用領域:
- 編譯器和解釋器:用于分析和處理程序代碼浅妆。
- 自動控制系統(tǒng):用于控制機器望迎、機械和工業(yè)自動化。
- 通信協(xié)議:用于實現(xiàn)通信協(xié)議的協(xié)商和狀態(tài)管理凌外。
- 游戲開發(fā):用于管理游戲對象和角色的行為辩尊。
- 電子電路設計:用于描述硬件電路的行為。
- 數(shù)據(jù)處理和處理工作流程:用于描述數(shù)據(jù)處理過程的狀態(tài)康辑。
- 任何需要在不同狀態(tài)間管理行為的領域摄欲。
總之,有限狀態(tài)機是一種強大的概念疮薇,用于建模和控制系統(tǒng)的行為胸墙,特別適用于需要在狀態(tài)之間切換以處理不同事件和條件的應用程序和系統(tǒng)。有限狀態(tài)機可以幫助工程師和開發(fā)人員更好地理解和設計復雜系統(tǒng)的邏輯和行為按咒。
訂單狀態(tài)流轉
下圖中 圖形表示 狀態(tài) 迟隅, 箭頭表示 事件
支付狀態(tài)流轉
退款狀態(tài)流轉
升級后的架構圖
- 引入支付代理服務(暫時使用Spring Cloud Gateway 集成) ,將支付邏輯單獨解耦出來,使用狀態(tài)機維護到DB中。
- 前端可以直接與支付代理服務進行交互,減少后端服務之間的調用励七,降低資源利用率智袭。
- 提高擴展性, 無論對接什么第三方支付(AliPay,WxPay等), A保險系統(tǒng)中,只需要維護訂單信息即可掠抬,其他服務不需要在乎使用的是用什么支付吼野,對于其他服務只有訂單的支付和退款功能接口。
總結
目前只是暫時給出了升級的方案和思路两波,之后會更新對應的實踐部分瞳步,包括狀態(tài)機的使用,Spring Cloud Gateway的簡單集成demo.