Microservices 对于通过gRPC不断相互通信的微服务,保持连接打开(持久)是否有意义?

Microservices 对于通过gRPC不断相互通信的微服务,保持连接打开(持久)是否有意义?,microservices,grpc,Microservices,Grpc,我正在探索是否可能使用gRPC进行服务间通信 我知道gRPC对流式通信很有用。但是,我不确定它是否用于永不关闭的连接(直到一侧死亡) 否,您可以在两侧显式关闭。我不确定您使用的是什么语言,但应该有一个API来实现这一点。所以,我的问题是,保持连接打开是否更有效?如果是这样,gRPC是否允许它/让其他人这样做?gRPC在其通道对象的基础上有相应的TCP连接,并且如果通道对象的目的地相同,TCP连接可以跨通道对象共享。因此,只要您不显式调用Channel.close(),连接就会继续(有一个空闲功能

我正在探索是否可能使用gRPC进行服务间通信


我知道gRPC对流式通信很有用。但是,我不确定它是否用于永不关闭的连接(直到一侧死亡)

否,您可以在两侧显式关闭。我不确定您使用的是什么语言,但应该有一个API来实现这一点。

所以,我的问题是,保持连接打开是否更有效?如果是这样,gRPC是否允许它/让其他人这样做?gRPC在其通道对象的基础上有相应的TCP连接,并且如果通道对象的目的地相同,TCP连接可以跨通道对象共享。因此,只要您不显式调用
Channel.close()
,连接就会继续(有一个空闲功能,它会在长时间(如一小时)没有流量后关闭TCP连接)。回到您的问题,如果您保持TCP连接,效率会更高。另一方面,如果问题中的“连接”是指流式RPC,则影响会小得多。开销是额外的头_帧和HTTP2流创建。如果您对一元一元调用和流式调用之间的实际性能差异感到好奇,那么应用程序所有者应该在资源和性能之间做出权衡。您可以参考我们的性能仪表板:。谢谢。当你说这将是“资源和性能之间”的权衡时……当我想到资源时,我想到的是机器上打开的套接字,以及保存流信息的任何内存。你还有别的想法吗?