案例实践 | 韩国 AI 金融公司 Qraft 借助 Pulsar 打造超低延迟交易系统

2022/08/18 18:58
阅读数 70

文章摘要

韩国人工智能金融科技公司 Qraft Technologies, Inc.(简称“Qraft”)寻求具有高吞吐和低延迟特性的流系统解决方案来支持其 AI 产品业务。在对比测试 Kafka 和 Pulsar 后,Qraft 发现 Apache Kafka 无法提供其产品所需的延迟,最终选择在其微服务架构中应用 Pulsar 管理分布式事务。

背景介绍

人工智能金融科技公司 Qraft 成立于 2016 年,总部位于首尔,其业务主要为各种机构客户提供创新性人工智能解决方案,于 2022 年初获得软银超过 1 亿美元的投资。目前,Qraft 运营着四只在纽约证券交易所上市的高 AUM(Asset Under Management,资产管理规模)的人工智能驱动型 ETF(Exchange-Traded Fund,交易型开放式指数基金)。

Qraft 开发并运行基于深度学习的算法,可用于提供投资组合权重信号,借助这些信号能在市场中获得阿尔法收益。借助其专有的人工智能引擎,Qraft 还提供涵盖数据处理、投资策略发现、订单执行到投资分析与报告等方面的 B2B 人工智能解决方案。

Qraft 的旗舰产品是 AI eXEcution (AXE),这是一种基于深度强化学习的执行系统,旨在让所有的金融产品进行大规模交易时,可通过交易成本的最小化实现回报的最大化。AXE 通过从历史 Tick 数据中学习市场微观结构来确定最优策略,不仅包括个股的价格和交易量,还包括交易细节和限价单(LOB)数据。2018年,在 NVIDIA、新韩银行、KOSCOM 和普华永道主办的一场比赛中,来自知名券商的专业交易员与 AXE 竞争以更便宜的价格买入股票。最终,AXE 的表现远超人类交易员,赢得奖金。

韩国市场的 Tick 数据每天以数 GB 字节为单位生成,对延迟限制有严格的要求。Qraft 在对比研究消息流平台 Apache Pulsar 与 Apache Kafka 之后,决定使用 Apache Pulsar 来应用于 Qraft 的事件流机器学习模型。

搭建智能执行系统

在深入了解设计细节之前,首先需要明确两个财务术语:订单执行和市场影响。简单地说,订单执行是指购买或出售固定数量的某些证券的过程。而处理大量股票的过程自然会影响市场,导致价格波动。大订单的购买行为会产生高昂的交易成本。

因此,减少交易成本的最佳实践是将大订单分成许多小订单,这就是 AXE 发挥作用的地方。该人工智能驱动的订单执行系统可以从个股中学习 Tick 数据的模式,并探索出最佳策略,以不同的买/卖价下订单。

图 1. AXE vs 算法:学习如何降低交易成本

根据系统执行的特点,Qraft 设计的模型是一个事件流模型。主要要求如下:

  • • 高吞吐:系统必须能够处理交易所中发生的大量 Tick 数据,并且必须具有可扩展性,以便以相同的弹性伸缩能力实时下达多个订单。

  • • 低延迟:在寻找降低交易成本的有效策略的过程中,系统必须适应快速变化的市场。此外,该系统旨在减少微服务之间的网络通信数量。

  • • 高可用:该订单执行系统需要具备故障转移的能力,这至关重要。如果系统在某些故障后恢复能力受损,则会造成重大损失。

Pulsar vs Kafka:低延迟

Qraft 调研的第一个消息系统是 Apache Kafka。Kafka 是分布式发布-订阅消息系统,并具有一定的可扩展性,同时支持故障转移场景。但是其延迟没有达到 Qraft 的场景预期,主题必须可以大量水平扩容。当一个高吞吐量被强制进入消息队列时,理想的延迟应该小于 10 毫秒。

Qraft 继而调研 Apache Pulsar。根据 Pulsar vs Kafka 2021 基准报告,Pulsar 符合 Qraft 对事件流模型的要求。如下图所示,Pulsar 的 99 百分位延迟在 5 到 15 毫秒之间,而 Kafka 的延迟可高达几秒,并且很大程度上受主题数量、订阅和不同持久性保证的影响。

表 1:在不同订阅数量及不同持久性保证下,Pulsar 与 Kafka 端到端 P99 延迟的差异

表 2:在不同主题数量及不同持久性保证下,Pulsar 与 Kafka 端到端 P99 延迟差异

为了实现基准测试中 Apache Pulsar 的指标,Qraft 花了一个月的时间测试 Pulsar 并得出了理想的结果,发现所有的延迟都低于 10 毫秒。经过一些性能调整后,延迟可低于 5 毫秒。Qraft 希望未来通过 Pulsar 实现延迟小于 1 毫秒的目标。

除了低延迟之外,Pulsar 的其他性能也受到了 Qraft 团队的关注:

  • • 灵活性的功能:例如,有时用户要求在低延迟和一致性之间进行权衡,关闭 BookKeeper 日志功能即可满足此要求。

  • • 故障转移能力:Pulsar 成功地通过了故障转移测试。

  • • 多语言支持:Pulsar 官方支持 Java、Go、Python、C++ 和 C#,社区提供许多其他编程语言的自定义客户端。

Pulsar 落地 AI 金融系统

Qraft 使用 Saga 设计模式[1]来管理 AXE 微服务架构中的分布式事务。如下图所示,Pulsar 在以下所有交互中发挥着至关重要的作用。

图 2. Pulsar 如何与其他微服务交互

AXE 包括四种不同的微服务:

  • • Receiver 从交易所接收实时 Tick 数据,对其进行预处理,然后将其发送到 Pulsar,每个主题代表单个所有者权益。例如,可以理解为 Apple 是一个主题,亚马逊公司也是一个主题。

  • • Worker(manager)通过 Pulsar 接收 Endpoint 发送的数据,每个作业的主题由唯一的 ID 标识。在 AXE 算法生成操作后,数据会发送到 Pulsar。例如,“立刻以这个价格买入或卖出 10 股 Apple 股票”。这是支持 ML 执行算法的实际服务。

  • • Health-checker 负责从客户那里注册作业并将它们分配给一个 Worker 池。举例来说,一份作业可能是指从 9:30 到 16:00 执行 1000 股 Apple 股票。

  • • 端点(endpoint)通过 FIX(金融信息交换协议)或 AXE 原生通信协议与客户端连接。客户端收到的所有数据会分别发送给 Worker 或 Health-checker,端点,也会从 Worker 和 Health-checker 中提取数据发送给客户端。

从阅读源码到定制化

Qraft 团队在部署与应用 Pulsar 过程自己不断摸索,最终不仅受益于 Pulsar 源代码,而且还能够利用 Pulsar 的开源优势定制化 Pulsar 客户端。

  • • 阅读源代码:从源代码阅读开始着手解决问题无论对哪个技术团队来说,都是一个挑战。但 Qraft 通过阅读 Pulsar 源代码了解了 Pulsar 的设计、架构与实现,并借此成功部署 Pulsar。

  • • 开发定制化客户端:Qraft 团队需要一个 Rust 客户端,所以他们首先尝试使用 Pulsar-rs[2] 客户端。但是该客户端并没有完全满足 Qraft 的需求。于是 Qraft 在 fork 代码仓库后修改并维护客户端的自定义版本。目前,Qraft 团队已经将他们的版本与主版本融合,正在贡献到 master 分支。

总结

Apache Pulsar 是一个分布式、云原生消息流平台,具有高吞吐量、低延迟和高可用性。韩国人工智能金融科技公司 Qraft 在对 Kafka 与 Pulsar 延迟性的对比中,发现 Pulsar 在低延迟上的表现明显优于 Kafka。最终 Qraft 选择 Pulsar 搭建其 AI 驱动的订单执行系统为客户提供实时最佳策略。

Qraft 期待未来可以与 Pulsar 社区紧密合作,共同为 Pulsar 做贡献。

参考链接

  •  https://github.com/apache/pulsar

  • • https://github.com/wyyerd/pulsar-rs

  • • https://streamnative.io/en/blog/tech/2020-11-09-benchmark-pulsar-kafka-performance-report/

  • • https://medium.com/qraft/ai-execution-system-2cdcdb9728fc

  • • https://www.qraftec.com/ai-solutions-automated-trade-signals

  • • https://www.qraftec.com/s/Qraft_AI-Asset-Management-Report_Outlook_eng.pdf

  • • https://www.slideshare.net/ssuserf8ed47/qraft-optimized-order-execution-with-reinforcement-learning-seongminkim

  • • https://news.mtn.co.kr/v/2018112316363121644

  • • https://www.entrepreneur.com/article/367792

推荐阅读

引用链接

[1] Saga 设计模式: https://docs.microsoft.com/en-us/azure/architecture/reference-architectures/saga/saga
[2] Pulsar-rs: https://github.com/streamnative/pulsar-rs


       

本文分享自微信公众号 - StreamNative(StreamNative)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部