#618復盤系列# | 交易風控系統架構演變
「摘要」系統優化改造主要思路:
1、去關係型資料庫
2、風控引擎業務模型升級優化
3、其他,針對系統存在的其他具體痛點,實施具體改造……
背景介紹
金融系統網路,從業務層到交易層,需要若干系統間協同處理,相互支持,相互依賴,共同完成一筆看似簡單的業務處理。風控在這其中是被若干系統同步調用的葉子節點,並發量高而且要同步實時完成邏輯複雜的風險判斷,給出風險決策。
老交易風控完全依賴關係型資料庫,響應速度慢,抗高並發能力差;內部系統間數據耦合嚴重,不易擴展改造;
不斷增加的業務量,持續增長的規則數,越來越慢的響應速度……亟待系統升級改造,一年前我們開始了系統優化之路……
具體優化措施
一、數據層
內部系統流水數據解耦和
風控系統用到的數據大體分3類:實時業務流水數據;離線風險特徵數據;配置類數據。其中實時業務流水數據是無邊界且數據量極大的數據,也是我們優化的重點,這類數據從使用者的角度,主要分:
- 實時決策系統(從現在往前n段時間即可)
- 風控運行系統,供案件分析,人工審核用(需要歷史全量數據)
- 分析師風險分析用(雖然不需要歷史全量數據,但是比實時系統需要更長的有效數據)
- 其他非實時系統。
老系統數據架構
如上圖所示,線上實時庫數據與各類內部系統存在耦合關係:
- Sars系統每天凌晨抽數抽到實時系統性能下降;
- Mysql從庫當大數據用了,定時炸彈隨時引爆;
- 實時決策強依賴Mysql,性能差待優化。
所以首先要做的就是:各內部系統數據解耦合。
解耦整體思路:對實時系統接入的所有流水數據做完數據清洗、預處理後,MQ非同步方式發出來,其他內部系統來訂閱,根據自己系統的特點選擇不同的存儲方案。
優化後數據架構
數據解耦後,就可以放心大膽的進行實時系統的優化改造。目前改造的效果:新接入場景所有數據基本不需要再寫入關係型資料庫。
風控實時系統:去關係型資料庫,全面緩存化
- 流水數據
流水數據聚合統計指標是對mysql影響最大的,也是我們去關係型數據,全面緩存化最有難度的改造。
目前系統用到的方案有兩種,二者相互補充,基本做到大場景所有聚合類統計全部緩存化。
方案一:清洗流水數據,緩存明細,解析聚合SQL轉化為代碼邏輯結合緩存數據實現聚合統計。
方案二:接入流式實時數據計算系統。
方案對比:
- 離線風險數據
這類數據的使用特點:查詢相對簡單,沒有複雜聚合統計。整體思路:最底層(無需業務層感知)實現關係型資料庫與緩存的數據同步。
寫庫優化
Mysql目前架構是通過cds實現的主從讀寫分離,老業務接入的數據還是要寫MySQL, 單點主庫在高並發情況下出現寫庫瓶頸。
優化方案:
- MQ非同步降級(大部分聚合統計都已經切緩存,入庫延遲對整體系統業務影響不大)。
- 業務層合併、批量入庫,減少IO。
優化後,618大促峰值,比去年雙11量大的情況下,非同步寫庫無任何積壓,無任何入庫延遲!
二、引擎Drools版本升級、JVM調優
引擎採用支持熱部署的Drools,隨著規則及業務量的增加,引擎java fullGc頻繁,yongGc耗時過長,嘗試調整各類參數都無法解決問題。
如下優化項完成後,java虛擬機各類GC表現正常,TP999優化效果非常明顯:
- Drools升級到最新7.0版本,session採用無狀態替代原有有狀態session。
- Jvm升級到1.8,採用java8默認垃圾收集機制。
三、交易風控3.0– 風控引擎業務模型升級優化
交易風控模型2.0到3.0演進
引入規則包的概念
通過規則包前置條件,可以將規則劃分到更小的規則包,使每條規則能夠更精確的處理自己應該處理的業務請求,提高系統性能。
引入指標模板的概念(通過Rhythm模板引擎實現)
解決問題
- 多規則間,指標重複配置,復用性差。
- 相同指標重複收集,浪費系統資源,影響系統效率。
- 分析師可直接通過界面靈活配置規則。研發負責開發指標模板即可,一勞永逸,節約研發成本。
其他改造方案
1、網關代碼重構:通過模板模式、工廠模式,將不同場景間的定製處理解耦和;拆分場景也便於系統性能監控。
2、自降級方案:系統一旦出現問題,系統可以自降級,及時給上游返回結果,流水數據會存下來,後面非同步再跑引擎。
……
優化改造效果
1、從系統性能角度
在規則數量翻2倍,業務請求量翻3倍的情況下,全場景系統響應TP99降低到原來的1/5,性能提升顯著。過去兩個大促,全部順利經受住考驗……
2、從研發人力角度
隨著交易風控3.0及洞察系統的上線及穩定運行,之前專門設立的都需要1個研發人力支持的:規則開發介面人、線上值班介面人,都已經取消。
後續
目前系統還有優化空間,優化改造之路,我們將持續不斷走下去……
想了解更多乾貨請關注微信公眾號:京東金融技術說(JDJRTechTalk)
推薦閱讀: