主頁 > 軟體工程 > 風險洞察之事件總線的探索與演進

風險洞察之事件總線的探索與演進

2023-02-23 08:21:27 軟體工程

作者:京東科技 劉紅申

一、事件總線介紹

事件總線,或稱其為資料管道,作為整個風險洞察資料流轉的重要一環,它承擔著風險實時資料統一標準化的重要職責,

在面對復雜多樣的上游資料,事件總線可以將復雜資料進行決議、轉換, 富化、分發等操作,底層核心算子抽象為source、transform、sink三層架構, 支持各層算子插件式擴展, 并支持groovy、python等腳本語言自定義配置,以及自定義jar包的上傳,擁有將上游資料單向接入多向輸出的能力,在數倉與上層應用的開展中,起著承上啟下的作用,

二、事件總線-遇到的技術挑戰與解決方案

技術難點與挑戰

風險洞察平臺運行初期,業務資料接入完全采用定制化代碼處理,通過代碼配置消費MQ訊息,然后根據業務需求,完成其所需欄位的決議,最終資料落入Clickhouse,這種業務接入方式在早期是可以滿足業務所需,但是隨著風險洞察平臺在風控領域的不斷推進,業務的發展與資料不斷膨脹,面對風控資料的復雜多樣性、訊息平臺的差異性,資料接入定制化成本也越來越高,同時資料轉化與計算邏輯的強耦合,大促時期吞吐量已然達到瓶頸,呈現出越來越多的痛點:

1. 資料結構差異性: 隨著風險洞察平臺使用業務方的的不斷增加,業務資料訊息體的復雜性也不盡相同,如復雜場景以天盾反欺詐場景為例,訊息體結構包含物件、物件字串而且還有陣列;簡單場景以內容安全為例,訊息體結構就是簡單平鋪的一層;面對風控資料的復雜多樣性,定制資料的統一標準化已然迫在眉睫;

2. 代碼邏輯重復性: 對訊息體的處理絕大多數逃離不了序列化與反序列化操作,然而隨著業務量的增多以及開發人員的不盡相同,業務代碼是每日劇增且帶有參差性的,邏輯重復,維護成本高;

3. 決議寫入低效性: 同一個MQ訊息可能會對應很多的業務方,不同的業務方所需業務資料又千差萬別,如以天策MQ為例,實時資料中包含著金白條資料,金條與白條資料又區分著各自的業務線,如果單次訂閱MQ訊息,會導致邏輯處理極其復雜,不可維護;然而采用多次訂閱,又無法復用已有邏輯,且導致資料成倍增長,造成資源浪費,同時吞吐能力成為瓶頸;

4. 輸入輸出多樣性: 隨著風險洞察平臺被使用的越來越廣,來自于上游資料的生產方式也出現了多樣性,如JMQ2、FMQ、Kafka以及JMQ4等等,同時又為了給用戶更好的平臺使用體驗,不同業務資料又會被落入不同存盤中,如Clickhouse、R2m、Jes以及訊息佇列,如何快速支持這些組件成為了挑戰;

5. 業務需求易變性: 上游業務頻繁的策略調整與變更,對應到事件總線就意味著決議欄位以及底層表欄位頻繁的增刪改,正如欄位決議完全依賴于硬編碼且不同業務資料耦合著各自的業務邏輯,導致開發人員維護成本極高,開發周期長、上線影響廣;

技術解決方案

研發一套資料流轉服務,用其貫穿資料接入到數倉存盤的整個流程,再結合風險洞察平臺特性,以資料源組件為基礎,作為資料流轉的入口與出口,具體方案如下:

? 資料統一標準化能力:統一標準化入口與出口,上游資料接入時,無論訊息體結構如何,經過事件總線處理后,都輸出為平鋪單層key-value結構;

? 代碼邏輯規范化能力:針對風控策略本身易變的特性,采用靈活度更高的訊息體決議組件Jsonpath,任何訊息體處理第一步就是生成訊息體背景關系物件,后續欄位的提取,都從這個背景關系中獲取;

? 高吞吐決議寫入能力:一次決議,多路復用,MQ主題實作單次接入,根據不同的業務需求通過過濾下沉不同的業務表,如以天策金白條為例,提取金白條各自的INTERFACE_NAME作為條件,下沉到不同的業務表中;又如以高TPS營銷反欺詐場景為例,在下沉表的同時,下沉訊息佇列給Flink計算使用;減少重復決議,同時抽象各種算子,針對不同的數倉寫入可做對應的頻次、批次、大小設定,提升吞吐量;

? 輸入輸出插件化能力:輸入輸出插件化,新的業務需求來時,可以快速擴展相應組件,以應對新需求;

? 低代碼化熱加載能力:針對業務需求的頻繁變更,解決硬編碼問題,減少上線頻次,那就需要開發一套可配置化系統,支持腳本開發與熱加載,同時內置函式插件化,快速擴展共性函式;

三、事件總線-整體架構圖

事件總線-架構介紹

事件總線整體架構抽象為三層,source、transform 和sink, 通過連接器擴展機制實作資料引擎擴展, 并采用責任鏈模式處理資料鏈路, 插件化管理函式、腳本,實作實時訊息接入、過濾、富化、轉換、分發標準化處理, 并通過分組消費、降級機制保證架構高可用,

? 實時資料: 風險核心場景,目前事件總線業務資料的主要來源;

? 事件總線:

? Source:資料輸入層,風險業務資料的主要來源方式,目前大多數來源于JMQ2、JMQ4、FMQ等;

? Transform: 事件總線的核心處理層,同時也是自定義函式與自定義腳本的決議層,該層抽象了大量的算子,如,資料決議算子、過濾算子、富化算子、轉換算子等等當復雜訊息體資料經過一系列算子之后,最侄訓轉化為單層key-value標準結構;

? Sink: 資料輸出層,經Transform組件轉換后,此時的資料可以發實時訊息給各個訊息佇列,也可以存盤到Clickhouse、Es、R2m等資料庫;

? 資料服務: 基于事件總線標準化后沉淀的資料所支撐的平臺應用;

事件總線-核心類圖介紹

事件總線定義了一個頂層父介面IEventHubExecutor,并定義了一個execute方法,其三個主要子介面,IEventHubParse、IEventHubTransform與IEventHubSink分別對應于事件總線的三個組成部分,source、transform和sink,通過實作這三個子介面,便可以完成對不同中間件的適配問題,比如,目前事件總線僅支持決議的資料寫入到Clickhouse,但業務需求需要做檢索,那么很顯然資料存盤在Es要優于存盤在Clickhouse,所以此時需要擴展一個JesEventHubSink來實作IEventHubSink即可,

其中Context作為背景關系,貫穿了整個事件總線的執行程序,背景關系中包含了決議程序中所需要的一起資訊,比如,從哪里來的資料、要決議哪些欄位、決議好的資料送到那里去等等,

事件總線-自定義函式介紹

自定義函式的實作,其實借助了開源框架Avaitor運算式,Aviator是一個輕量級、高性能的Java運算式執行引擎, 它動態地將運算式編譯成位元組碼并運行,主要用于各種運算式的動態求值,相比Groovy這樣的重量級腳本語言,Aviator是非常輕量級的運算式執行引擎,

? 函式決議器:自定義函式支持腳本撰寫(腳本采用groovy,同時為了更加“親民”,采用Java語法)與Jar包上傳兩種方式;

? 函式編譯器:編譯腳本與決議jar包,生成對應的AvaitorFunction實體;

? 函式注冊器:將生成的AvaitorFunction實體注冊到Avaitor的背景關系中;

? 函式執行器:通過實作FunctionExecutor,便可以對函式方便的呼叫;

事件總線-動態分組、一鍵降級與流量監控介紹

分組消費

事件總線決議能力的提升,也很大一部分歸結于分組消費的設計,對流量做到靈活分流,對機器做到物盡其用,動態分組,又分為物理分組與邏輯分組,如下圖:

? 物理分組:單純依靠機器劃分,規定好哪些機器消費哪些主題,如,天盾分組就消費天盾主題,營銷分組就消費營銷主題,

? 邏輯分組:邏輯分組與物理分組的區別在于,邏輯分組在物理分組之上,又抽象出一個消費組的概念,用機器與消費組系結,而非直接與主題系結,這樣帶來的好處就是,可以更加方便的調配流量,如,營銷流量非常大,那么可以直接動態調配,使天盾分組也去消費營銷主題,既能充分利用天盾分組機器,又能提高營銷主題消費能力,

一鍵降級

一鍵降級更多的用于大促期間,但是為了降的更加“人性化”,一鍵降級我們也做了分類:丟棄降級與積壓降級,如下圖:

? 丟棄降級:所降級主題處于消費狀態,顧名思義,事件總線拿到了資料,就直接將資料丟棄,降級期間資料是不可找回的;丟棄降級可用于業務方并不在意一時資料的丟失或者壓測場景,

? 積壓降級:所降級主題處于非消費狀態,降級期間資料積壓在訊息平臺,降級過后,再開啟消費;積壓降級可用于業務方允許降級期間內沒有新資料,但是降級過后資料又可查場景,

流量監控

事件總線的流量監控現依賴于ump,對單個主題以及所有主題的入口都設有埋點,資料在每個關鍵流轉位置決議性能以及流量都能被監控,代碼片段如下:

Profiler.registerInfo(this.getClass().getSimpleName(), UmpUtil.UMP_APP_NAME, false, true);

四、未來展望

自事件總線上線以來,已經經歷了多次大促考驗,大促決議量已達5000w/min,日常決議量也已2000w/min,伴隨著風險洞察平臺被越來越多的部門所使用,事件總線已然成為其重要組成部分,為了更好的提高決議性能,就需要去做更多的探索,同時,目前事件總線做的更多的是對實時資料的處理,未來我們也將推進flink-cdc等技術在事件總線中的應用,

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/544786.html

標籤:其他

上一篇:風險洞察之事件總線的探索與演進

下一篇:keycloak~LB到Ingress再到K8s的路徑問題

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more