<video id="71low"></video>

            ITPub博客

            首頁 > 數據庫 > MySQL > 基于Flink和規則引擎的實時風控解決方案

            基于Flink和規則引擎的實時風控解決方案

            MySQL 作者:大濤學長 時間:2019-10-23 15:09:09 0 刪除 編輯
            對一個互聯網產品來說,典型的風控場景包括:注冊風控、登陸風控、交易風控、活動風控等,而風控的最佳效果是防患于未然,所以事前事中和事后三種實現方案中,又以事前預警和事中控制最好。
            這要求風控系統一定要有實時性。
            本文就介紹一種實時風控解決方案。

            1.總體架構

            風控是業務場景的產物,風控系統直接服務于業務系統,與之相關的還有懲罰系統和分析系統,各系統關系與角色如下:


            • 業務系統,通常是APP+后臺 或者 web,是互聯網業務的載體,風險從業務系統觸發;
            • 風控系統,為業務系統提供支持,根據業務系統傳來的數據或埋點信息來判斷當前用戶或事件有無風險;
            • 懲罰系統,業務系統根據風控系統的結果來調用,對有風險的用戶或事件進行控制或懲罰,比如增加驗證碼、限制登陸、禁止下單等等;
            • 分析系統,該系統用以支持風控系統,根據數據來衡量風控系統的表現,比如某策略攔截率突然降低,那可能意味著該策略已經失效,又比如活動商品被強光的時間突然變短,這表面總體活動策略可能有問題等等,該系統也應支持運營/分析人員發現新策略;
            其中 風控系統分析系統是本文討論的重點,而為了方便討論,我們假設業務場景如下:
            • 電商業務;
            • 風控范圍包括:
            • 注冊,虛假注冊;
            • 登陸,盜號登陸;
            • 交易,盜刷客戶余額;
            • 活動,優惠活動薅羊毛;

            • 風控實現方案:事中風控,目標為攔截異常事件;

            2.風控系統

            風控系統有 規則模型兩種技術路線,規則的優點是簡單直觀、可解釋性強、靈活,所以長期活躍在風控系統之中,但缺點是容易被攻破,一但被黑產猜到里面就會失效,于是在實際的風控系統中,往往再結合上基于模型的風控環節來增加健壯性。但限于篇幅,本文中我們只重點討論一種基于規則的風控系統架構,當然如果有模型風控的訴求,該架構也完全支持。
            規則就是針對事物的條件判斷,我們針對注冊、登陸、交易、活動分別假設幾條規則,比如:
            • 用戶名與身份證姓名不一致;
            • 某IP最近1小時注冊賬號數超過10個;
            • 某賬號最近3分鐘登陸次數大于5次;
            • 某賬號群體最近1消失購買優惠商品超過100件;
            • 某賬號最近3分鐘領券超過3張;
            規則可以組合成規則組,為了簡單起見,我們這里只討論規則。
            規則其實包括三個部分:
            • 事實,即被判斷的主體和屬性,如上面規則的賬號及登陸次數、IP和注冊次數等;
            • 條件,判斷的邏輯,如某事實的某屬性大于某個指標;
            • 指標閾值,判斷的依據,比如登陸次數的臨界閾值,注冊賬號數的臨界閾值等;
            規則可由運營專家憑經驗填寫,也可由數據分析師根據歷史數據發掘,但因為規則在與黑產的攻防之中會被猜中導致失效,所以無一例外都需要動態調整。
            基于上邊的討論,我們設計一個風控系統方案如下:
            該系統有三條數據流向:
            • 實時風控數據流,由紅線標識,同步調用,為風控調用的核心鏈路;
            • 準實時指標數據流,由藍線標識,異步寫入,為實時風控部分準備指標數據;
            • 準實時/離線分析數據流,由綠線標識,異步寫入,為風控系統的表現分析提供數據;
            本節先介紹前兩部分,分析系統在下一節介紹。

            2.1 實時風控

            實時風控是整個系統的核心,被業務系統同步調用,完成對應的風控判斷。
            前面提到規則往往由人編寫并且需要動態調整,所以我們會把風控判斷部分與規則管理部分拆開。規則管理后臺為運營服務,由運營人員去進行相關操作:
            • 場景管理,決定某個場景是否實施風控,比如活動場景,在活動結束后可以關閉該場景;
            • 黑白名單,人工/程序找到系統的黑白名單,直接過濾;
            • 規則管理,管理規則,包括增刪或修改,比如登陸新增IP地址判斷,比如下單新增頻率校驗等;
            • 閾值管理,管理指標的閾值,比如規則為某IP最近1小時注冊賬號數不能超過10個,那1和10都屬于閾值;
            講完管理后臺,那規則判斷部分的邏輯也就十分清晰了,分別包括前置過濾、事實數據準備、規則判斷三個環節。

            2.1.1 前置過濾

            業務系統在特定事件(如注冊、登陸、下單、參加活動等)被觸發后同步調用風控系統,附帶相關上下文,比如IP地址,事件標識等,規則判斷部分會根據管理后臺的配置決定是否進行判斷,如果是,接著進行黑白名單過濾,都通過后進入下一個環節。
            這部分邏輯非常簡單。

            2.1.2 實時數據準備

            在進行判斷之前,系統必須要準備一些事實數據,比如:
            • 注冊場景,假如規則為單一IP最近1小時注冊賬號數不超過10個,那系統需要根據IP地址去redis/hbase找到該IP最近1小時注冊賬號的數目,比如15;
            • 登陸場景,假如規則為單一賬號最近3分鐘登陸次數不超過5次,那系統需要根據賬號去redis/hbase找到該賬號最近3分鐘登陸的次數,比如8;
            redis/hbase的數據產出我們會在第2.2節準實時數據流中進行介紹。

            2.2.3 規則判斷

            在得到事實數據之后,系統會根據規則和閾值進行判斷,然后返回結果,整個過程便結束了。
            整個過程邏輯上是清晰的,我們常說的規則引擎主要在這部分起作用,一般來說這個過程有兩種實現方式:
            • 借助成熟的規則引擎,比如Drools,Drools和Java環境結合的非常好,本身也非常完善,支持很多特性,不過使用比較繁瑣,有較高門檻,可參考文章【1】;
            • 基于Groovy等動態語言自己完成,這里不做贅述。可參考文章【2】;
            這兩種方案都支持規則的動態更新。

            2.2 準實時數據流

            這部分屬于后臺邏輯,為風控系統服務,準備事實數據。
            把數據準備與邏輯判斷拆分,是出于系統的性能/可擴展性的角度考慮的。
            前邊提到,做規則判斷需要事實的相關指標,比如最近一小時登陸次數,最近一小時注冊賬號數等等,這些指標通常有一段時間跨度,是某種狀態或聚合,很難在實時風控過程中根據原始數據進行計算,因為風控的規則引擎往往是無狀態的,不會記錄前面的結果。
            同時,這部分原始數據量很大,因為用戶活動的原始數據都要傳過來進行計算,所以這部分往往由一個流式大數據系統來完成。在這里我們選擇Flink,Flink是當今流計算領域無可爭議的No.1,不管是性能還是功能,都能很好的完成這部分工作。
            這部分數據流非常簡單:
            • 業務系統把埋點數據發送到Kafka;
            • Flink訂閱Kafka, 完成原子粒度的聚合
            • 注:Flink僅完成原子粒度的聚合是和規則的動態變更邏輯相關的。舉例來說,在注冊場景中,運營同學會根據效果一會要判斷某IP最近1小時的注冊賬號數,一會要判斷最近3小時的注冊賬號數,一會又要判斷最近5小時的注冊賬號數……也就是說這個最近N小時的N是動態調整的。那Flink在計算時只應該計算1小時的賬號數,在判斷過程中根據規則來讀取最近3個1小時還是5個1小時,然后聚合后進行判斷。因為在Flink的運行機制中,作業提交后會持續運行,如果調整邏輯需要停止作業,修改代碼,然后重啟,相當麻煩;同時因為Flink中間狀態的問題,重啟還面臨著中間狀態能否復用的問題。所以假如直接由Flink完成N小時的聚合的話,每次N的變動都需要重復上面的操作,有時還需要追數據,非常繁瑣。

            • Flink把匯總的指標結果寫入Redis或Hbase,供實時風控系統查詢。兩者問題都不大,根據場景選擇即可。
            通過把數據計算和邏輯判斷拆分開來并引入Flink,我們的風控系統可以應對極大的用戶規模。

            3.分析系統

            前面的東西靜態來看是一個完整的風控系統,但動態來看就有缺失了,這種缺失不體現在功能性上,而是體現在演進上。即如果從動態的角度來看一個風控系統的話,我們至少還需要兩部分,一是衡量系統的整體效果,一是為系統提供規則/邏輯升級的依據。
            在衡量整體效果方面,我們需要:
            • 判斷規則是否失效,比如攔截率的突然降低;
            • 判斷規則是否多余,比如某規則從來沒攔截過任何事件;
            • 判斷規則是否有漏洞,比如在舉辦某個促銷活動或發放代金券后,福利被領完了,但沒有達到預期效果;
            在為系統提供規則/邏輯升級依據方面,我們需要:
            • 發現全局規則,比如某人在電子產品的花費突然增長了100倍,單獨來看是有問題的,但整體來看,可能很多人都出現了這個現象,原來是蘋果發新品了……
            • 識別某種行為的組合,單次行為是正常的,但組合是異常的,比如用戶買菜刀是正常的,買車票是正常的,買繩子也是正常的,去加油站加油也是正常的,但短時間內同時做這些事情就不是正常的。
            • 群體識別,比如通過圖分析技術,發現某個群體,然后給給這個群體的所有賬號都打上群體標簽,防止出現那種每個賬號表現都正常,但整個群體卻在集中薅羊毛的情況。
            這便是分析系統的角色定位,在他的工作中有部分是確定性的,也有部分是探索性的,為了完成這種工作,該系統需要盡可能多的數據支持,如:
            • 業務系統的數據,業務的埋點數據,記錄詳細的用戶、交易或活動數據;
            • 風控攔截數據,風控系統的埋點數據,比如某個用戶在具有某些特征的狀態下因為某條規則而被攔截,這條攔截本身就是一個事件數據;
            這是一個典型的大數據分析場景,架構也比較靈活,我僅僅給出一種建議的方式。

            相對來說這個系統是最開放的,既有固定的指標分析,也可以使用機器學習/數據分析技術發現更多新的規則或模式,限于篇幅,這里就不詳細展開了。

            本文為云棲社區原創內容,未經允許不得轉載。


            來自 “ ITPUB博客 ” ,鏈接:http://www.ep4tq.com/69947441/viewspace-2661126/,如需轉載,請注明出處,否則將追究法律責任。

            請登錄后發表評論 登錄
            全部評論

            注冊時間:2019-09-04

            • 博文量
              121
            • 訪問量
              47724
            妹子图每日分享