gRPC 队列是如何管理的?gRPC 队列有大小限制吗?

Sof*_*ory 18 grpc grpc-python

我试图了解 gRPC 队列的管理方式以及 gRPC 队列大小是否有任何大小限制。

根据此,帖子请求已排队:

如果您的服务器已经同时处理了maximum_concurrent_rpcs个请求,并且又收到另一个请求,则该请求将立即被拒绝。

如果ThreadPoolExecutor的max_workers小于maximum_concurrent_rpcs,那么在所有线程都忙于处理请求后,下一个请求将排队,并在线程完成处理时处理。

根据此 GitHub 帖子,队列由 gRPC 服务器管理:

因此,maximum_concurrent_rpcs 为您提供了一种方法来设置服务器队列中等待线程服务的 RPC 数量的上限。

微软的这篇文章让我很困惑,它说请求在客户端排队:

当活动呼叫数量达到连接流限制时,其他呼叫将在客户端中排队。排队的呼叫等待活动呼叫完成后再发送。

但请注意,微软在这里谈论的是连接流限制。当达到该限制时,客户端上会形成一个队列。

有两种类型的队列吗?一个是在满足某些限制时在服务器(gRPC 队列)上创建的(如上所述),另一个是在达到此连接流限制时在客户端上创建的。

gRPC 队列的大小限制是多少?我的意思是,它仅受底层硬件(RAM)的限制?

我们是否有可能因为队列大小过大而导致服务器失败?是否可以限制此队列大小?

如果我们谈论的是 2 个不同的队列,我们​​是否也可以管理和限制客户端上的队列?

我对python的观点特别感兴趣。

谢谢!

PS 我假设当人们谈论 gRPC 队列时,他们谈论的是在服务器上创建的队列。