狀態(tài)機+Gateway 升級支付代理服務(一)

背景

目前的業(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)機的詳細解釋:

  1. 狀態(tài)(State):狀態(tài)是系統(tǒng)或對象可以處于的特定情況或模式。狀態(tài)通常用來描述系統(tǒng)的特定配置或條件。例如庇忌,一個電梯系統(tǒng)可能有狀態(tài)舞箍,如 "停止"、"上升" 和 "下降"皆疹。
  2. 狀態(tài)轉換(State Transition):狀態(tài)轉換描述了系統(tǒng)從一個狀態(tài)切換到另一個狀態(tài)的過程疏橄。這些狀態(tài)轉換可以由外部事件、輸入或條件觸發(fā)略就。例如捎迫,當用戶按下電梯按鈕時,電梯從 "停止" 狀態(tài)切換到 "上升" 或 "下降" 狀態(tài)残制。
  3. 事件(Event):事件是導致狀態(tài)轉換的外部觸發(fā)器立砸。事件可以是用戶的輸入掖疮、傳感器數(shù)據(jù)初茶、時鐘信號等。在電梯系統(tǒng)中浊闪,事件可以是用戶按下樓層按鈕恼布。
  4. 動作(Action):動作是與狀態(tài)轉換相關聯(lián)的操作或行為。當狀態(tài)機從一個狀態(tài)切換到另一個狀態(tài)時搁宾,可以執(zhí)行特定的動作折汞。這些動作可以包括向用戶顯示信息、控制輸出設備盖腿、記錄數(shù)據(jù)等爽待。
  5. 初始狀態(tài)(Initial State):初始狀態(tài)是狀態(tài)機的起始狀態(tài),在系統(tǒng)啟動或重置時進入翩腐。從初始狀態(tài)開始鸟款,狀態(tài)機可以根據(jù)事件觸發(fā)狀態(tài)轉換。
  6. 終止狀態(tài)(Final State):終止狀態(tài)是狀態(tài)機的結束狀態(tài)茂卦,表示狀態(tài)機已完成其任務何什。一旦狀態(tài)機達到終止狀態(tài),它將不再進行狀態(tài)轉換等龙。
state machine

有限狀態(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)語義模型:

state machine model

應用領域:

  • 編譯器和解釋器:用于分析和處理程序代碼浅妆。
  • 自動控制系統(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)流轉
payment state

退款狀態(tài)流轉
refund state

升級后的架構圖

升級后支付架構
  • 引入支付代理服務(暫時使用Spring Cloud Gateway 集成) ,將支付邏輯單獨解耦出來,使用狀態(tài)機維護到DB中。
  • 前端可以直接與支付代理服務進行交互,減少后端服務之間的調用励七,降低資源利用率智袭。
  • 提高擴展性, 無論對接什么第三方支付(AliPay,WxPay等), A保險系統(tǒng)中,只需要維護訂單信息即可掠抬,其他服務不需要在乎使用的是用什么支付吼野,對于其他服務只有訂單的支付和退款功能接口。

總結

目前只是暫時給出了升級的方案和思路两波,之后會更新對應的實踐部分瞳步,包括狀態(tài)機的使用,Spring Cloud Gateway的簡單集成demo.
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末腰奋,一起剝皮案震驚了整個濱河市单起,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌氛堕,老刑警劉巖馏臭,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異讼稚,居然都是意外死亡括儒,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門锐想,熙熙樓的掌柜王于貴愁眉苦臉地迎上來帮寻,“玉大人,你說我怎么就攤上這事赠摇」潭海” “怎么了浅蚪?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長烫罩。 經(jīng)常有香客問我惜傲,道長,這世上最難降的妖魔是什么贝攒? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任盗誊,我火速辦了婚禮,結果婚禮上隘弊,老公的妹妹穿的比我還像新娘哈踱。我一直安慰自己,他們只是感情好梨熙,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布开镣。 她就那樣靜靜地躺著,像睡著了一般咽扇。 火紅的嫁衣襯著肌膚如雪邪财。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天肌割,我揣著相機與錄音卧蜓,去河邊找鬼。 笑死把敞,一個胖子當著我的面吹牛,可吹牛的內容都是我干的榨惠。 我是一名探鬼主播奋早,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼赠橙!你這毒婦竟也來了耽装?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤期揪,失蹤者是張志新(化名)和其女友劉穎掉奄,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凤薛,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡姓建,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了缤苫。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片速兔。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖活玲,靈堂內的尸體忽然破棺而出涣狗,到底是詐尸還是另有隱情谍婉,我是刑警寧澤,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布镀钓,位于F島的核電站穗熬,受9級特大地震影響,放射性物質發(fā)生泄漏丁溅。R本人自食惡果不足惜死陆,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望唧瘾。 院中可真熱鬧措译,春花似錦、人聲如沸饰序。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽求豫。三九已至塌衰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蝠嘉,已是汗流浹背最疆。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蚤告,地道東北人努酸。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像杜恰,于是被迫代替她去往敵國和親获诈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內容