我正在学习GRPC,因为我们计划在Spring Boot微服务中公开GRPC服务器(而不是Rest Endpoint),它将在专用端口上进行监听。我正在使用以下代码段创建GRPC服务器。
io.grpc.Server server = ServerBuilder.forPort(port)
.addService(new MyServiceImpl())
.build()
.start();
使用默认值初始化封装了底层NettyServerBuilder对象的服务器对象。我们计划将其部署在生产(功能强大的硬件)中,在此我们期望来自grpc客户的巨大流量(每秒 10,000次呼叫)。我的问题就像是为了扩展我应该如何配置基础NettyServerBuilder。我需要调整哪些重要配置?欢迎任何建议和最佳做法
答案 0 :(得分:0)
您应该:
serverBuilder.executor()
并将ForkJoinPool
设置为执行者。在该执行程序中,将调用gRPC回调(即ServerCall.Listener
上的方法)。 ForkJoinPool是经过高度优化的,更多并发的执行程序,并允许网络线程恢复处理HTTP / 2和SSL之类的功能。nettyServerBuilder.workerEventLoopGroup()
并提供一个EpollEventLoopGroup
。这使您可以使用优化的网络线程实现,该实现比默认的Nio Java网络实现更有效。您提供给组的线程数将取决于您的基准测试,但是一个好的经验法则是2-4个工作人员。 gRPC使用EventLoops的方式与netty有所不同,因此您通常不需要每个内核1个。我们尽力使gRPC服务器的默认实现在不进行任何额外配置的情况下快速完成,因此即使您不使用它们,它仍将是非常快的。