我们可以在同一台服务器中像工作进程一样扩展 gRPC

Can we Scale gRPC like worker processes in the same server

我们的应用程序预计每秒会收到数千个请求,我们正在考虑 gRPC,因为我们的主要服务之一是使用不同的语言。 我的查询是

  1. 我们可以使用类似 supervisor 的东西来生成多个 worker(每个服务一个 gRPC 服务器)作为监听相同端口的 gRPC 服务器,或者 gRPC 服务器是否限制为每个 server/port
  2. 我将如何进行性能测试以确定每个 gRPC 服务器的最大请求数。

提前致谢

  1. 虽然您当然可以使用 supervisord 生成多个 gRPC 服务器进程,但端口共享将是一个问题。但是,这是 Posix 限制,而不是 gRPC 限制。默认情况下,多个进程不能监听同一个端口。 (需要明确的是,多个进程可以使用 SO_REUSEPORT 绑定到同一个端口,但这不会导致您可能想要的行为)。

因此,您有两种选择可以将流量路由到单个端口上的正确服务。第一个选项是 运行 所有 gRPC 服务在同一进程中并附加到同一服务器。

如果只有一个服务器进程不适合您,那么您将不得不开始考虑负载平衡。您可以使用任何 HTTP/2-capable 负载均衡器(例如 Envoy、Nginx)来为您的所有服务提供前端,并让它监听您想要的单个端口并根据需要路由到每个 gRPC 服务器进程。

  1. 这是一个非常宽泛的问题。答案是“您对任何非 gRPC 服务器进行基准测试的方式”。 This site 是了解基准测试背后的一些原则的重要资源。