对于我目前正在使用Akka开发的数据挖掘算法,我想知道Akka是否对发送的消息进行了性能优化。
例如,如果我有一个Actor向同一个其他Actor发送大量消息,那么将一组消息封装到另一个大消息中是否合适?或者Akka本身是否有某种缓冲区,这样一次就可以通过网络传输一条消息而不是多条消息?
我问的是这个问题,因为该算法应该在传输性能很重要的集群上远程执行,而且我目前无法自己做基准测试。
答案 0 :(得分:2)
对于在同一台机器上的Akka中传递的消息,我认为使用小消息或消息聚合作为单个消息并不重要。我认为,许多调用的额外开销与处理聚合时必须循环的开销是最小的。 我更喜欢使用小消息,因为它使系统更简单。
但是,当通过网络发送消息时,Akka正在使用HTTP,因此设置连接等会产生额外的HTTP开销。因此,您可以选择将某些消息聚合到单个消息中。 但是,这也取决于您的使用案例。缓冲意味着等待更多,直到有足够的(或发生超时)。如果你不能等待,例如因为您需要快速响应,所以您仍然需要单独发送每条消息。
我认为没有一个标准的Akka actor可以进行一些消息聚合。也许可以应用一种特殊的路由来进行缓冲。
或者你可以看看Akka Streams。这确实支持缓冲消息。