在 akka-http 中,您可以:
- 设置 akka.http.server.max-connections,这将阻止超过该数量的连接。超过此限制意味着客户端将获得连接超时。
- 设置 akka.http.server.pipelining-limit,它可以防止给定的连接一次有超过这个数量的未完成请求。超过这意味着客户端将获得套接字超时。
这些都是从 http 服务器到客户端的背压形式,但两者都非常低级,并且仅与服务器的性能间接相关。
根据服务器看到的请求率,似乎更好的是在 http 级别进行背压。可能通过返回 429 - Too Many Requests。请求率也可以说是性能的间接衡量标准,但它似乎比连接数更接近。
这似乎是一件相当合理的事情,但我很难找到任何现有的模式。这是我能找到的最接近的参考:https ://github.com/akka/akka-http/issues/411
据我所知,最好的方法是抓住Flow
你把你Route
变成的东西,并将其插入到一个图表中,该图表具有全局请求率度量(或者可能是单个处理队列)和绕过Route
(完全返回 429 或其他)。
有更好的想法吗?