对于我目前正在使用 Akka 开发的数据挖掘算法,我想知道 Akka 是否对发送的消息进行了性能优化。
例如,如果我有一个 Actor 向同一个其他 Actor 发出大量消息,将一组消息封装到另一个大消息中是否好?或者 Akka 本身是否有某种缓冲区,以便一次通过网络传输的不是一条消息而是多条消息?
我问这个问题是因为该算法应该在传输性能很重要的集群上远程执行,我目前没有选择自己做基准测试。
最佳答案
对于在同一台机器上通过 Akka 传递的消息,我认为使用小消息还是将消息聚合为单个消息并不重要。我认为,与处理聚合时必须循环相比,许多调用的额外开销是最小的。 我更喜欢使用小消息,因为它使系统更简单。
但是,当通过网络发送消息时,Akka 使用 HTTP,因此建立连接等会产生额外的 HTTP 开销成本。因此,您可以在此处选择将一些消息聚合为一条消息。 但是,这也取决于您的用例。缓冲意味着等待更多直到有足够的(或发生超时)。如果您不能等待,例如因为您需要快速响应,所以您仍然需要单独发送每条消息。
我不认为有一个标准的 Akka actor 可以用来聚合消息。也许可以应用一种特殊的路由来进行缓冲。
或者您可以看看 Akka Streams。这确实支持消息缓冲。
关于performance - 关于Akka消息传递性能 : many small messages or less large messages?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17998645/