Rxjs 中频交易系统的干扰器与反应式体系结构

Rxjs 中频交易系统的干扰器与反应式体系结构,rxjs,reactive,disruptor-pattern,rx.net,lmax,Rxjs,Reactive,Disruptor Pattern,Rx.net,Lmax,我正在尝试为我正在开发的中频交易系统选择合适的体系结构。目前,我从Web套接字或Rest接收消息,并在那里处理它们。有时它包括IO操作(即额外的rest请求),所以它的工作速度非常慢,我想所有其他消息都在WebSocket客户端的实现中得到缓冲。这种幼稚的方法看起来不太具有可扩展性 我一直在阅读处理交易消息的成熟体系结构,目前,我的选择范围已缩小到干扰程序和反应式编程。我想征求你的意见哪一个是更好的选择。具体而言,我关注两种情况: 消息处理程序之间的逻辑依赖关系。当我连接到一个特定的交易所时,

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


我一直在阅读处理交易消息的成熟体系结构,目前,我的选择范围已缩小到干扰程序和反应式编程。我想征求你的意见哪一个是更好的选择。具体而言,我关注两种情况:

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

  • 我想你应该看看。它的设计非常类似于Disruptor,您可以使用不同的配置在多个主题中分割消息。取决于您喜欢低延迟还是高吞吐量。它还支持动态压缩消息,以减少带宽使用,或者允许您将一个主题内的消息拆分到多个分区中,每个分区可能托管在不同的计算机上。这对于负载平衡非常有用。 当然,复制是受支持的,因此如果您的一台机器崩溃,系统将保持正常工作

    要阅读和处理卡夫卡消息,可以使用多种模式。默认情况下(至少在使用C++ LabdKaFaClient)时,允许您进行轮询,但是您可以很容易地在上面设置基于回调的系统。您也可以使用反应式系统,它非常自然地映射到Kafka所拥有的主题/分区概念

    总之:

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


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

    我强烈建议对这两个原型进行模拟。纯粹从stackoverflow的答案(也就是“一定要选择X”)来驱动应用程序的架构是很高的风险的。