穩定高效MOT通知系統建設的實現與探討

本文選自《交易技術前沿》總第三十八期文章(2020年3月)

肖鋼、趙眸、聶超 /中信建投證券信息技術部
郵箱:[email protected]

摘要:伴隨資本市場對外開放的步驟加快,外資券商也已正式進入中國,整個行業競爭加劇,為增強證券公司競爭力,增強用戶體驗,客戶信息通知與服務的MOT系統顯的尤為重要,本文重點講述中信建投證券MOT系統搭建的實踐以及未來規劃等相關內容。

1.概述

客戶在證券公司開戶並進行各種投資操作,在不同的時間點會產生大量的信息需要提醒,每個需要提醒客戶或員工的時刻,我們稱之為一個MOT點,例如在客戶開戶的多個步驟中若長時間停留在某一步驟,則需要提醒員工去幫助客戶開戶;客戶開戶成功後可以給其推薦新客理財產品;客戶新股中籤後需要提醒客戶已中籤等。按照MOT點的提醒時效性,我們將其又分為非實時MOT及實時MOT,例如提醒客戶其持倉股票出現了快速拉昇,提醒的時效性很高屬於實時MOT,而祝福客戶生日快樂的短信則時效性較低,屬於非實時MOT。為滿足不同時效的MOT提醒需求、賦能業務人員在不同的MOT時刻去為客戶服務及營銷,本文結合中信建投證券MOT系統的搭建過程,探討如何設計穩定高效的全渠道MOT通知系統。

2.MOT系統實現

2.1系統架構

中信建投證券的MOT系統主體架構如圖1所示,從上游各數據源獲取數據,加工信息後推送至下游的全部通知渠道,共包括數據處理層、數據層、業務處理層三部分。
數據源部分為MOT系統可接入的數據源,可接入的數據源分為三大類:Kafka實時數據源、EverQuotes實時行情數據源以及各關係型數據庫數據源。其中Kafka實時數據源以及EverQuotes行情數據源均為實時數據處理引擎提供數據,需要做實時MOT提醒的數據,均需要交易系統等上游關係型數據庫實時同步至Kafka;各關係型數據庫數據源主要為非實時數據處理引擎提供數據,數據庫類型包括Oracle、SqlServer、Mysql等各類關係型數據庫,在數據源的選取上,儘量從數據倉庫獲取數據,減少因為各交易系統數據結構變動導致的MOT系統被動修改,同時儘量選取上游做過整合的穩定資訊數據源,避免因個別資訊提供商提供數據不準確導致MOT對客戶發送錯誤提醒。
數據處理層包括實時數據處理引擎及非實時批處理引擎,是整個MOT系統的核心計算模塊。實時數據處理引擎處理Kafka中獲取的實時數據以及EverQuotes中的實時行情數據,可以採用Apache Storm流數據處理引擎,也可採用Apache Spark Streaming處理;非實時批處理引擎定時從上游各關係型數據庫中抽取數據並按MOT規則計算。數據處理層加工出各MOT點待發送的消息內容。


數據層為MOT系統的數據存儲,包括內存緩存以及硬盤持久化存儲,採用Redis數據緩存、Kafka數據緩存以及Oracle持久化存儲,同時,採用數據庫延遲寫技術的數據都會直接在日誌中存儲,避免數據丟失。我們在部署時將Redis、Kafka及Oracle都做了集群部署,單臺故障對系統沒有影響。
業務處理層為數據處理層提供基礎配置和緩存數據支持,對數據處理層的結果做後續處理,並對外提供查詢。業務部門可以在此對各MOT點的參數進行配置,比較靈活的配置MOT點發送渠道話術以及計算規則,查詢歷史發送情況。後臺管理員也可以在業務處理層做任務配置,增加新的MOT點,以及檢查各模塊運行情況。

穩定高效MOT通知系統建設的實現與探討

圖1 MOT結構圖

2.2數據處理層主體模塊

2.2.1 實時數據處理引擎

Apache Storm、Apache Streaming、Flink等都是較為成熟的流處理框架,Apache Storm是一種側重於極低延遲的流處理框架,具備如下優點:
I. 數據處理時延小。消息到來之後即時處理,不是積攢到一批後統一處理;
II.具備較好的可靠性保障。處理出錯的消息會被再次處理,保障重要的消息通知不會因錯誤被丟棄;
III.框架支持熱發佈。新增的消息可熱發佈到服務器,不會影響生產環境正在執行的其它消息類型;
實時數據處理重在計算,其數據量相對較小,存儲不需要使用Hadoop等大數據存儲。經過壓力測試,三臺集群部署的Storm服務器,配置六個Worker,可以及時處理全市場的證券實時行情、根據行情加工出MOT事件(約1200條/秒),不會導致行情處理出現積壓,同時還能處理其它交易類實時MOT消息(約5000條/秒)。因此我們最終採用Storm作為實時數據處理引擎。Storm實時消費Kafka中的信息,以Bolt為基本處理單元對Kafka消息進行處理,每個Kafka消息由多個Bolt串行處理,每個Bolt都對消息做一層簡單加工處理,加工過程中需要與Redis緩存多次交互,從中獲取MOT點配置信息,以及客戶持倉、客戶經理掛接關係、客戶基本信息等基礎數據,同時,將需要存儲到文件系統及數據庫的數據寫入Redis緩存,由緩存數據維護模塊將數據維護進數據庫及文件系統。Bolt加工出最終需對客戶及客戶經理提醒的信息內容,寫入待發送消息隊列緩存,由消息發送引擎處理併發送。Storm的處理結構如圖2所示。


穩定高效MOT通知系統建設的實現與探討

圖2 實時數據處理結構圖

為提高系統處理效率,Bolt中的處理邏輯僅與緩存交互,全內存操作,不直接讀寫硬盤,且將數據流量大的Topic消息在Kafka中做分區存儲,提高消息處理的並行度。例如每日在開市集合競價和閉市集合競價期間都會產生大量的客戶委託失敗消息,我們將此消息在Kafka中分成四個分區,開四個線程同時處理可以確保提醒消息在3秒內推送出去(含調用下游通道發送時間)。同時,為確保系統穩定,在部署時需將Storm集群多機部署,處理單元異常後自動遷移至其它服務器。

2.2.2非實時批處理引擎

非實時處理引擎根據任務配置表定時執行任務,從包括交易系統在內的各上游數據庫抽取數據並按非實時MOT點規則進行計算,計算之後將加工的信息存放進待發送消息隊列,由消息發送引擎處理併發送。非實時批處理引擎的數據處理流程如圖3所示。

穩定高效MOT通知系統建設的實現與探討

圖3 非實時批處理流程圖

在設計非實時任務時,優先導入基礎數據,加工出基礎數據指標表,再同時並行多個任務計算非實時MOT點。各事件計算均通過中間表存儲,計算完畢寫待發送消息隊列及數據庫,避免多個任務同時操作數據庫某張表造成死鎖。

2.3業務處理層主體模塊

業務處理模塊為實時數據處理引擎及非實時批處理引擎提供服務,其中XDATA管理模塊管理ETL數據抽取配置,按照設定時間判定上游數據是否已準備好並執行對應的ETL配置,將數據從上游各數據庫抽取到MOT本地數據庫,設計時儘可能的增量獲取數據以減輕數據庫壓力。
消息發送引擎從待發送消息隊列獲取數據,根據消息類型調用不同的API接口發送,將信息推送至客戶短信、手機APP渠道、微信公眾號、通達信、同花順、智能語音提醒等渠道,對員工支持微信企業號、郵件、CRM等渠道。對於未發送的消息優先調用各下游渠道的批量API接口,並採用多線程處理以提高效率,消息發送引擎支持分佈式部署,在發送壓力較大時可增加部署擴大發送能力。


緩存數據維護模塊負責更新Redis中的緩存數據,每日在XDATA管理模塊採集完上游數據之後將客戶持倉、客戶基本信息、客戶與員工掛接關係等基礎數據更新至緩存,同時,實時數據處理引擎將需要寫硬盤的數據都放在redis緩存,例如從Kafka中消費的源消息內容、給客戶的短信發送內容、給員工推送的企業微信內容等,緩存數據維護模塊負責將這部分數據保存至硬盤做持久化存儲。系統支持界面操作手工刷新某一類型數據緩存,手工更新的數據可通過界面操作刷新至緩存;
事件配置模塊配置各MOT事件的詳細參數,包括MOT點的運行時間段,員工自定義的參數、事件觸達到員工及客戶的發送模板等,配置的事件信息將同步更新緩存。實時數據處理引擎及非實時批處理引擎依據此配置計算各MOT點事件,事件配置界面如圖4所示。每個MOT點支持員工做參數個性化配置以及發送模板配置,其配置的參數僅對員工本人名下的客戶有效,如圖5及圖6所示。

穩定高效MOT通知系統建設的實現與探討

圖4 實時MOT點配置圖

穩定高效MOT通知系統建設的實現與探討

圖5 實時MOT點參數配置圖

穩定高效MOT通知系統建設的實現與探討

圖6 發送模板配置圖

權限控制模塊管理用戶操作MOT系統的權限,部分特別重要的MOT點例如客戶強制平倉,均由開放權限的業務部門手工驗證和發送;報表模塊提供列表查詢及圖表查詢功能,方便員工查詢到自己名下客戶曾收到的信息,分支機構可查詢到本部門客戶的信息送達情況。

3.系統應用

目前中信建投實時與非實時MOT系統在實現此架構的基礎上共運行MOT點380個,涵蓋普通賬戶業務、兩融業務、股票質押、行權融資等各類業務,日均給客戶及員工推送信息約五十萬條,實時數據處理從觸發到送達的平均時延在秒級別,初步驗證了架構的有效性與實用性。
為確保信息推送的準確性及實時性,儘可能降低發送錯誤,MOT系統配置了一系列的運營保障措施:各MOT點單獨設置發送開關,試運營階段關閉開關,驗證無誤後再打開開關放開發送;每個MOT點單獨設置發送週期,在特定時間內不給同一發送對象發送相同內容;對於超過設定時限的實時MOT點信息不再發送;同時,對架構設定一系列的監控措施,日誌中出現異常、ZooKeeper、Redis出現異常、kafka消費慢及時延高時及時報警,以便快速處理錯誤。另外,從兩個方面推進系統建設可有效降低MOT系統報錯的概率:一是推進上游建設統一的資訊中心,由資訊中心對各資訊數據源數據比對,確保資訊數據質量;二是推進上游數據倉庫的完善,避免因直接對接各交易系統導致的頻繁修改。

4.結論與展望

MOT作為客戶通知與客戶服務工作的重要工具,主要需要做到配置靈活、觸達客戶及員工準確及時、運行穩定。業務部門可以靈活調整事件計算參數,配置發送渠道及發送話術,在對客戶服務的同時也能進行營銷,不僅提升客戶滿意度,還能在客戶服務的同時有針對性的推薦產品。後續我們將與業務部門繼續合作擴大MOT點覆蓋範圍,同時對已經運行的MOT點加強運營分析,分析各MOT點運行效果,並以運行效果數據為依據對現有的MOT點進行調整,將MOT賦能業務部門的效果最大化。


分享到:


相關文章: