【问题标题】:Configuration for scaling Grpc Server for blocking calls用于扩展 Grpc 服务器以阻止调用的配置
【发布时间】:2019-04-09 16:41:42
【问题描述】:

我正在学习 GRPC,因为我们计划在 Spring Boot 微服务中公开 GRPC 服务器(而不是 Rest Endpoint),该微服务将侦听专用端口。我正在使用以下代码 sn-p 创建 GRPC 服务器。

io.grpc.Server server = ServerBuilder.forPort(port)
        .addService(new MyServiceImpl())
        .build()
        .start();

这里封装了不可靠的 NettyServerBuilder 对象的服务器对象正在使用默认值进行初始化。我们计划将其部署在生产环境(强大的硬件)中,我们预计来自 grpc 客户端的巨大流量(大约 10k 每秒调用)。我的问题是对于扩展我应该如何配置底层的 NettyServerBuilder。我需要调整哪些重要配置?欢迎任何建议和最佳做法

【问题讨论】:

    标签: java netty grpc grpc-java


    【解决方案1】:

    你应该:

    1. 使用serverBuilder.executor() 并将ForkJoinPool 设置为执行者。这个执行器是 gRPC 回调(即ServerCall.Listener 上的方法)被调用的地方。 ForkJoinPool 是一个经过高度优化的并发执行器,允许网络线程重新处理诸如 HTTP/2 和 SSL 之类的事情。
    2. 使用nettyServerBuilder.workerEventLoopGroup() 并提供EpollEventLoopGroup。这允许您使用比默认 Nio Java 网络实现更高效的优化网络线程实现。您提供给该组的线程数将取决于您的基准,但一个好的经验法则是 2-4 个工作人员。 gRPC 使用 EventLoops 与 netty 略有不同,因此通常每个核心不需要 1 个。
    3. netty-tcnative 用于您的 SSL 实施。它是一种封装 OpenSSL 和 BoringSSL 的、速度极快的 SSL 实现。

    我们努力使 gRPC 服务器的默认实现在没有任何额外配置的情况下快速,因此即使您不使用这些,它仍然会非常快。

    【讨论】:

      猜你喜欢
      • 2013-01-30
      • 2022-08-15
      • 2013-06-30
      • 2012-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-08
      • 1970-01-01
      相关资源
      最近更新 更多