在 1.0 的支付系統中,咱們遇到了諸多問題:數據庫
痛定思痛,咱們決心對支付系統作一次架構升級。那麼,怎麼去作支付系統的架構升級呢?咱們從兩個方面來進行架構升級梳理:緩存
拆分單體應用以前,從三個維度對邊界進行拆分:微信
將支付系統中的核心繫統拆分爲收銀臺、交易核心、支付核心、渠道網關、帳務系統、會計系統、清算系統、合規系統等。架構
如圖 14.4 所示的是核心支付鏈路流程示意圖。框架
得益於蘑菇街強大的基礎平臺及中間件系統,好比 RPC 服務框架 Tesla、數據庫中間 件 Raptor、可靠的消息中間件 Corgi、數據庫事件變動中間件 Pigeon、數據配置推送平臺Metabase 及分佈式緩存 KVStore 等,咱們在 2015 年第四個季度對支付系統作了總體的服務化拆分,拆分後的架構如圖 14.5 所示。分佈式
下面大體介紹一下各系統的功能:工具
以上講述了支付系統 2.0 的總體架構,接下來對各個核心系統的拆分和實現進行具體介紹。組件化
從剛纔的支付鏈路中能夠看出,交易核心做爲支付系統入口,對接上層的業務系統。在 2015 年年末,支付系統有着數十張支付交易表,如何抽取合適的業務模型是最重要的事 情。另外,爲了數據的統一性,咱們對分散的數十張支付交易表進行了多表聚合,以及訂 單關聯。同時,支付的接入管控也放在了交易核心中實現,總體架構如圖 14.6 所示。性能
在交易核心中作基礎交易類型的模型抽象,主要基於對支付的理解。如圖 14.7 所示, 電商交易的預售和廣告營銷的 CPC(Cost Per Click 的縮寫,每次點擊付費廣告)購買都是用戶直接購買並支付給收款方,那麼咱們能夠將該行爲抽象爲即時交易,即從 a 用戶到 b 用戶的直接支付行爲。學習
基於對業務的分析和理解,咱們對交易核心的業務進行了抽象,抽象爲 10 多種交易類型:
對數十張支付交易表進行多表聚合是基於一張主表來實現的。而在這種狀況下,業務訂單如何保持惟一是咱們須要考慮的事情。考慮到須要對上層業務保持極少的侵入性,在新設計的支付交易表中有專門的字段用於作惟一鍵約束:業務識別碼+業務訂單號。
另外,作一個小功能,使任何訂單均可以追溯到初始訂單,如圖 14.8 所示,擔保交易下的全部單子均可以找到,同時也能追溯到初始訂單。
鑑於交易核心爲支付平臺的入口,針對 1.x 支付系統中支付接入無受權問題,咱們也在交易核內心面作了支付接入的管控 —— 受權和鑑權。 爲任何一個接入支付的業務分配惟一的業務標識碼及受權的 Token。從而使得業務在支付接入時,須要帶上 Token 和加鹽過的加密數據。
咱們將 1.0 支付系統中的支付模塊切分爲兩層——交易核心和支付核心。交易核心面向 上游業務,支付核心面向支付系統內部。 支付核心總體架構如圖14.9所示,
另外,支付核心須要基於系統、用戶指令等完成各類各樣的支付行爲。按照簡單的作法,咱們能夠在不一樣的分支上實現各類支付行爲,可是這樣可能會致使支付行爲耦合,並使支付邏輯判斷變得複雜。基於這種緣由,咱們對支付工具進行組件化拆分,封裝爲數十種支付工具,經過支付編排來執行支付行爲。
支付交易訂單經過支付規則生成具體的支付請求(即支付核心記錄),支付請求經過支 付指令編排規則獲取一組支付工具包,經過支付執行器完成對支付工具的調用執行。
這樣的封裝使咱們能夠實現插件式開發,以及支付規則可配置化,繼而讓支付核心內 部的支付工具互不影響並系統地簡化。整個編排過程如圖 14.10 所示。
支付核心有一個比較重要的功能,即如何對支付異常進行處理——支付過程當中的重複支付、部分支付、金額不一致、全額退款等異常都須要作異常退款處理。
如圖 14.11 所示,以部分支付爲例,咱們作了一個異常管理組件來處理這種異常,在 「紅包支付+優惠券支付+網關支付」組合支付中對每次的支付都進行上報,經過異常管理組件對部分支付成功的行爲進行反向異常退款。
咱們對渠道網關係統進行拆分,渠道網關接受來自支付核心的支付請求,並與第三方支付進行交互。渠道網關一樣抽象了基礎服務類型:支付、退款、提現、簽約、查詢等。同時,出於性能方面的考慮,將網關係統切分爲兩個子系統——網關核心和網關前置:
渠道網關係統的總體架構如圖 14.12 所示。
資金覈算體系主要由會計系統、帳務系統、清算系統和合規系統組成,總體架構如圖14.13 所示。
截至目前,咱們對支付系統中面向業務的體系及資金覈算體系進行了介紹。
1.0 支付系統單體應用經過肯定系統邊界、業務建模拆分以後,整個支付平臺被拆分爲幾十個服務,那麼如何保障業務信息在服務間流轉而不丟失是咱們須要考慮的問題,就比如如何讓各個系統交互時都講普通話,而不是講方言。針對這個問題,咱們在平臺中作了統一上下文的要素信息(惟一業務標識碼),使其在整個支付平臺鏈路中全程傳遞,具體要素以下。
最後可關注公衆號,一塊兒學習,天天會分享乾貨,還有學習視頻領取!
文章轉載:https://mp.weixin.qq.com/s/q_zgPvfmGNjG3MG4RsH_HA