數(shù)字動能發(fā)布量化金融C++RPC框架

數(shù)字動能發(fā)布量化金融C++RPC框架

在發(fā)布“投研投顧一體化”產(chǎn)品及整體解決方案后,數(shù)字動能在量化金融領域的技術(shù)積累基礎上,發(fā)布其完全自主研發(fā),可實現(xiàn)多業(yè)務模塊間高速穩(wěn)定通訊的C++RPC分布式通訊框架 –xRPC。xRPC是國內(nèi)首個面向量化金融領域,基于C++的RPC通訊框架,可廣泛應用于金融領域有高算力、大數(shù)據(jù)傳輸需求的多業(yè)務間通訊場景,是金融行業(yè)實現(xiàn)集中式業(yè)務中臺,解決業(yè)務間互聯(lián)互通的核心通訊技術(shù)。

一、投研投顧一體化的多業(yè)務場景需要分布式通訊框架支持

數(shù)字動能自成立以來專注于量化技術(shù)在資產(chǎn)管理業(yè)務中的探索和實踐,利用金融工程+軟件工程為特點的量化技術(shù),數(shù)字動能先后陸續(xù)落地了量化策略交易終端AT、策略集中業(yè)務中臺iMOM和SMD指數(shù)分析系統(tǒng)等量化投研產(chǎn)品。業(yè)務涵蓋了量化投研生產(chǎn),研究治理,再到智能投顧手機端的整個投研投顧產(chǎn)品線,產(chǎn)品間既互相聯(lián)系,又互相獨立。結(jié)合自身經(jīng)驗積累,2017年,數(shù)字動能面向大資管業(yè)務提出“投研投顧一體化”整體解決方案,目前在券商、期貨和公募基金公司已經(jīng)陸續(xù)獲得應用案例。

數(shù)字動能基于量化科技的創(chuàng)新步伐并未停止,在實踐中,“投研投顧一體化”解決方案以產(chǎn)品為中心的設計模式將迎來更大的變革。針對投研投顧中的大量定制化、業(yè)務多樣、功能場景復雜的特點,解決方案產(chǎn)品間需要解決跨部門、跨業(yè)務、多場景業(yè)務整合和業(yè)務間數(shù)據(jù)通訊問題。要構(gòu)建好投研前端、管理中臺和業(yè)務轉(zhuǎn)化的投研投顧一體化解決方案,一個可以組合更靈活、業(yè)務細粒度更高、 開放性更強的投研集中業(yè)務平臺成為技術(shù)實現(xiàn)的難點。解決這些問題的首要關鍵技術(shù)在于,是否可以構(gòu)建出一套統(tǒng)一的通訊方式,既可以滿足業(yè)務/應用間的通訊需要,又要兼顧金融行業(yè)高速穩(wěn)定特性的通訊框架。在定制類投研業(yè)務模塊的開發(fā)過程中,通過約定的分布式通訊協(xié)議,實現(xiàn)服務間高速通訊。業(yè)界普遍采用的RPC通訊方式成為了首選。

二、通用RPC框架介紹

Remote Prodecure Call是程序間的遠程調(diào)用的簡稱,業(yè)界目前普遍采用RPC實現(xiàn)程序間調(diào)用,一個標準的RPC調(diào)用過程如圖1所示:

數(shù)字動能發(fā)布量化金融C++RPC框架

  圖1

如圖1,兩個程序之間能夠通信的前提,必須要有一個服務發(fā)現(xiàn)機制。傳統(tǒng)的做法是雙方先約定好地址,在各個服務都提前知道對方地址的前提下實現(xiàn)通訊,這種方式叫靜態(tài)路由。靜態(tài)路由的通訊方式在一般情況下可以滿足簡單的程序間調(diào)用需求。但是隨著業(yè)務的發(fā)展,服務數(shù)量的增多讓靜態(tài)路由變得很難滿足需求,同時后臺服務有動態(tài)上下線的需求,靜態(tài)路由表更新不及時將導致一系列問題。為了解決靜態(tài)路由問題,大部分RPC框架引入了服務注冊中心來實現(xiàn)動態(tài)路由的功能。如下圖2所示:

數(shù)字動能發(fā)布量化金融C++RPC框架

圖2(注:此圖省略了序列化/反序列化,運行時管理層以及傳輸層的步驟)

動態(tài)路由改變了原來的應用方式,被調(diào)用方服務啟動的時候,先把自身的地址注冊到服務注冊中心。調(diào)用方發(fā)起RPC調(diào)用之前,先到服務注冊中心里面獲取被調(diào)用方的地址信息后才能發(fā)起RPC請求。

三、xRPC框架的提出

數(shù)字動能在解決投研投顧一體化解決方案中,一些特殊服務(如回測、高頻數(shù)據(jù)傳輸?shù)?由于信息傳輸頻繁,數(shù)據(jù)并發(fā)量大和信息傳遞種類繁多,可能會產(chǎn)生硬件資源或網(wǎng)絡資源消耗,通訊效能降低的情況。在實踐中,我們認為RPC框架還應有更多的改進空間,數(shù)字動能架構(gòu)組著手改進RPC通訊框架,以提升應用間的通訊效率,提高信息交換的穩(wěn)定性。

  四、xRPC的設計目的

  A、強量化金融(算力調(diào)度、大數(shù)據(jù)量傳輸)應用場景

  B、需要基于網(wǎng)絡層的高速數(shù)據(jù)傳輸支持

  C、帶數(shù)據(jù)可靠性校驗的穩(wěn)定通訊支持

  D、需要為服務/應用提供更高效的純異步并發(fā)調(diào)用

  E、增強RPC動態(tài)路由算法

xRPC的設計目的是為了更好的滿足量化業(yè)務場景的高算力、高穩(wěn)定性和極速傳輸需要的服務/應用間調(diào)用。通過對傳統(tǒng)的RPC通訊框架進行全新設計,xRPC對服務間的通訊穩(wěn)定性、可靠性和通訊性能進行了深度優(yōu)化。xRPC分布式框架協(xié)議是面向量化金融領域(特別是面向投研投顧的應用場景)的純異步高性能框架。

數(shù)字動能發(fā)布量化金融C++RPC框架

  xRPC的通訊方式示意圖

  五、xRPC框架的特點

1、xRPC自帶服務注冊中心和動態(tài)路由方式

和其他RPC框架不同,xRPC同時本地緩存有一份路由表。在應用服務啟動時,xPRC協(xié)議會要求應用服務把自身的所有服務信息以及網(wǎng)絡地址注冊到服務注冊中心里。發(fā)送請求時,如果本地路由的管理層沒有發(fā)現(xiàn)相應的服務地址信息,xRPC會根據(jù)協(xié)議約定,先到服務注冊中心獲取相應服務的地址信息,由本地路由管理層直接使用長連接到對方的路由管理層中,后面如果再次發(fā)送到同一個服務里面的時候,不再需要從服務注冊中心獲取, 并且雙方是保持連接的, 能夠直接感知對方的狀態(tài), 不需要再通過服務注冊中心, 這種方式同時也能夠很好的降低服務注冊中心的壓力。

2、xRPC全新設計的高性能序列化方法

根據(jù)量化金融的業(yè)務使用特點,把特定業(yè)務場景松耦合至多個服務間交互的直接代價就是增加了服務間通訊壓力,對服務間相互調(diào)用的性能要求變得極其苛刻。xPRC對RPC框架中的序列化方式進行全新設計重構(gòu),設計出了一個高性能的序列化與反序列化的方法,來滿足量化金融對性能要求極其苛刻的場景。

  xSerial:全新的高速RPC的序列化方法

  A、對數(shù)據(jù)類型的改進

xRPC的新序列化方法被稱為xSerial,xSerial目前除了支持基本類型之外, 還支持了list、set、map。xSerial在序列化之前,可以快速并且精確的計算出數(shù)據(jù)序列化后的所占用的內(nèi)存大小,提前申請好對應大小的內(nèi)存,避免了在序列化中既要序列化又要動態(tài)擴張內(nèi)存的動作所帶來的性能損失。xSerial的C++的使用方法如下:

數(shù)字動能發(fā)布量化金融C++RPC框架

B、對序列化解析器IDL的改進

在使用的便捷性上, 大部分序列化與反序列化的方法,都是先編寫一個IDL文件,通過IDL再生成各種語言的代碼。xSerial也有自己的IDL支持,但是做出了改進, xSerial的IDL語言將與對應的xRPC原生語言相融合。也就是說,如果xRPC是跑在C++上,xSerial將相應提供一個C++的語法解析器,自動去掃描C++的代碼,識別出要生成序列化的代碼,使用者無需再額外編寫IDL文件。目前xSerial的IDL支持原生Go,C#, JAVA,Matlab和Python。

  C、支持動態(tài)代碼序列化

xSerial除了支持靜態(tài)代碼的序列化方式之外,同時新增了動態(tài)代碼序列化的使用支持。在xRPC框架的序列化過程中,xSerial生成器在生成靜態(tài)代碼的時候,會同時生成對應的Json描述,這讓xRPC通訊過程中,任意第三方應用服務可以直接調(diào)用xSerial的Json描述,來對通訊數(shù)據(jù)進行動態(tài)的序列化與反序列化。

3、xRPC獨特的通訊層:接口和通訊方法松耦合設計

在通訊上和其他RPC框架不一樣,一般RPC框架的通訊方式都是具體且唯一的,同時一般RPC框架默認所有的應用都是獨立進程的。xRPC把通訊層抽象為接口,使得通訊變得更加靈活。在xRPC里面用戶只需定義接口,具體的通訊方式由底層自行決定。xRPC允許幾個應用部署在同一個進程中,并自動判斷應用是否同一個進程,選擇信息的傳輸是通過內(nèi)存交互還是網(wǎng)絡(xRPC如果走網(wǎng)絡通訊,將基于TCP)。這個設計使得量化金融的一些特定應用場景,如:對某幾個服務間的大量數(shù)據(jù)高速交換過程可完全避免網(wǎng)絡間的通訊消耗。

4、xRPC使用特點:請求發(fā)起只能基于調(diào)用框架

xRPC的調(diào)用和其他RPC的調(diào)用方式不一樣,xRPC的調(diào)用必須基于調(diào)用框架才能發(fā)起請求,將徹底避免常見的Callback Hell問題。通過一個列子,看看xRPC是如何解決這個問題的:

A、發(fā)送單個RPC請求

數(shù)字動能發(fā)布量化金融C++RPC框架

B、發(fā)送多個順序的RPC請求

數(shù)字動能發(fā)布量化金融C++RPC框架

從上圖可以看到(注:忽略Exception和Finally),發(fā)送了SayHello之后,在其返回函數(shù)Then里面,只要調(diào)用Next方法,并且傳入調(diào)用下一個RPC的請求的參數(shù),即可繼續(xù)發(fā)起下一個RPC請求,比如這里在調(diào)用了SayHello2,又在SayHello2的返回函數(shù)里面調(diào)用了SayHello3,這種編寫的方式使得很好的解決了CallBack Hell的問題,讓代碼的維護性更好。

C、 同時發(fā)送多個RPC請求

數(shù)字動能發(fā)布量化金融C++RPC框架

同時發(fā)送多個RPC請求,使用的調(diào)用框架是BPParallelRPC,這樣同時發(fā)送的三個請求,可以在Then函數(shù)里面,分別取出各個RPC的請求結(jié)果。

以上通過對xRPC使用的方法介紹,解釋了為什么必須通過調(diào)用框架來發(fā)起RPC請求,這樣RPC的定義只需要定義一次即可。后面使用只需要更換調(diào)用RPC的調(diào)用框架,而不需要去修改RPC的定義,同時每一個RPC請求都會注冊到RPC請求管理器當中,由其對RPC進行重傳、超時等管理。

  xRPC是唯一面向金融行業(yè)的純C++分布式RPC框架

六、為什么需要面向量化金融的分布式通訊框架

高速穩(wěn)定的分布式通訊框架是實現(xiàn)業(yè)務中臺的關鍵技術(shù)

業(yè)務中臺化,本質(zhì)是解決多個業(yè)務可以通過一個中臺在彼此間實現(xiàn)互聯(lián)互通。因此業(yè)務中臺的設計中,其首要考慮的核心問題是如何把多部門多場景的各類業(yè)務可迅速接入并實現(xiàn)相互間可進行通訊。解決這個問題的關鍵,是擁有一套穩(wěn)定高效的分布式通訊框架。國內(nèi)提供商用分布式框架解決方案的目前僅有國內(nèi)極少數(shù)幾家科技公司,而國內(nèi)提供面向金融行業(yè)的分布式框架更是少之又少,如螞蟻金服的SofaRPC分布式解決方案。SOFARPC 最早源于阿里內(nèi)部的 HSF,是近期螞蟻金服開源的一個高可擴展性、高性能、生產(chǎn)級的 Java RPC 框架。它致力于簡化應用之間的 RPC 調(diào)用,為應用提供方便透明、穩(wěn)定高效的點對點遠程服務調(diào)用方案。

數(shù)字動能發(fā)布的xRPC框架與SofaRPC相比,擁有更高效的執(zhí)行效能和更輕量更靈活的調(diào)用方法等特點。他根據(jù)量化金融傳輸要求進行特定場景設計,在動態(tài)路由、序列化方法和通訊層協(xié)議中進行了大量場景針對設計,是一個穩(wěn)定高速的C++ RPC框架。憑借數(shù)字動能在量化金融領域的技術(shù)積累,xRPC更適合應用于量化金融、投研投顧領域的高算力和海量數(shù)據(jù)傳輸場景,可實現(xiàn)在不同的業(yè)務,如:回測執(zhí)行、實時行情訂閱、金融數(shù)據(jù)存取、復雜金融指標計算,因子生產(chǎn)等服務間快速信息交換的需求。隨著數(shù)字動能自主研發(fā)的C++RPC分布式通訊框架落地,意味其“投研投顧一體化”產(chǎn)品及方案將從圍繞產(chǎn)品的方案實施,向投研投顧集中業(yè)務中臺的戰(zhàn)略轉(zhuǎn)變。擁有一個分布式通訊框架技術(shù),是衡量一個金融科技公司是否掌握業(yè)務(技術(shù))中臺核心技術(shù)的關鍵。數(shù)字動能已擁有可讓多業(yè)務間可高速穩(wěn)定進行通訊的業(yè)務中臺核心技術(shù)。

數(shù)字動能發(fā)布量化金融C++RPC框架

極客網(wǎng)企業(yè)會員

免責聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準確性及可靠性,但不保證有關資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責。本網(wǎng)站對有關資料所引致的錯誤、不確或遺漏,概不負任何法律責任。任何單位或個人認為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關文章源頭核實,溝通刪除相關內(nèi)容或斷開相關鏈接。

2019-08-01
數(shù)字動能發(fā)布量化金融C++RPC框架
在發(fā)布“投研投顧一體化”產(chǎn)品及整體解決方案后,數(shù)字動能在量化金融領域的技術(shù)積累基礎上,發(fā)布其完全自主研發(fā),可實現(xiàn)多業(yè)務模塊間高速穩(wěn)定通訊

長按掃碼 閱讀全文