2013-08-01 36 views
3

對於我目前正在使用Akka開發的數據挖掘算法,我想知道Akka是否實現了發送消息的性能優化。例如,如果我有一個Actor向同一個其他Actor發送大量消息,將一組消息封裝到另一個大消息中是否好?或者Akka本身有某種緩衝區,因此一次不會有一條消息,而是多條消息通過網絡傳輸?關於Akka消息傳輸性能:許多小消息或更少的大消息?

我在問這個問題,因爲該算法應該是遠程執行的羣集傳輸性能很重要,我目前沒有選擇只是自己做基準。

+2

我不是100%確定的,所以我可能在這裏是錯的,但是對於Akka Remoting,當您通過'!'或'?'向遠程演員發送消息時,該消息將立即傳輸。如果你想在配料批量或時間(以先發生者爲準)之後做任何事情,那麼我認爲你將不得不自己推出。我有興趣看看我是否在這裏錯了,因爲我需要這個相同的功能,並計劃自己進行滾動。 – cmbaxter

+0

好的,我想我會實現批處理,並會盡快嘗試訪問羣集。我會在這裏發表我的結果。 –

+3

Akka消息有一些開銷(例如目標參與者路徑),所以發送更大的消息可能是有意義的。但我認爲「更大」更像是在幾個千字節範圍內。儘管我可能會避免發送巨大的消息,因爲它們在通過時會延遲所有可能的其他消息。 –

回答

2

對於在同一臺機器上通過Akka傳遞的消息,我認爲您使用小消息還是將消息聚合爲單個消息並不重要。許多調用的額外開銷與在處理聚合時必須循環相比,我認爲是最小的。 我寧願使用小信息,因爲它使系統更簡單。

但是,當通過網絡發送消息時,Akka正在使用HTTP,因此建立連接時需要額外的HTTP開銷成本等。因此,您可以在此選擇將某些消息聚合爲單個消息。 但是,這也取決於你的用例。緩衝意味着等待更多,直到有足夠的時間(或發生超時)。如果你不能等,例如因爲你需要快速響應,那麼你仍然需要單獨發送每條消息。

我不認爲有一個標準的Akka演員可以做一些消息聚合。也許可以應用一種特殊的路由來進行緩衝。

或者你可能看看Akka Streams。這確實支持消息的緩衝。