【问题标题】:Is there any automatic version of flow control in Grpc-java?Grpc-java中是否有任何自动版本的流控制?
【发布时间】:2019-11-13 10:28:34
【问题描述】:

我的服务器可以处理 10000qps,但是当它达到 11000qps 时,它就超载了。这最终会导致内存不足。

我想知道 grpc-java 如何处理服务器过载。找了很久,没有找到可配置的版本(max-in-flight-messages等参数)。

grpc-java examples只有手动版。

你能给我一些建议吗?提前致谢。

【问题讨论】:

    标签: java grpc grpc-java flow-control backpressure


    【解决方案1】:

    看看 maxConcurrentCallsPerConnection[1]。您需要明确使用 NettyServerBuilder。但是无论如何,您最有可能在引擎盖下使用那个。 (如果您不控制(数量)客户端,这可能还不够)

    您也可以查看https://github.com/Netflix/concurrency-limits。它很可能会解决您的并发问题。

    [1]https://grpc.github.io/grpc-java/javadoc/io/grpc/netty/NettyServerBuilder.html#maxConcurrentCallsPerConnection-int-

    【讨论】:

    • 谢谢,maxConcurrentCallsPerConnection 在一元调用中效果很好。顺便说一句,为什么 http2 连接流控制窗口不能作为默认选项工作?
    • 流量控制不适用于一元调用,因为它只通过 grpc 库为每个 h2 流发送一条消息。使用 maxConcurrentCallsPerConnection 并缓慢响应是一元调用避免服务器过载的正确解决方案。
    • 我强烈推荐 Netflix 并发限制。应用它很容易,并且在使系统响应方面非常有效(通过丢弃多余的请求)。
    【解决方案2】:

    另一个选项是 grpc 反应流:https://github.com/salesforce/reactive-grpc

    它将提供更好的背压和流量控制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-27
      • 2014-09-13
      • 2014-03-10
      • 2017-03-24
      • 2016-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多