使用 python grpc 作为服务器来提供数据传输服务的最佳实践是什么

What is the best practice of using python grpc as a server to serving data transfer service

在python gRPC中,我尝试了grpc aio streaming。如果只有一个客户端,速度可以接受。但是当客户端数量增加时,数据传输速度会越来越慢。我尝试使用同步 gRPC 进行多处理,但有时它仍然会将请求路由到繁忙的请求,结果比预期的要慢。我也尝试使用 aio gRPC 进行多处理,每个进程都服务于 aio gRPC 服务器。似乎与同步 gRPC 的多处理没有太大区别。

另外,在测试过程中,服务器似乎一直在等待,直到客户端收到消息,然后服务器才发送下一条消息。服务器可能受到某些非常慢的客户端的影响。

总的来说,我的问题是:如果 python 是唯一的选择,那么使用 python gRPC 创建数据传输服务的最佳实践是什么?

gRPC 基于 HTTP2 协议,并赋予 gRPC 在一个连接上进行多路复用的优势。一个客户端和一个服务器设置可能会消耗客户端和服务器之间的带宽。至于多处理,SO_REUSEPORT 并不是 HTTP 的完美平衡负载平衡。您可能需要配置自己的路由机制(proxy/gateway)。

it seems that the server is waiting till the client gets the message

Emm...从技术上讲,服务器实现将消息缓冲区交给传输,然后让步给事件循环。如果有多个正在进行的 RPC,服务器将开始处理其他协程。见代码:https://github.com/grpc/grpc/blob/3ffa94f5e7334b7fdee6b173c25d71d42b512ac7/src/python/grpcio/grpc/_cython/_cygrpc/aio/server.pyx.pxi#L142

If python is the only option, what is the best practice of creating a Data transfer service using python gRPC?

这个问题有点笼统。如果吞吐量是服务的最高优先级,我建议将消息​​的大小调整为 MB-level。如果没有其他 compute-heavy 工作负载,我建议只保留一个服务器进程。