隨着有贊支付體量的增大,資產部門承擔的資金管理,風險把控的責任也越大。咱們一方面要小步快跑,快速支撐業務,又要穩住底盤,守好底線。支付業務底線就是守護用戶的每一分錢,不能有資金損失。在咱們搭建這套體系前,有贊支付資金類的線上監控是個盲區,缺少自我發現的能力。業務成功了,但內部對用戶的資金操做多是錯誤的,致使資損。並且故障發生到發現的時間很長,且大部分是用戶上報,致使故障的影響面擴大,用戶的信任度下降。
預防資損有不少種手段,除了事前線下經過各類測試手段保障資金安全外,線上也是很是重要的一環。除了發現問題,相應的,出現故障時,資損止血的能力也須要配套跟上。數據庫
舉一個最基本的支付業務場景,在有贊內部會經歷如下幾個系統之間的交互:
安全
經過上圖能夠看出每一個系統的處理結果,會依據系統創建的模型存儲在數據庫中,部分關鍵信息會傳輸給下層系統。系統之間處理的重要信息如金額、帳戶不一致就會致使資損。目前咱們也內部對帳會發現這些問題,可是內部對帳都是天天跑批執行一次。若是依靠內部對帳來發現這個問題,資損早就發生了。須要調用很大的人力物力去追款,大部分狀況下還追不回來。咱們分析了有贊近一年來的資損場景,結合歷史的經驗,總結出資損類故障發生有幾下幾大類:
1)有正確的輸入,錯誤的輸出:好比系統與系統之間的金額存儲單位不一致,或者本身處理金額正確,傳輸給下游的金額錯誤,致使後面交易金額錯誤;
2)上下游系統的數據不一致:該處理的沒處理,該到達終態的單據沒有到達終態;
3)冪等控制失效,多扣款或多入帳;
4)系統內部邏輯錯誤,無對外輸出;
5)人工修復異常場景,產生資損。架構
基於解決以上問題的目的,咱們設計了實時防控資損體系。整體設計思路圍繞如下幾點:
1)發現問題的實時性,減小故障的影響面;
2)信息流一致性兩兩比對、資金流平衡型檢查;
3)全方位監控:業務觸發、人工變動資金檢測、歷史數據檢測;
4)檢測的準確性,無誤報;
5)和支付鏈路解藕,不影響主鏈路。異步
平臺能力是基礎,檢測規則是其靈魂。基於對業務的豐富經驗,咱們能夠沉澱一些業務資金規則,從旁路來約束和檢測系統邏輯的正確性。好比支付金額-退款金額應該==結算金額,退款金額不能大於支付金額,憑證支付、現金支付無資金流類型不用調用帳務,支付和帳務之間會通過結算的處理,帳務累計出入金額和支付的金額應該要相等。測試
系統定位於事前線下測試環境兜底,事中一致性檢測,過後資金兜底,不對業務形成入侵,徹底旁路運行。觸發點有 2 個,業務事件消息和數據庫變動 binlog 信息。spa
分三類信息處理:
1) 基於各個業務事件好比支付完成事件、退款完成事件、確認收貨時結算完成事件,帳務收支明細變動事件等,觸發運行系統內配置的依賴此事件的規則;
2) 經過監聽 binlog 變動,能夠檢測到人爲操做類變動, 按定義好的邏輯生成對應的檢查點,每一個檢查點有包含多個鏈路檢測。觸發對應的規則運行檢測全鏈路數據的一致性、資金的平衡性;
3) 人工處理歷史數據前,對歷史數據的質量進行前置檢測。保證不產生二次資損。
經過系統間兩兩覈對數據一致性,或者抽象出系統內的業務規則、資金規則旁路自檢來發現故障。而且實時獲取數據,實時運行,對於業務處理上有滯後和緩衝的場景,咱們提供了異步運行的機制,以及三次重試的機會。全面提供系統總體的容錯性,無因系統設計問題致使的誤報。設計
通過系統的沉澱以後,咱們將過程當中的數據存儲到了 hbase,把整個支付過程落地成了可視化試圖,可清晰的查看每一個環節的數據形態,具體數據就不展現了。
好比一筆訂單能夠看到,當前已是退款完成狀態,對應的支付成功時支付、結算、計費、帳務數據形態:
blog
退款完成環節支付、結算、計費、帳務數據形態:
事件
熔斷的處理流程圖以下:
圖片
基於咱們以前創建的異常發現能力,同時咱們須要具有資金止損能力。創建後臺觸發熔斷操做入口,人工錄入熔斷配置或資損防控檢測出異常新增並生效熔斷配置,應急狀況生效熔斷,平常支付鏈路不會過熔斷判斷。
熔斷支持按業務碼緯度、指定的單號、商戶號熔斷;
目前咱們在業務方接入的熔斷埋點有 3 個點:退款、結算、出金。爲何考慮這三個地方埋點呢?
1) 咱們整個系統的定位都是不侵入主鏈路,對用戶無感知的,因此支付環節不考慮埋點。且錢不能流出有讚的體系外,一旦流出則沒法追回。
2) 在支付鏈路產生的故障,考慮在退款、結算環節來作攔截,且支付完成後,錢停留在有讚的中間戶,此時訂正支付鏈路數據,對商戶來講無感知。
3) 一旦在結算環節出現問題,則考慮最後一道兜底,出金報送銀聯前進行攔截。
確認無誤或故障處理完成後,觸發解熔斷操做,業務繼續處理或駁回。
創建了這一整套體系後,半年時間內,咱們已經在線下環境聯調時就成功兜底資金處理 bug,線上也避免了多起問題。並按期的進行故障演練來檢測平臺能力。
本文主要介紹大致的設計和實現思路,後續會有詳細的技術細節介紹,敬請期待。資損防控路漫漫,共勉。