1. 程式人生 > >同盾技術總監張新波:從零打造千萬級實時風控雲服務的秘籍

同盾技術總監張新波:從零打造千萬級實時風控雲服務的秘籍

開源 存在 VM gin 評估 方便 寫到 ont keep

轉載:https://www.csdn.net/article/2015-01-29/2823760

摘要:同盾科技聯合創始人&技術總監張新洪在一個技術沙龍中闡述了同盾是如何從零開始打造千萬級實時風控雲服務,具體介紹了同盾系統平臺構建過程中主要需要解決的三大難題,以及解決這些問題的具體時實踐過程。

同盾科技,是由阿裏、Paypal 反欺詐專家創建的,國內第一家風險控制與反欺詐雲服務提供商,其涉及領域包括電商、B2B、互聯網金融、遊戲等。同盾技術總監張新波在 UPYUN Open Talk第二期“移動時代互聯網金融的架構趨勢”中闡述了同盾是如何從零開始打造千萬級實時風控雲服務,具體介紹了同盾系統平臺構建過程中主要需要解決的三大難題,以及解決這些問題的具體時實踐過程。

同盾的後臺系統是一套非常強大的,規則靈活配置的管理系統,搭建這個平臺同盾主要面臨了以下幾個難點:

1. 性能

同盾提供的雲服務需要直接嵌入到用戶的業務流程中,比如說登錄,客戶的網站接受用戶的登錄請求後,客戶調用同盾提供的的服務,等我們的服務做出響應後再決定下一步行為。通常情況下,客戶給我們的時間是500毫秒左右,除掉網絡開銷,基本上我們必須在200毫秒內做完所有的數據分析計算,給客戶響應。同時每次調用都需實時計算,且參與計算的數據量非常龐大,會涉及大量的指標運算。如何在短時間內完成計算,對整個系統來說是一個較大的挑戰。

2. 可用性

和其他雲服務商一樣,我們提供7×24小時的服務,如果系統掛了,對客戶的系統會造成比較大的影響,如果某臺服務器掛掉,導致服務不可用或不穩定,這種情況客戶也是不可接受的。是否有完善的災備和緊急備選方案,保證在各種異常情況下,整個系統都可持續使用,這是另一個難點。

3. 可擴展性

同盾是為企業提供服務,很多大的客戶接進來數據量可能是上百萬的流量,隨著客戶的增多,對系統要求的處理能力會越來越大,所以我們整個系統架構設計要求具備隨時可進行線性擴展的能力,比如說現在能夠處理500萬,流量增加一倍的話,能夠通過簡單的加機器可以把處理能力提升到1000萬,這也是一個難點。

系統搭建前期工作

技術分享圖片

這是最開始我們的系統架構。我們做的一些對用戶的管理,最主要的是策略配置,比如說我們在針對借貸風險場景做一系列的規則配置,這些配置會直接寫到數據庫裏面。我們提供的API,可以加載一些客戶自己定的策略,用戶請求的時候可以通過執行策略和規則,得到風險評估的結果。

具體流程見上圖,可以看到,這裏所有的流程幾乎都需要直接和 MySQL 交互,導致 MySQL 壓力非常大,系統性能一直很差。針對這個問題我們做了兩方面的改進。

首先是讀優化,通過使用 Guava Cache,對用戶校驗和查找策略做了緩存處理,並在系統啟動時預先加載全部用戶數據和策略數據,並通過定時刷新緩存,保證請求基本不需要訪問 mysql,全部在內存中進行計算。

然後是寫優化,應用寫數據時並不直接操作 mysql,而是通過本地任務隊列異步保存數據。這裏我們使用的本地隊列是 Berkeley DB。Berkeley DB 是一個內存數據庫。我們用它主要考慮到Berkeley DB 支持持久化,以及本身處理性能高。如果我們寫入的數據,消費端沒有及時刷新數據庫,或者寫到其他地方處理完畢,數據將會堆積,如果全放在內存裏,會把內存撐爆。Berkeley DB 的持久化性能,剛好可以解決這個問題。

在完成這兩項優化後,系統性能已經有了很大提升,但在性能上還是不能滿足我們的要求,後面加上了 memcached 的緩存,將數據通過 base64 加 Gzip 進行壓縮後存到 memcached 當中,請求進來後,執行策略需要做指標計算時,可以很快從cache中取到數據,減少與 MySQL 的交互。因為熱點數據比較少,為了提高緩存利用率我們將數據的過期時間從一天提升到一周,這樣大部分都可以命中緩存,無需再用 MySQL 讀取,對性能有較大提升。

系統前期處理好後,還存在很多單點問題,為了保證整個系統的可用性,得將所有的單點問題消滅掉,首先做了MySQL主備,主機宕機之後用 Keeplived 自動切換到備機。另外Memcached 也是單點,有些應用出現問題會導致系統無法效應,為了消除單點故障,做了Memcached 集群。

在這個過程中還進行了其他優化,主要包括:

  • MySQL服務器硬盤從 SAS RAID5 升級到 SSD RAID10,保證較快的讀寫速度。
  • 數據庫從 MySQL 5.1 系統升級到 MySQL 5.6,以及對參數進行優化 。
  • 客戶數據記錄單表更改為 按客戶分表 ,提升讀寫性能和防止表過度膨脹。
  • Apache 改成了 NGINX,利用它的動態修改upstream server的組件,在發布時將機器自動摘除,發布完成之後再加入到處理集群中,避免系統性能抖動問題。
  • 另外利用好各種 JVM 工具,如 jstat、jstack、MAT 以及BTrace可以方便地進行JVM的問題排查和優化。

災備和應急方案

應用放在一個地方的話,總是會遇到各種各樣的一些問題,所以,為了保障服務的穩定性,我們在阿裏雲上部署了一套簡化版的服務,如果在主機房不能正常提供服務,還有最基本的應急方案。

關於應急方案,我們在最前端 Nginx 的 lua 腳本中添加全局開關,如果某個後臺應用出現問題,可以立即通過全局開關禁用,以免因為某個服務異常而導致整體響應時間過長。同時也可以針對特定用戶設定開關,如果某個用戶訪問有異常,也可以通過開關直接關掉。通過後臺界面和定制腳本,在出現緊急情況時,可以做到一兩分鐘之內切快速切換開關。

監控報警

為了保障實時了解整個系統線上運行情況,需要一個完善的監控系統。同盾選擇了 Zabbix。

Zabbix 本身就有很完備的監控體系,並且還支持很多插件,可以較方便的搭建一套完整的監控報警系統。

Zabbix 主要從幾個基本層面來完善監控報警。硬件層面,通過 Load、Memory、Disk、IO 等來判斷。應用層面,每個應用都有一個默認接口,在 Zabbix 上調用,看應用是否正常返回來檢測。JVM 層面,通過 Heap 使用情況、GC 情況來監控。其他,可以通過 Memecached、Nginx、MySQL 的專有插件,來監控專門的應用,比如 Nginx的 QPS,Memcached 的命中率等。

Zabbix 對內部的監控還是很強力的,但外部的,諸如 IP,Zabbix 監控不到。因此在 Zabbix的基礎上搭配了360 的雲監控,對 DNS、公網IP 等所有暴露在外部的接口都監控起來。

在完成上面的優化後,承載線上百萬級的容量沒有太大的問題。但隨著業務量的增加,我們首先面臨的最大問題是存儲的問題,因為 MySQL 存儲有限,在數據增長過快的情況下,分庫分表已經不能很好的解決問題,所以我們又對系統架構做了一次調整:

技術分享圖片

通過引入 Cassandra 來實現自動水平擴展,整個系統承載能力又得到了一次提升。

最後,從同盾這一年來的經驗來說,盡量在選用一些熟悉、成熟和社區活躍的開源技術,在創業初期,以解決業務問題為主,先滿足業務需求再做優化。作為第三方雲服務商,需要監控報警和應急預案放在非常重要的位置,如果出現問題能做出最快相應。系統的演變叠代是一起復雜的過程,且會遇到很多問題,要搭建真正的能承載大數據訪問的系統,還需多實踐,在這個過程中不斷進行優化。

UPYUN Open Talk是 UPYUN 發起主辦的行業技術沙龍,旨在以邀請各行各業優秀的企業技術負責人分享介紹自己工作過程中的技術架構經驗的方式,推動整個移動互聯網時代的企業員工的個人技術成長,從“人”這個關鍵點的個人成長提升去幫助推動企業的快速成長。

技術分享圖片張新波:同盾科技聯合創始人&技術總監,負責公司的技術研發。原阿裏集團安全部技術專家,國際站風控體系的核心創建人。

同盾技術總監張新波:從零打造千萬級實時風控雲服務的秘籍