根据群集负载调整消息频率

时间:2013-11-06 08:38:13

标签: scala akka akka-cluster

我正在使用Akka 2.2.3和Scala编写一个简单的同源集群应用程序;粒子过滤算法,其中每个节点在随机时间点与其他集群成员共享数据。它目前是一个研究应用程序,而不是一个关键业务系统。

目前,每个节点每秒向随机选择的节点发送固定大小的消息。这有效,但我在缩放时对性能有所顾虑(例如云与本地)

  • 节点可能会因发送数据而过载
  • 节点可能会因来自其他群集成员的传入消息而过载
  • 网络可能成为瓶颈

我希望在不同的网络上运行带有大小群集的应用程序,并且无需手动调整/监控即可获得良好的性能。 我可以采用哪些简单方法来调整邮件大小和频率以缓解上述问题?

2 个答案:

答案 0 :(得分:1)

您可以尝试使用Adaptive Load Balancing Akka群集感知路由器。

或者您可以尝试创建自己的机制来减少节点过载。例如,它可能包含Receiver actor的自定义邮箱,该邮箱可能会定期将包含当前邮箱队列长度的邮件添加到邮箱队列的头部。然后,您的Receiver actor可以将此类消息中继到所有群集节点。在这种情况下,您将能够维护群集范围内的Receiver邮箱使用情况统计信息(只记得在该统计信息中包含TTL,并且不会将收到的统计信息视为空邮箱指示符)。

如果您的应用程序可以容忍部分数据丢失,那么您可以直接从Receiver的邮箱中删除额外的邮件(同时也需要自定义邮箱实现)。

答案 1 :(得分:1)

如果您的算法可以实现,另一种方法是转变事物并让节点在随机时间点向其他随机节点询问数据。工作拉动通常比推动更容易控制。