風控變量計算中心

2024年2月6日 23点热度 0人点赞

介紹

統一變量計算平臺,為信貸風控和交易風控,提供高性能、高並發和高可用的一站式變量計算中心,實現變量生命周期管理,降低金融風險,提高服務質量。

  • 支持通用算子配置化,支持基於SQL和JAVA衍生算子在線開發和熱部署
  • 統一變量管理,支持多人協同定義,共享資料庫,為各種場景提供變量數據服務
  • 實時交易場景支持毫秒級計算
  • 支持集成三方數據,如人行等

應用架構

在風控中,主要包含兩個部分:策略和變量。如果策略是引擎,變量則是原料。變量的加工又依賴原始數據或者預加工後的粒度數據。完全基於原始數據加工,保證了精度的同時降低了實時性,而基於預加工的變量則保證了實時性,犧牲了一定限度的精度。 為滿足兩種場景,采用異步非阻塞和同步阻塞兩種架構模式。同步阻塞接口實時上送數據,基於粒度進行實時計算;異步非阻塞接口,依賴流式平臺或調度平臺進行異步上送和加工,基於全量明細或者離線批 實時流進行準實時計算。

架構整體分為三層: 第一層:變量計算中心,實現變量依賴服務調用,完成整體邏輯的計算。也包含非功能性特征,如超時、熔斷等 第二層:基礎服務層,包含基於JAVA和SQL的衍生算子服務,依賴的事件中心和DATA-API網關服務 第三層:存儲層,實時變量的明細存儲於redis集群,準實時的明細存儲於分佈式數據庫TIDB。Redis的降級策略可依賴於tidb或者基於分表的mysql。

服務交互圖

業務分析師在配置中心進行變量定義、變量開發和服務配置等 變量計算中心接收外部請求,根據輸入的場景標識,獲取變量依賴樹,執行任務,或調用外部接口、或調用算子服務、或被事件驅動拉起任務 將變量計算結果進行輸出映射,直接返回或寫入中間庫表發出事件通知

核心流程圖

變量計算發生在變量計算中心,以場景或變量集做為觸發驅動,獲取相應的變量依賴樹,將其轉化為任務樹,逐級調用。 對於異步任務,在發出調用請求後即可結束,等待異步任務完成後,發出回調事件,喚醒下個節點的任務繼續執行。 在變量計算中心,需要實現超時、重試、熔斷和降級等高可用特性。

數據架構

海量數據實時計算方案應基於分治思想化整為零。實時流 離線批是基於時間分治,自研變量計算任務基於空間分治。將大數據拆分為小數據 ,將集中式計算拆分為預計算和近端計算,將集中式存儲拆分為分散存儲,從而加快任務處理和響應速度,提高用戶體驗

算子與任務

向上簡化用戶操作,向下沉淀通用邏輯。 將通用性的技術邏輯與差異性的業務邏輯分離,實現了一箭三雕:凸顯業務語義 ;復用底層代碼;沉淀領域知識。 比如:某賬號過去30天平均交易金額;某賬號過去30天累計轉賬次數。業務關註的內容僅如下表,技術則抽象實現了一個預計算的任務和近端計算的算子。 算子和任務屏蔽底層存儲的差異性,支持KV存儲為主存,關系型存儲為備存,實現高可用。基於關系型存儲的預計算需要解決並發寫帶來的更新覆蓋問題。

事件

主維度

從維度

算子

窗口

粒度

是否包含當前事件

自然日

默認值

Trade(交易)

customerId

Money

平均

30天

1天

Transfer(轉賬)

customerId

Money

計數

30天

24小時

SQL ON Memory

  • 衍生變量 在基於微任務和算子的基礎上,實現了變量聚合計算。在變量的基礎上,進行衍生,則是基於SQL on Memory,或直接基於SQL on Redis,或基於熱部署的JAVA算子來實現。
  • Calcite 基於Calcite進行二次開發,實現on Memory和on Redis,或者直接實現異構數據源查詢,如es和mysql,再在內存裡進行合並計算。
  • java算子 對基於Calcite二次開發未能覆蓋的算子,則通過java算子實現。利用JVM類加載器的特性,打破雙親委派機制,通過反射進行調用。為保證性能,需對class對象進行本地緩存。