【核心技术】一个人能做出什么开源项目?
董可人/CEO
功夫核心库(https://libkungfu.cc/)最早是做为极速量化交易系统来开发的,多年来不断演进,现在已经成为一个完整的极速低延迟计算框架。我们在2017年发布这个项目的时候已经是团队化运作了,但是追忆起点,确实是从一个人的想法开始的。
十几年以前,我在高频量化交易行业从事一线开发工作的时候,发现这个行业里对于软件计算延迟有一种极致的追求,甚至远超其他包括互联网在内的科技行业。同时由于行业内高强度的博弈竞争性质,产品研发普遍是一种封闭化的状态,和开源是不搭边的。在我的工作里,有一部分关键的内容是研究计算机系统内如何实现最快的进程/线程间通信,当时业内比较主流的做法是通过共享内存+CPU轮询的形式实现一种零拷贝的方案,这样可以避免因为 kernel 上下文切换以及拷贝操作带来的性能损耗,也能更好的发挥现代硬件体系下多核架构的优势。
而当把这种思路实现在 mmap 这个方案上,借助于 mmap 的异步持久化能力,还会带来一种几乎零成本的时空转换能力,把系统内复杂的状态机变化简化为一种可回放的“纯函数”式特性。更进一步的,因为具备了数据持久化能力,这个方案某种程度上可以视为一种超低延迟的内存数据库,如果我们能够给其增加必要的查询能力,甚至可以不再局限在量化交易领域,从而具备某种普适性的可能性。
做为一个软件工程师,我当时非常希望能把这种技术进行产品化,这样在日后的工作中,就可以不用再反复的造轮子,并且我始终相信一个有大量的用户使用的开放方案,从长期来讲肯定会远远好过封闭式项目。而“极速低延迟通信”、“零拷贝”、“时空转换”这几个特性叠加的产品,确实是在我已知范围内世界上不曾存在过的,做这样一个原创性极强的产品,也非常的让人兴奋。
不过,在一开始我就希望能够将这个项目做成几十年生命周期的产品,这就必须考虑到持续的运营和维护成本;如果项目生命周期比较短,不需要考虑后续的升级和维护,那么一个人可以做到很多事情,从前端到后端,App或是Server都没问题;但对于长生命周期的项目,“一个人”这种形式就很难维系了,因为人生总是充满变化,靠个人长期稳定输出代码是非常困难的。
因此,从一开始,我们就决定了一定是团队化的运作,并且按照极高的工业级软件的标准来进行设计和开发。在“功夫”还不叫“功夫”的时候,我曾经手写过一个简陋的原型,但很快就开始进行团队组建工作,当“功夫”在2017年正式立项发布时,我最初的角色主要是提供架构设计,编码工作由其他的小伙伴来完成,这也是大家最早看到的“功夫v1.0”版本的形态。
随后人生的果然变化如期而至,早期负责开发的小伙伴去做了别的工作,原有的代码逐渐腐烂难以维护;并且在1.0运营期间,我们也收获了很多经验和用户反馈,由于1.0仅仅具备 Linux 后台服务的形式,上手门槛非常高,很不利于推广,我在2019年进行了一次重构,也重新回到一线开发岗位。这次除了核心代码的全面优化,最重要的决定在于将核心服务进程和GUI交互进行了整合设计,使产品既能后台运行在服务器,也能运行在个人电脑,并做了跨平台移植,这样“功夫v2.0”就成了一个能够全平台(Win/Mac/Linux)运行的自带GUI的完整产品。
如今看来,当初的决定非常正确,跨平台+GUI的易用性,带来了用户规模的大幅提升,很多原来无法服务的场景也一下子激活了。今天我们的产品已经在很多专业的金融交易机构部署使用,同时也有很多个人用户在自己的量化交易中做为主要的工具软件。
在开源方面,我们也一直在坚持自己的风格。和很多人对开源的理解不太一样,我们从一开始就很清楚,这样一个专业性极强的产品,不太可能通过开源协作的形式来补强产品;工业级软件,用户的要求和使用都极其苛刻,稍有不满就不会选择这个产品,在这种情况下,很难开放式的把不了解的第三方代码融合进产品。所以我们一直以来采取的都是“代码定期开放”+“封闭自主开发”的方式,来确保产品质量稳定可靠。
同时,我们也一直相信,优秀的软件绝不仅仅是几行酷炫代码或是某一次的编译产物,而必须具备持续的版本升级和改进优化。这就要求软件开发流程必须具备工业化的特征,版本发布绝不能是拍脑袋打标签,必须有严格的提测和审核流程;每次的版本发布也必须能够精确定位到可重复构建(reproducable build)的代码版本上;对于大版本的升级维护也必须给到用户明确的时间规划。其实这些要求,放在世界范围内一点也不罕见,那些你所熟知的成熟产品(Python,NodeJS,LLVM)都能做得到,打开他们的网站,所有的信息必定都在该在的地方。内心深处,我们一直希望自己的产品能够达到和这些“前辈”们同样的水准,即便在某些时间阶段我们不得不慢下来仔细打磨自己的工作流程,也必须坚持向这些更高的目标前进。
今天,我们已经有了完整的产品支持生态,在功夫核心库(https://libkungfu.cc/)的网页上,你能找到所有已发布版本的详情页,每个版本的编译产物下载,已及按版本维护的文档。而且不止如此,在我们的官网 – 功夫量化,还有基于这个产品核心所架构的完整的在线数据计算服务,简单来说,正是得益于核心库的“时空转换”能力,我们最终能够以极低的成本把本来非常昂贵的量化金融数据处理变成易于使用的在线服务,从另一个角度证明核心库作为基础软件设施的真正生命力。
最后放上我们的公众号和微信群,欢迎对量化交易感兴趣的朋友关注,加入(微信搜索 功夫量化,关注后可扫码入群 ):