在發布投研投顧一體化產品及整體解決方案后,數字動能在量化金融領域的技術積累基礎上,發布其完全自主研發,可實現多業務模塊間高速穩定通訊
在發布“投研投顧一體化”產品及整體解決方案后,數字動能在量化金融領域的技術積累基礎上,發布其完全自主研發,可實現多業務模塊間高速穩定通訊的C++RPC分布式通訊框架 –xRPC。xRPC是國內首個面向量化金融領域,基于C++的RPC通訊框架,可廣泛應用于金融領域有高算力、大數據傳輸需求的多業務間通訊場景,是金融行業實現集中式業務中臺,解決業務間互聯互通的核心通訊技術。
一、投研投顧一體化的多業務場景需要分布式通訊框架支持
數字動能自成立以來專注于量化技術在資產管理業務中的探索和實踐,利用金融工程+軟件工程為特點的量化技術,數字動能先后陸續落地了量化策略交易終端AT、策略集中業務中臺iMOM和SMD指數分析系統等量化投研產品。業務涵蓋了量化投研生產,研究治理,再到智能投顧手機端的整個投研投顧產品線,產品間既互相聯系,又互相獨立。結合自身經驗積累,2017年,數字動能面向大資管業務提出“投研投顧一體化”整體解決方案,目前在券商、期貨和公募基金公司已經陸續獲得應用案例。
數字動能基于量化科技的創新步伐并未停止,在實踐中,“投研投顧一體化”解決方案以產品為中心的設計模式將迎來更大的變革。針對投研投顧中的大量定制化、業務多樣、功能場景復雜的特點,解決方案產品間需要解決跨部門、跨業務、多場景業務整合和業務間數據通訊問題。要構建好投研前端、管理中臺和業務轉化的投研投顧一體化解決方案,一個可以組合更靈活、業務細粒度更高、 開放性更強的投研集中業務平臺成為技術實現的難點。解決這些問題的首要關鍵技術在于,是否可以構建出一套統一的通訊方式,既可以滿足業務/應用間的通訊需要,又要兼顧金融行業高速穩定特性的通訊框架。在定制類投研業務模塊的開發過程中,通過約定的分布式通訊協議,實現服務間高速通訊。業界普遍采用的RPC通訊方式成為了首選。
二、通用RPC框架介紹
Remote Prodecure Call是程序間的遠程調用的簡稱,業界目前普遍采用RPC實現程序間調用,一個標準的RPC調用過程如圖1所示:
圖1
如圖1,兩個程序之間能夠通信的前提,必須要有一個服務發現機制。傳統的做法是雙方先約定好地址,在各個服務都提前知道對方地址的前提下實現通訊,這種方式叫靜態路由。靜態路由的通訊方式在一般情況下可以滿足簡單的程序間調用需求。但是隨著業務的發展,服務數量的增多讓靜態路由變得很難滿足需求,同時后臺服務有動態上下線的需求,靜態路由表更新不及時將導致一系列問題。為了解決靜態路由問題,大部分RPC框架引入了服務注冊中心來實現動態路由的功能。如下圖2所示:
圖2(注:此圖省略了序列化/反序列化,運行時管理層以及傳輸層的步驟)
動態路由改變了原來的應用方式,被調用方服務啟動的時候,先把自身的地址注冊到服務注冊中心。調用方發起RPC調用之前,先到服務注冊中心里面獲取被調用方的地址信息后才能發起RPC請求。
三、xRPC框架的提出
數字動能在解決投研投顧一體化解決方案中,一些特殊服務(如回測、高頻數據傳輸等)由于信息傳輸頻繁,數據并發量大和信息傳遞種類繁多,可能會產生硬件資源或網絡資源消耗,通訊效能降低的情況。在實踐中,我們認為RPC框架還應有更多的改進空間,數字動能架構組著手改進RPC通訊框架,以提升應用間的通訊效率,提高信息交換的穩定性。
四、xRPC的設計目的
A、強量化金融(算力調度、大數據量傳輸)應用場景
B、需要基于網絡層的高速數據傳輸支持
C、帶數據可靠性校驗的穩定通訊支持
D、需要為服務/應用提供更高效的純異步并發調用
E、增強RPC動態路由算法
xRPC的設計目的是為了更好的滿足量化業務場景的高算力、高穩定性和極速傳輸需要的服務/應用間調用。通過對傳統的RPC通訊框架進行全新設計,xRPC對服務間的通訊穩定性、可靠性和通訊性能進行了深度優化。xRPC分布式框架協議是面向量化金融領域(特別是面向投研投顧的應用場景)的純異步高性能框架。
xRPC的通訊方式示意圖
五、xRPC框架的特點
1、xRPC自帶服務注冊中心和動態路由方式
和其他RPC框架不同,xRPC同時本地緩存有一份路由表。在應用服務啟動時,xPRC協議會要求應用服務把自身的所有服務信息以及網絡地址注冊到服務注冊中心里。發送請求時,如果本地路由的管理層沒有發現相應的服務地址信息,xRPC會根據協議約定,先到服務注冊中心獲取相應服務的地址信息,由本地路由管理層直接使用長連接到對方的路由管理層中,后面如果再次發送到同一個服務里面的時候,不再需要從服務注冊中心獲取, 并且雙方是保持連接的, 能夠直接感知對方的狀態, 不需要再通過服務注冊中心, 這種方式同時也能夠很好的降低服務注冊中心的壓力。
2、xRPC全新設計的高性能序列化方法
根據量化金融的業務使用特點,把特定業務場景松耦合至多個服務間交互的直接代價就是增加了服務間通訊壓力,對服務間相互調用的性能要求變得極其苛刻。xPRC對RPC框架中的序列化方式進行全新設計重構,設計出了一個高性能的序列化與反序列化的方法,來滿足量化金融對性能要求極其苛刻的場景。
xSerial:全新的高速RPC的序列化方法
A、對數據類型的改進
xRPC的新序列化方法被稱為xSerial,xSerial目前除了支持基本類型之外, 還支持了list、set、map。xSerial在序列化之前,可以快速并且精確的計算出數據序列化后的所占用的內存大小,提前申請好對應大小的內存,避免了在序列化中既要序列化又要動態擴張內存的動作所帶來的性能損失。xSerial的C++的使用方法如下:
B、對序列化解析器IDL的改進
在使用的便捷性上, 大部分序列化與反序列化的方法,都是先編寫一個IDL文件,通過IDL再生成各種語言的代碼。xSerial也有自己的IDL支持,但是做出了改進, xSerial的IDL語言將與對應的xRPC原生語言相融合。也就是說,如果xRPC是跑在C++上,xSerial將相應提供一個C++的語法解析器,自動去掃描C++的代碼,識別出要生成序列化的代碼,使用者無需再額外編寫IDL文件。目前xSerial的IDL支持原生Go,C#, JAVA,Matlab和Python。
C、支持動態代碼序列化
xSerial除了支持靜態代碼的序列化方式之外,同時新增了動態代碼序列化的使用支持。在xRPC框架的序列化過程中,xSerial生成器在生成靜態代碼的時候,會同時生成對應的Json描述,這讓xRPC通訊過程中,任意第三方應用服務可以直接調用xSerial的Json描述,來對通訊數據進行動態的序列化與反序列化。
3、xRPC獨特的通訊層:接口和通訊方法松耦合設計
在通訊上和其他RPC框架不一樣,一般RPC框架的通訊方式都是具體且唯一的,同時一般RPC框架默認所有的應用都是獨立進程的。xRPC把通訊層抽象為接口,使得通訊變得更加靈活。在xRPC里面用戶只需定義接口,具體的通訊方式由底層自行決定。xRPC允許幾個應用部署在同一個進程中,并自動判斷應用是否同一個進程,選擇信息的傳輸是通過內存交互還是網絡(xRPC如果走網絡通訊,將基于TCP)。這個設計使得量化金融的一些特定應用場景,如:對某幾個服務間的大量數據高速交換過程可完全避免網絡間的通訊消耗。
4、xRPC使用特點:請求發起只能基于調用框架
xRPC的調用和其他RPC的調用方式不一樣,xRPC的調用必須基于調用框架才能發起請求,將徹底避免常見的Callback Hell問題。通過一個列子,看看xRPC是如何解決這個問題的:
A、發送單個RPC請求
B、發送多個順序的RPC請求
從上圖可以看到(注:忽略Exception和Finally),發送了SayHello之后,在其返回函數Then里面,只要調用Next方法,并且傳入調用下一個RPC的請求的參數,即可繼續發起下一個RPC請求,比如這里在調用了SayHello2,又在SayHello2的返回函數里面調用了SayHello3,這種編寫的方式使得很好的解決了CallBack Hell的問題,讓代碼的維護性更好。
C、 同時發送多個RPC請求
同時發送多個RPC請求,使用的調用框架是BPParallelRPC,這樣同時發送的三個請求,可以在Then函數里面,分別取出各個RPC的請求結果。
以上通過對xRPC使用的方法介紹,解釋了為什么必須通過調用框架來發起RPC請求,這樣RPC的定義只需要定義一次即可。后面使用只需要更換調用RPC的調用框架,而不需要去修改RPC的定義,同時每一個RPC請求都會注冊到RPC請求管理器當中,由其對RPC進行重傳、超時等管理。
xRPC是唯一面向金融行業的純C++分布式RPC框架
六、為什么需要面向量化金融的分布式通訊框架
高速穩定的分布式通訊框架是實現業務中臺的關鍵技術
業務中臺化,本質是解決多個業務可以通過一個中臺在彼此間實現互聯互通。因此業務中臺的設計中,其首要考慮的核心問題是如何把多部門多場景的各類業務可迅速接入并實現相互間可進行通訊。解決這個問題的關鍵,是擁有一套穩定高效的分布式通訊框架。國內提供商用分布式框架解決方案的目前僅有國內極少數幾家科技公司,而國內提供面向金融行業的分布式框架更是少之又少,如螞蟻金服的SofaRPC分布式解決方案。SOFARPC 最早源于阿里內部的 HSF,是近期螞蟻金服開源的一個高可擴展性、高性能、生產級的 Java RPC 框架。它致力于簡化應用之間的 RPC 調用,為應用提供方便透明、穩定高效的點對點遠程服務調用方案。
數字動能發布的xRPC框架與SofaRPC相比,擁有更高效的執行效能和更輕量更靈活的調用方法等特點。他根據量化金融傳輸要求進行特定場景設計,在動態路由、序列化方法和通訊層協議中進行了大量場景針對設計,是一個穩定高速的C++ RPC框架。憑借數字動能在量化金融領域的技術積累,xRPC更適合應用于量化金融、投研投顧領域的高算力和海量數據傳輸場景,可實現在不同的業務,如:回測執行、實時行情訂閱、金融數據存取、復雜金融指標計算,因子生產等服務間快速信息交換的需求。隨著數字動能自主研發的C++RPC分布式通訊框架落地,意味其“投研投顧一體化”產品及方案將從圍繞產品的方案實施,向投研投顧集中業務中臺的戰略轉變。擁有一個分布式通訊框架技術,是衡量一個金融科技公司是否掌握業務(技術)中臺核心技術的關鍵。數字動能已擁有可讓多業務間可高速穩定進行通訊的業務中臺核心技術。
關鍵詞: