扩展Grpc Server以阻止呼叫的配置

时间:2019-04-09 16:41:43

标签: java netty grpc grpc-java

我正在学习GRPC,因为我们计划在Spring Boot微服务中公开GRPC服务器(而不是Rest Endpoint),它将在专用端口上进行监听。我正在使用以下代码段创建GRPC服务器。

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

使用默认值初始化封装了底层NettyServerBuilder对象的服务器对象。我们计划将其部署在生产(功能强大的硬件)中,在此我们期望来自grpc客户的巨大流量(每秒 10,000次呼叫)。我的问题就像是为了扩展我应该如何配置基础NettyServerBuilder。我需要调整哪些重要配置?欢迎任何建议和最佳做法

1 个答案:

答案 0 :(得分:0)

您应该:

  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服务器的默认实现在不进行任何额外配置的情况下快速完成,因此即使您不使用它们,它仍将是非常快的。