gpt4 book ai didi

rxjs - 中频交易系统的 Disruptor 与 Reactive 架构

转载 作者:行者123 更新时间:2023-12-01 17:11:34 24 4
gpt4 key购买 nike

我正在尝试为我正在开发的中频交易系统选择合适的架构。目前,我从 Web Socket 或 Rest 接收消息并在那里处理它们。有时它包括 IO 操作(即额外的休息请求),因此它的工作速度非常慢,我认为所有其他消息都在 Web Socket 客户端的实现中进行缓冲。这种幼稚的方法看起来不太可扩展。

<小时/>

我一直在研究处理交易消息的成熟架构,目前,我的选择范围已缩小到 Disruptor 和 Reactive 编程。我想请教一下您的建议,哪一个是更好的选择。具体来说,我担心两种情况:

  1. 消息处理程序之间的逻辑依赖关系。当我连接到特定交易所时,我需要接收余额和未结订单,然后才能处理交易消息并根据它们下订单。在我看来,响应式是处理这种需要流量控制的情况的更好方法。这是 Disruptor 的问题吗?
  2. 长时间运行的消息处理程序。消息处理程序应该尽可能快(不要阻止以下消息),但是如果我需要发出(比方说)其余请求来创建订单作为消息处理程序的一部分,正确的方法是什么?

最佳答案

我认为你应该看看Apache's Kafka 。它的设计与 Disruptor 非常相似,您可以使用不同的配置将消息拆分到多个主题中。取决于您喜欢低延迟还是高吞吐量。它还提供对动态压缩消息的支持,以减少带宽使用,或者允许您将一个主题内的消息拆分到多个分区中,每个分区都可以托管在不同的计算机上。这对于负载平衡很有用。当然,支持复制,所以如果你的一台机器崩溃了,系统将继续正常工作。

要读取和处理 Kafka 消息,您可以使用多种模式。默认设置(至少在使用 C++ librdkafka 客户端时)是让您进行轮询,但您可以在此基础上轻松设置基于回调的系统。您也可以使用响应式(Reactive)系统,它非常自然地映射到 Kafka 所具有的主题/分区的概念。

总结:

为了处理您的 (1) 场景,您可以根据紧急程度将消息拆分到不同的主题上,并让更高优先级的线程处理更重要的消息(并且还设置 kafka 以减少这些主题上的延迟)

为了处理您的 (2) 场景,librdkafka (C++) 提供了一种在您的应用程序 catch 时暂时暂停主题的方法。

关于rxjs - 中频交易系统的 Disruptor 与 Reactive 架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49100064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com