0

我目前有以下架构:

负载(具有用于负载测试的基本接口的播放应用程序)-> 网关(具有用于传入消息的 REST 接口的喷雾应用程序)-> 处理器(与 MongoDB 一起使用的 akka 应用程序)-> MongoDB

只要我推送的消息数量很少,一切正常。但是,当我尝试推送 10000 个事件时,最终将在 MongoDB 作为文档结束,它会在随机位置停止,例如在 742 消息或 982 消息上,之后什么也不做。

调试这种情况的最佳方法是什么?在负载方面,我只是在努力推动 REST 服务:

for (i ← 0 until users) workerRouter ! Load(server, i)

然后在workerRouter

WS.url(server + "/track/message").post(Json.toJson(newUser)).map { response =>
  println(response.body)
  true
}

在喷雾方面:

pathPrefix("track") {
  path("message") {
    post {
      entity(as[TrackObj]) { msg =>
        processors ! msg
        complete("")
      }
    }
  }
}

在处理器方面,它基本上只是插入到集合中。关于从哪里开始有什么建议吗?

更新:我尝试将创建消息的逻辑移至 Gatewat,执行 1 到 10000 的循环,它工作得很好。但是,如果在管道中涉及喷射和播放,它会中断和随机位置。在这种情况下如何调试有什么建议吗?

4

2 回答 2

0

在分布式和并行环境中,几乎不可能创建一个可靠工作的系统。无论您使用什么调试方法,它只会让您发现在调试会话期间会发生的一些错误。

有一次,我们的团队花了 3 个月(!)调整应用程序以实现稳健的 24/7 工作。仍然有错误。然后我们应用了一种模型检查方法(Spin)。在几周内,我们实现了一个模型,使我们能够获得一个强大的应用程序。但是,模型检查需要一些不同的思维方式,并且可能很难开始。

于 2013-09-07T19:15:59.737 回答
0

我将负载测试应用程序移至 Spray 框架,现在它就像一个魅力。所以我想问题出在我在 Play 框架中使用 WS API 的方式上:

WS.url(server + "/track/message").post(Json.toJson(newUser)).map { response =>
  println(response.body)
  true
}

问题已解决但未解决,不适用于基于 Play 的解决方案。

于 2013-09-08T15:21:14.623 回答