南通颐猩文化传播有限公司

當(dāng)前位置:首頁 >  科技 >  IT業(yè)界 >  正文

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

 2019-08-01 16:57  來源: 互聯(lián)網(wǎng)   我來投稿 撤稿糾錯

  域名預(yù)訂/競價,好“米”不錯過

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

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

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

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

二、通用RPC框架介紹

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

圖1

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

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

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

三、xRPC框架的提出

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

四、xRPC的設(shè)計(jì)目的

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

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

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

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

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

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

xRPC的通訊方式示意圖

五、xRPC框架的特點(diǎn)

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

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

2、xRPC全新設(shè)計(jì)的高性能序列化方法

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

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

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

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

B、對序列化解析器IDL的改進(jìn)

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

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

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

3、xRPC獨(dú)特的通訊層:接口和通訊方法松耦合設(shè)計(jì)

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

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

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

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

B、發(fā)送多個順序的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的問題,讓代碼的維護(hù)性更好。

C、 同時發(fā)送多個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請求管理器當(dāng)中,由其對RPC進(jìn)行重傳、超時等管理。

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

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

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

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

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

想要了解更多的關(guān)于xRPC的技術(shù)細(xì)節(jié),可以通過以下方式聯(lián)系我們獲取:

電話:400-1860-552

郵箱:Contact@bitpower.com.cm

申請創(chuàng)業(yè)報道,分享創(chuàng)業(yè)好點(diǎn)子。點(diǎn)擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!

相關(guān)標(biāo)簽
金融

相關(guān)文章

熱門排行

信息推薦