0

我想从您的经验中了解您对我的设计的看法。

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

我有组件 A、B、C(在同一个 JVM 上)需要相互“交谈”。

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

  1. 方法调用方式(各自持有对方实例(注入、对象实例等)

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

我知道有一个中间件混乱系统(选项2)的缺点。

但:

我说的是延迟考虑。我需要让这些消息以低延迟到达目标(谈论毫秒延迟)。

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

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

(使用 Java 编程,还不确定哪个应用程序容器(Spring、Jboss ..)

谢谢,雷。

4

1 回答 1

0

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

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

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

于 2013-02-27T09:19:36.690 回答