0

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

目前,每个节点每秒都会向随机选择的节点发送固定大小的消息。这可行,但我担心扩展时的性能(例如云与本地)

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

我想在不同的网络上运行具有大小集群的应用程序,并在无需手动调整/监控的情况下获得良好的性能。 我可以采取哪些简单的方法来调整消息大小和频率以减轻上述问题?

4

2 回答 2

1

您可以尝试使用Akka 集群感知路由器的自适应负载平衡

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

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

于 2013-11-06T11:52:51.463 回答
1

如果您的算法有可能,另一种方法是扭转局面,让节点在随机时间点向其他随机节点询问数据。工作拉通常比推更容易控制。

于 2013-11-06T15:08:05.527 回答