vlambda博客
学习文章列表

恒生高性能LDP,如何把开发工具做到极致?

近年来,随着量化私募崛起,券商纷纷入场布局机构服务,高性能领域成为行业军备竞赛的高地。

在该领域,行业除了关注交易速度快、交易网络链接快、服务响应快、策略迭代快之外,也非常看重系统的健壮性和可持续性。

对此,恒生高性能LDP引入配套的开发工具,给客户带来不止于快的体验。


自研开发工具的探索之路

2008年,恒生在自研开发工具上的探索和实践就已经开始了。
恒生第一代自研开发工具是基于当时最流行的开发工具框架eclipse进行二次开发,目标客户则是基于恒生cres中间件进行业务开发的开发人员。
在开发工具上实现的元数据规范大大降低了恒生业务系统间交互接口描述的一致性问题,也降低了产品间接口调用的沟通成本,被沿用至今。
此外,从开发工具开始,业务开发领域引入了“伪代码”的概念,现在普遍称之为领域特定语言。开发人员只需要编写一些伪代码块,开发工具便会调用伪代码解析引擎自动生成源代码。这样,就能让恒生的业务开发人员更专注于业务,在一定程度上也降低了对业务开发人员的技术门槛。
当然,开发工具不仅仅是一个编码工具,更是一个软件设计工具。它包括了接口设计、数据库设计等功能,为之后恒生自研开发工具的发展道路奠定了基础。 为了满足不同业务场景、不同开发语言下也可以进行快速开发的需求,恒生先后研发了JRES工具、XRES工具、CRES工具、UFT工具、基于JRESCloud的JRES工具,为恒生的业务系统开发加码助力。
这些开发工具大多是基于eclipse平台进行二次开发,eclipse是基于OSGI规范开发的框架和平台。由于eclipse插件化做得很彻底,可定制性也极高,因此也带来了一些问题,如插件一多总体运行速度就会被拖慢,稳定性也随之降低。
因此在目前的低延时开发工具上,我们采用了一种既轻量化又不缺乏高定制性的方案来解决这一矛盾。
 

贴合需求而生的Theia

2020年,高性能LDP(低延时分布式开发平台)研发完成。
基于高性能LDP开发的业务系统大多都使用了被称为宇宙第一IDE的visual studio作为其代码开发工具。毋庸置疑,visual studio是当前最好用的C++开发工具,其用户体验设计也是一流水准。但是,恒生业务产品开发多年积累下来的元数据标准以及LDP平台本身的特性却无法体现在这些第三方的开发工具中。
为了更好地贴合业务系统的开发习惯和规范,为了更合理地发挥LDP的特性,打造一款可以满足个性化定制需求的、适用于基于LDP业务系统开发的IDE的需求愈发强烈。
在低延时开发工具预研初期,我们对工具二次开发平台的选型也进行了深入的比较和分析,包括从易用性、性能、可定制性、开发语言、可移植性等各个维度的对比。
最终,一个叫Theia的IDE平台脱颖而出。
Theia由非营利性的 Eclipse 基金会主导,宣称是 Visual Studio Code的真正开源替代方案。与VSCode类似,它使用Monaco Editor支持 Language Server Protocol(LSP)和 Debug Adapter Protocol(DAP)。由于Theia提供了大部分VSCode插件的API,因此原生支持VSCode的插件。
此外,Theia还采用了前端的技术栈(TypeScript、HTML、CSS)进行开发,因此可同时支持云端和桌面端。作为云端IDE时,Theia分为两个进程运行,分别为前端的浏览器和后端的远程服务器,两者通过WebSocket 的 JSON-RPC 消息进行通信;作为桌面端IDE时,前端和后端都在本地Electron中运行。由于Theia自身的定位是IDE框架,本身的架构很灵活,扩展性也比VSCode高很多,因此开发者可以根据自己的需求构建出高定制化的IDE。目前国内外也有一些采用Theia作为底座进行定制化开发打造的IDE,如华为的Clould IDE,ARM的开发工具等。
恒生高性能LDP,如何把开发工具做到极致?
在经历了恒生自研的一代又一代的开发工具之后,低延时开发工具又该如何定位呢?
低延时开发工具的需求是随着LDP而来,LDP的应用场景是高性能的业务场景,因此基于低延时开发工具之上的业务自然是贴合高性能业务地需求展开。
越抽象的描述往往越能包罗万象,但越具象的描述却能更贴近事物本身。高性能业务开发既要考虑贴近每个场景的具象实现,又要从复用性和开发效率上出发考虑公共组件封装。
因此,LDP和低延时开发工具都需要在极致性能和开发效率上找到相对的平衡点。
 

精髓的延续

如今,我们抽取历代恒生开发工具中的精华部分,结合LDP自身特性,规划出了低延时开发工具如下功能特性:
元数据管理
元数据规范作为恒生多年金融业务开发积累下的精华部分,将在低延时开发工具中进行沿用并推陈出新。其中包括了标准字段、数据字典、标准错误号等一系列构建业务系统所需的标准数据,为业务系统的开发奠定基石。
低延时开发工具将保留原有恒生开发工具中的元数据管理模块,保证低延时业务开发的标准性和规范性,并将支持与公司的资源管控平台进行对接和同步,通过资源管控平台的审批流程规范元数据管理,从而提升元数据管理的效率。
接口管理
接口作为对接外部系统和客户端系统的关键部分,与内部函数相比,需要更严格的规范和管控。低延时开发工具中,可以根据规范接口的功能号、输入输出参数、报错参数、接口版本等基本信息生成一些适配LDP的、固定形式的代码,如输入参数解包和输出参数的打包代码。与元数据一样,接口也支持提交到公司资源管控平台进行统一管控,方便各个业务系统间的对接。
代码管理
在低延时开发工具中,原有的“伪代码体系”中的一些缺陷将被遗弃,并使用snippet取而代之。这种自定义代码模板的方式可以认为是伪代码宏的升级版本,适用场景将更加细化,场景覆盖将更加全面,开发人员可以随时自定义自己的snippet来满足所需业务场景。这种方式既能提高开发效率,又能通过灵活性避免伪代码宏在多样化场景下生成同样的代码问题,提高代码性能。
当然,低延时开发工具代码编辑器作为一个语言级别的编辑器,支持代码提示、自动补全、跳转、语法检查等通用功能。除此之外,编辑器将结合LDP自身的特点进行扩展,可支持适用LDP的代码分析和检查。
远程调试
由于低延时业务系统使用C++语言进行开发,最终的运行环境将会在Linux服务器中,而现有绝大部分的开发人员习惯在本地windows系统中进行开发,因此,远程调试功能将是一款优秀的C++开发工具所必须具备的功能点之一。
低延时开发工具支持将本地windows下编写的代码上传到远程linux服务器中进行编译、运行和调试。通过使用gdb调试协议与远程服务器进行交互,将堆栈信息、断点信息等展现在本地低延时开发工具中,让业务开发人员无需关心gdb调试命令,降低代码调试门槛。
单元测试
单元测试是一项用来对最小的可测试单元来进行正确性检验的测试工作。低延时开发工具支持在开发期进行单元测试管理和维护,它通过结合gtest测试框架将开发人员输入的测试用例生成单元测试代码,减少开发人员编写测试用例代码的工作量。
 

多维度发展

从2008年到现在,恒生在自研开发工具的道路上已经走过了第一个10年。我们相信还有第二个,甚至第三个10年。
恒生高性能LDP,如何把开发工具做到极致?
近几年,“低码平台”的概念热度越来越高。从广义上来说,之前恒生所有自研开发工具都可以称为低代码工具。目前的低代码平台可以具备MADP(移动应用开发平台)、aPaaS(应用平台即服务)、BPM(业务流程管理)能力,但对于低延时业务开发来说,低代码平台的适用性可能没那么强。
首先,描述程序最好的方式就是程序代码本身,基于LDP的业务系统属于后台服务从而程序逻辑比较复杂,现有的低代码平台无法完整描述复杂而又多变的程序逻辑。
其次,高性能的程序往往需要开发人员斟酌每一行代码,稍有不慎便会导致性能大幅度下降,通过现有低代码平台配置或者拖拉组件的方式拼凑的代码性能往往不能满足要求。
最后,低代码平台对于开发调试并不友好。对开发者来说它是一个黑盒,屏蔽了内部实现细节,万一出现Bug或者性能问题需要调试,开发人员将无从下手。
当然,有些低代码平台的特性还是值得低延时开发工具去借鉴和学习的,或许未来低代码平台发展到足够强大时,高性能业务系统的开发也可以通过低代码平台来实现。
因此, 目前我们致力于研发专门满足高性能业务需求的低延时系统开发工具 ,未来它的方向可以从以下几个方面来说:
智能化
开发工具的智能化是降低软件开发难度、提升软件开发效率、增强软件稳定性的必经之路。未来低延时系统开发工具将具备更强的模糊信息处理能力,如强大的代码补全功能,精确的代码分析检查功能以及更加灵活的代码生成模式。
要实现这些更“聪明”的功能,需要通过结合机器学习、大数据分析等技术,将复杂多样的业务场景代码进行分析和归类,总结出各类场景中的固定流程和模式,以类似代码模板或者代码复用的方式嵌入到工具中,作为开发工具代码补全、代码检查和生成代码的依据。
云化
在线开发工具将是云原生时代开发工具发展的趋势之一。低延时开发工具将结合容器化技术支持云端开发,开发者只需要在浏览器上就可以进行在线开发、编译和运行,无需关心开发环境配置。
另外,我们将建立一个在线知识库,开发人员可以随时贡献自己的业务代码片段。使用这种知识共享的方式,开发人员可以通过参考类似业务场景的代码片段来实现自己的业务场景。
专业化
作为专用于高性能系统的开发工具,保证业务代码又快又好需要始终放在第一位。低延时开发工具将通过结合静态代码分析工具,扩展一些适用于高性能代码分析和检查的规则。除此之外,低延时开发工具将结合CI/CD技术和动态代码分析技术,在测试期发现代码隐藏Bug,提升代码质量。


往期推荐