Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实时系统中最大吞吐量的并发框架_Java_Multithreading_Concurrency_Real Time - Fatal编程技术网

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

Java 实时系统中最大吞吐量的并发框架,java,multithreading,concurrency,real-time,Java,Multithreading,Concurrency,Real Time,我使用的是一个“固定”实时系统(如果在截止日期后提供,结果将是无用的),它需要最大的吞吐量和负载健壮性 关于我们系统的更多细节,我们正在处理电信信息。这些消息将以不同的关注点经过几个步骤。但是,消息顺序非常重要。步骤如下: 从内存中的Redis数据库查询某些内容 从内存中的另一个关系数据库查询某些内容 一些业务逻辑计算处理 将数据更新到Oracle RDBMS中 通过套接字向其他服务器发送消息 我们目前只在1台服务器上设置了一个系统,其中包含一个分发服务器和8个处理单元(按顺序运行消息)。我们决

我使用的是一个“固定”实时系统(如果在截止日期后提供,结果将是无用的),它需要最大的吞吐量和负载健壮性

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

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

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

  • Proactor模式:由我自己(使用JavaAPI)通过回调实现事件循环和高级异步API。但是,性能不符合预期,消息不符合顺序
  • SEDA:当我在每个阶段使用线程池时,总体性能是好的。然而,为了保持消息顺序,我尝试在每个阶段只使用一个线程,性能甚至比Proactor模式还要差
  • LMAX Disruptor:“默认”批处理特性降低了延迟和吞吐量,因为我发现将批处理应用到当前的业务逻辑有点困难。当我避免使用批处理时,性能现在还可以,但是,它只比顺序方法快1.5倍左右(即使我为每个处理程序使用一个线程,所以它是3个线程)
  • 一种“天真”的多线程方法:使用BlockingQueue+一些工作线程,性能比我预期的要好。比LMAX干扰器方法快1.75-2倍。我发现这里有点反逻辑

  • 那么,我的上述方法有没有做错什么?事件驱动体系结构真的适合我们对高吞吐量、稳定的实时系统的需求吗


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

    我建议看vert。x:谢谢,我以前看过vertx,我认为它不适合我们的需要。我们需要找到一种并发处理消息的方法以获得最大吞吐量,因此我认为服务器和客户端之间的异步和非阻塞通信并不重要:D.我认为服务器端也值得一看。在您尝试之前,我不会马上放弃它。您正在通过TCP对多个数据库执行操作,与Disruptor或BlockingQueue相比,它们都不会特别快。我将重点讨论如何最大限度地提高数据库的性能。顺便说一句,你提到的数据库都不是为实时而设计的,Java也不是,所以我会放弃这个想法。“事件驱动的体系结构真的适合我们对高吞吐量、稳定的实时系统的需求吗?”这一点是的,数据库不太适合,但我认为你无法解决它们。