当前位置:首页 > 科技 > 业界 > 数字动能发布量化金融C++RPC框架

数字动能发布量化金融C++RPC框架

发布时间:2019-08-02 12:32:56 | 来源:未知
在发布投研投顾一体化产品及整体解决方案后,数字动能在量化金融领域的技术积累基础上,发布其完全自主研发,可实现多业务模块间高速稳定通讯的C++RPC分布式通讯框架 xRPC。xRPC是国内首个面向量化金融领域,基于C++的RPC通讯框架,可广泛应用于金融领域有高算力

  在发布“投研投顾一体化”产品及整体解决方案后,数字动能在量化金融领域的技术积累基础上,发布其完全自主研发,可实现多业务模块间高速稳定通讯的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分布式通讯框架落地,意味其“投研投顾一体化”产品及方案将从围绕产品的方案实施,向投研投顾集中业务中台的战略转变。拥有一个分布式通讯框架技术,是衡量一个金融科技公司是否掌握业务(技术)中台核心技术的关键。数字动能已拥有可让多业务间可高速稳定进行通讯的业务中台核心技术。

  想要了解更多的关于xRPC的技术细节,可以通过以下方式联系我们获取:

  电话:400-1860-552

  邮箱:Contact@bitpower.com.cm