gRPC(Java):服务器的多个实例与具有多个服务的服务器
gRPC (Java): Multiple instances of Server vs on server with multiple Services
所以 gRPC api 在我看来好像在一个应用程序中拥有多个服务的预期方式是在 io.grpc.Server 实例上构建并根据需要向其添加尽可能多的服务。
是否有任何理由(就 robustness/performance/availability/error 弹性而言...)知道为什么人们宁愿使用多个 io.grpc.Server 实例来托管不同的服务?
我对基准测试特别感兴趣,但也欢迎指向文档的链接和/或关于该主题的讨论。
从客户端的角度来看,连接到多个服务器意味着创建多个通道,而通道是昂贵的资源。如果相关服务可以全部放在一台服务器上,那么客户端只需要创建一个通道来调用所有服务。
通常,所有服务都是单个 io.grpc.Server 的一部分。
多个 io.grpc.Server 可能最适合基于 access/permissions 分离服务。例如,如果您想要一个额外的开放端口 "special",例如允许管理员访问额外的防火墙规则或仅限本地主机。或者,如果您想要多个 Unix 域套接字,每个套接字都有自己的 user/group 访问权限。
不过如果想听多遍也可以简单使用。例如,如果您想在普通 IP 端口和 Unix 域套接字上侦听也很有用。
所以 gRPC api 在我看来好像在一个应用程序中拥有多个服务的预期方式是在 io.grpc.Server 实例上构建并根据需要向其添加尽可能多的服务。
是否有任何理由(就 robustness/performance/availability/error 弹性而言...)知道为什么人们宁愿使用多个 io.grpc.Server 实例来托管不同的服务?
我对基准测试特别感兴趣,但也欢迎指向文档的链接和/或关于该主题的讨论。
从客户端的角度来看,连接到多个服务器意味着创建多个通道,而通道是昂贵的资源。如果相关服务可以全部放在一台服务器上,那么客户端只需要创建一个通道来调用所有服务。
通常,所有服务都是单个 io.grpc.Server 的一部分。
多个 io.grpc.Server 可能最适合基于 access/permissions 分离服务。例如,如果您想要一个额外的开放端口 "special",例如允许管理员访问额外的防火墙规则或仅限本地主机。或者,如果您想要多个 Unix 域套接字,每个套接字都有自己的 user/group 访问权限。
不过如果想听多遍也可以简单使用。例如,如果您想在普通 IP 端口和 Unix 域套接字上侦听也很有用。