2013-02-27 50 views
0

我想從您的經驗中瞭解您對我設計的想法。動態消息與延遲設計問題

我設計具有非常重要部分的系統:

我有組分A,B,C(在同一JVM),其需要「說話」彼此。

我可以有兩種方式這樣做:

  1. 方法調用的方式(每一個持有對方實例(注射,對象實例等。)

  2. 通訊方式(主題/隊列)

我知道具有中間件搞亂系統(選件-2)的利弊。

但是:

我說的是延遲的考慮因素。 我需要讓這些消息以低延遲達到目標(談論ms延遲)。

我想選擇選項2(消息傳遞方式)。

根據您的經驗,它會影響我的延遲多少?延遲是這個決定中的一個非常重要的因素。

(編程與Java,不知道哪個應用程序尚未容器(春,Jboss的..)

感謝, 射線。

+0

在[這個線程]中對這個問題有一些好的想法(http://stackoverflow.com/questions/6729208/what-solutions-exist-for-a-jvm-based-queue-that-is-larger -than堆)。 – 2013-02-27 09:01:59

+0

看着它..用那裏的例子找不到足夠的經驗。 – rayman 2013-02-27 09:06:46

+0

我會說一次採取一步。從注射開始,看看您是否遇到了需要進一步觀察的問題。然後可能是一個線程池,一個隊列就足夠了。只有當我產生足夠的需要消息系統的消息時,我纔會看消息框架。 – techuser 2013-02-28 14:56:07

回答

0

鑑於消息的方法是在內存中,在同一個JVM中。然後,通常大多數延遲來自爭(使用同步等),調度(線程是如何喚醒做好本職工作等)和GC。延遲這些來源往往相形見絀一切。

它的組合可以編寫相當輕量級的消息傳遞系統,而不會增加很多開銷。一個很好的例子這將是Akka,它越來越多地進入低延遲金融系統。它在Scala領域更爲人所知,但它確實有一個Java API。

總之,一個消息系統可以實現亞毫秒級的需求。但要確保它首先適合您的需求。只是因爲你可以,並不意味着你應該。如果你在一個小系統上工作,那麼控制的依賴注入/反轉可能就是你需要有一個好設計的一切。然而,如果你將消息傳遞看作是將多個cpu核心集成到一個組合中的方式,那麼我建議看看Akka。即使只是作爲案例研究。

+0

我還建議你最好從一個簡單的設計開始,測量它,然後首先修改給定的反饋。這種方法往往勝過大多數其他考慮。 – 2013-02-27 09:21:04

+0

即使我使用Akka ..使用主題而不是方法調用..它會影響延遲多少? – rayman 2013-02-27 14:03:08

+0

Akka消息傳遞具有大約1-2微秒的延遲:http://www.jinspired.com/site/performance-instrumentation-monitoring-of-an-efficient-runtime-akka-part-2 – 2013-02-27 15:21:08