如何避免Akka HTTP饱和(延迟峰值)?

时间:2017-03-25 21:29:41

标签: performance scala akka akka-http

我有一个akka-http(Scala)API服务器,它为NodeJS服务器提供数据。 在启动后的瞬间,一切正常,一切都很快。延迟很低。但突然间,延迟迅速增加。 API不再响应,并且网站变得无法使用。

enter image description here

奇怪的是,流量和请求数量保持稳定。延迟峰值似乎与它们相关。

我想这个饱和是通过阻止akka线程池中的所有线程来实现的。不幸的是,我的Akka调度程序阻塞了,因为我做了很多SQL查询(在MySQL中)并且因为我没有使用反应库。我使用Slick 2,这与Slick 3相反,仅限阻止。 这是我的调度员:

http-blocking-dispatcher {
  type = Dispatcher
  executor = "thread-pool-executor"
  thread-pool-executor {
    fixed-pool-size = 46
  }
  throughput = 1
}

所以,我的问题是,如何避免这种装瓶?如何保持与流量成比例的延迟?有没有办法驱逐导致饱和的请求,以防止它们危及一切?

谢谢!

1 个答案:

答案 0 :(得分:2)

您不应该使用Akka自己的线程池来运行长时间阻塞任务。创建自己的线程池,并使用它运行光滑的查询,为akka保留免费线程。这是你的前两个问题。

我不知道最后一个有什么好的答案。您可以查看特定的光滑设置来设置sql查询的超时,但我不知道这些事情是否存在。否则,试着分析为什么你的查询花了这么多时间,你能错过一两个索引吗?