用于实时系统中最大吞吐量的并发框架

时间:2014-06-16 17:03:06

标签: java multithreading concurrency real-time

我正在使用“坚固”的实时系统(如果在截止日期之后提供服务,结果将无法使用),这需要最大的吞吐量和加载的稳健性。

有关我们系统的更多详细信息,我们正在处理电信消息。这些消息将经历几个不同的关注步骤。但是消息顺序非常重要。步骤如下:

  1. 从Redis内存数据库中查询内容
  2. 从另一个关系内存数据库中查询内容
  3. 一些业务逻辑计算处理
  4. 将数据更新到Oracle RDBMS
  5. 通过套接字向其他服务器发送消息
  6. 我们目前只在一台服务器上设置了一个带有分配器和8个处理单元(按顺序运行消息)的系统。在进行水平缩放之前,我们决定首先最大化每个单元的性能。

    我尝试了几种方法(我只通过前两步和一些数据收集逻辑传递消息):

    1. Proactor模式:通过我自己使用回调实现事件循环和高级异步API(使用Java API)。但是,性能不如预期,消息不按顺序排列。
    2. SEDA:当我为每个阶段使用线程池时,整体性能很好。但是,为了保留消息顺序,我尝试每个阶段只使用一个线程,性能甚至比Proactor模式更差。
    3. LMAX Disruptor:“默认”批处理特性会降低延迟和吞吐量,因为我发现将批处理应用于当前的业务逻辑有点困难。当我避免使用批处理时,性能现在还可以,但是,它只比顺序方法快1.5倍(即使我为每个处理程序使用一个线程,所以它是3个线程)
    4. 一种“天真”的多线程方法:使用BlockingQueue +一些工作线程,性能比我预期的要好。比LMAX Disruptor方法快1.75-2X。我觉得这里有点反逻辑......
    5. 那么,我上面的方法做错了吗?事件驱动的架构是否真的符合我们对高吞吐量,坚固的实时系统的需求?

      P / S:这是我第一次在Stackoverflow上提问,所以如果我的问题有任何问题,请给我建议:D。谢谢:D。

0 个答案:

没有答案