如何在真实的财务应用程序中集成LMAX

时间:2012-02-22 01:32:27

标签: java latency throughput disruptor-pattern

我也在考虑在我们的应用程序中集成disruptor模式。在开始使用破坏者

之前,我对一些事情有点不确定
  1. 我有3个生成器,主要是一个反序列化请求的FIX线程。另一个线索随着市场的变化不断修改订单价格。此外,我们还有一个线程负责对从GUI应用程序发送的请求进行反序列化。所有三个线程当前都写入阻塞队列(因此​​我们在队列中看到很多争用)
  2. 破坏者谈论单一作家原则,从我所读到的那种方法来说,最好的方法。有什么方法可以让上面三个线程服从单一的作者原则吗?
  3. 同样在典型的请求/响应应用程序中,特别是在我们的情况下,我们在内存缓存中存在争用,因为我们需要在使用响应更新缓存时锁定缓存,同时可能会发生相同的请求订购。我们如何通过破坏者处理这个问题,即如何对特定请求进行响应?如果是的话,我可以消除缓存上的锁吗?
  4. 任何建议/指示都将受到高度赞赏。我们目前正在使用Java 1.6

1 个答案:

答案 0 :(得分:1)

我是distrptor的新手,我试图了解尽可能多的用例。我试着回答你的问题。

  1. 是的,Disruptor可用于对多个来电进行排序 生产者。据我所知,所有3个线程都尝试更新状态 共享对象并且一个消费者对共享对象采取必要的操作。在内部,您可以根据职责将单个使用者委托调用到相应的单线程处理程序。

  2. Disruptor正是这样做的。它对这些调用进行排序 状态一次只能由一个线程访问。如果要调用事件处理程序的特定顺序,请设置内存屏障。 Disruptor的最新版本有一个DSL,可让您轻松设置订单。

  3. 可以通过Disruptor抽象和访问缓存。一次,只有一个 因为所有的调用,Reader或Writer都可以访问缓存 缓存是顺序的。