动态消息传递与延迟设计问题

时间:2013-02-27 08:36:58

标签: java performance java-ee architecture jms

我想根据您的经验了解您对我的设计的看法。

我正在设计一个具有非常关键部分的系统:

我有组件A,B,C(在同一个JVM上)需要彼此“说话”。

我可以有两种方式这样做:

  1. 方法调用方式(每个实例相互拥有实例(注入,对象实例等)。

  2. 消息传递方式(主题/队列)

  3. 我知道有一个中间件混乱系统(选项-2)。

    BUT:

    我说的是延迟注意事项。 我需要以低延迟(谈论ms延迟)将这些消息传递给目标。

    我想选择option-2(消息传递方式)。

    根据您的经验,它会对我的延迟产生多大影响?再次延迟是这个决定的一个非常重要的因素。

    (用Java编程,还不确定哪个app容器(Spring,Jboss ..)

    感谢, 射线。

1 个答案:

答案 0 :(得分:0)

鉴于消息传递方式是在内存中,在同一个JVM中。然后,通常大多数延迟来自争用(使用同步等),调度(线程如何被唤醒以完成其工作等)和GC的组合。延迟的来源往往使其他一切相形见绌。

可以编写相当轻量级的消息传递系统,不会增加太多开销。一个很好的例子是Akka,它越来越多地进入低延迟金融系统。它在Scala领域更为人所知,但它确实有一个Java API。

总之,消息传递系统可以实现亚毫秒级需求。但请确保它首先符合您的需求。只因为你可以,并不意味着你应该。如果您正在使用一个小型系统,那么依赖注入/控制反转可能就是您拥有良好设计所需的全部内容。但是,如果您正在将消息传递视为将多个cpu内核集成到一起的方式,那么我建议您查看Akka。即使仅作为案例研究。