当前位置: 首页 > 知识库问答 >
问题:

grpc客户端python:如何创建grpc客户端连接池以获得更好的吞吐量?

师增
2023-03-14

我们的用例是提出大量请求。每个请求返回1MB的数据。现在,在客户端,我们创建一个GRPC通道,并在循环中运行以下函数

content_grpc_channel = grpc.insecure_channel(content_netloc)
test_stub = test_pb2_grpc.ContentServiceInternalStub(
    content_grpc_channel)

def get_feature_data_future(feature_id, span_context=()):
  req_feature = test_pb2.GetFeatureRequest()
  req_feature.feature_id = feature_id
  resp_feature_future = test_stub.GetFeature.future(
      req_feature, metadata=span_context)
  return resp_feature_future

我的问题是在python中如何创建grpc客户端连接池以获得更好的吞吐量?

在golang我看到了这个https://godoc.org/google.golang.org/api/option#WithGRPCConnectionPool但是我很难在python中找到文档。

python中是否有这样的实用程序来创建grpc连接池?或者我应该创建多个grpc通道并自己管理它们?我假设每个通道都有不同的tcp连接,对吗?

共有1个答案

况庆
2023-03-14

gRPC使用HTTP/2,可以在一个连接上多路复用多个请求,并且gRPC客户端连接应在客户端应用程序的生命周期内重复使用。

您提到的Golang链接表示,WithGrpConnectionPool将用于平衡请求。如果需要,您可以搜索负载平衡,但请记住,只有在有多个gRPC服务器实例的情况下,负载平衡才有意义。

如果您正在搜索受使用数据库时所做工作启发的连接池,我会说您不需要担心它,因为使用gRPC时不存在打开连接开销

 类似资料:
  • 我正在尝试在GKE上部署gRPC,我遵循了本教程-https://cloud.google.com/solutions/exposing-grpc-services-on-gke-using-envoy-proxy 我完成了所有工作,但我似乎无法在golang上运行gRPC,而我可以在grpcurl上运行它。 有人有什么想法吗?

  • 请帮助我理解grpc客户端连接错误处理。 我以前用过Micrsoft WCF。如果没有接受以下传入连接的服务,很容易尝试多次连接并放弃: 如果某些IP: port上没有服务侦听,则进行5次连接尝试,然后终止客户端应用程序 这是在客户端和服务同时从VisualStudio调试启动时使用的,所以有时客户端首先启动,它必须等待服务启动。 我曾尝试使用gRPC客户端执行相同的操作,但没有重置from恢复工

  • 我们正在运行“helloworld”示例https://grpc.io/docs/quickstart/cpp.html#update-a-grpc-service,我们收到以下错误: 14:连接失败 迎宾员收到:RPC失败。 服务器和客户端正在监听:。服务器正在运行。首先,我们在服务器上只收到一个数据包,客户端崩溃,我用tcpdump检查了它。我们在不同的主机和同一台主机上进行了检查,但这两种情

  • 将grpc定义的服务视为: 并利用客户端连接到此服务类似于: 如果我们要在一个单独的线程中生成调用,那么处理终止一个永远运行、我们不想再使用的grpc连接的正确方法是什么?是否有任何连接或流控制方法可以调用?

  • 执行kafka客户端的生产者/消费者连接池有意义吗? kafka是否在内部维护已初始化并准备好使用的连接对象列表? 我们希望最小化连接创建的时间,这样在发送/接收消息时就不会有额外的开销。 目前,我们正在使用apache共享池库来保持连接。 任何帮助都将不胜感激。

  • gRPC客户端流媒体/双向流媒体是如何使用HTTP/2实现的 服务器流媒体是有意义的,因为它可以利用服务器推送来发送对请求的多个响应,但我不清楚它如何像通过websocket那样通过HTTP/2进行双向消息传递。