Performance 关于Akka消息传输性能:许多小消息还是较小的消息?

Performance 关于Akka消息传输性能:许多小消息还是较小的消息?,performance,networking,akka,message-passing,Performance,Networking,Akka,Message Passing,对于我目前正在使用Akka开发的数据挖掘算法,我想知道Akka是否实现了发送消息的性能优化 例如,如果我有一个参与者向同一个其他参与者发送大量消息,那么将一组消息封装到另一个大消息中是否好?或者Akka本身是否有某种缓冲区,以便不是一条消息而是多条消息同时通过网络传输 我问这个问题是因为该算法应该在传输性能非常重要的集群上远程执行,而我目前没有选择自己进行基准测试。对于在同一台机器上通过Akka传递的消息,我认为使用小消息还是消息聚合作为单个消息并不重要。我认为,与处理聚合时必须循环相比,许多调

对于我目前正在使用Akka开发的数据挖掘算法,我想知道Akka是否实现了发送消息的性能优化

例如,如果我有一个参与者向同一个其他参与者发送大量消息,那么将一组消息封装到另一个大消息中是否好?或者Akka本身是否有某种缓冲区,以便不是一条消息而是多条消息同时通过网络传输


我问这个问题是因为该算法应该在传输性能非常重要的集群上远程执行,而我目前没有选择自己进行基准测试。

对于在同一台机器上通过Akka传递的消息,我认为使用小消息还是消息聚合作为单个消息并不重要。我认为,与处理聚合时必须循环相比,许多调用的额外开销是最小的。 我更喜欢使用小消息,因为它使系统更简单

但是,当通过网络发送消息时,Akka使用HTTP,因此设置连接等会产生额外的HTTP开销。因此,您可以选择在此处将一些消息聚合为单个消息。 然而,这也取决于您的用例。缓冲意味着等待更多时间,直到有足够的时间(或发生超时)。如果您不能等待,例如,因为您需要快速响应,那么您仍然需要单独发送每条消息

我认为没有一个标准的Akka actor可以对消息进行聚合。也许可以应用一种特殊的路由来进行缓冲


或者你可以看看阿克卡河。这确实支持消息缓冲。

我不是100%确定,所以我可能在这里错了,但是使用Akka远程处理,当您通过
向远程参与者发送消息时
,该消息将几乎立即被传输。如果您想在批处理方面做任何事情,并且只在设定的批处理大小或时间量(以先发生的为准)之后发送,那么我认为您必须自己进行处理。我很想知道我在这里是否错了,因为我需要同样的功能,并计划自己滚动它。好的,我想我会实现批处理,并在访问集群后立即尝试。我将在这里发布我的结果。Akka消息有一些开销(例如目标参与者路径),所以发送更大的消息可能是有意义的。但我认为“更大”更像是在几KB的范围内。不过,我可能会避免发送大量消息,因为它们会在消息通过时延迟所有可能的其他消息。