Hi,
We use GRPC bidirectional streaming RPCs for distributed SQL query execution. For complex queries, we need to create as many as ~100K streams (~1000 per GRPC server) for processing 1 query. We share channel for streams between the same client and server. There are dependencies across these streams, and a server processes data received on these streams in the order specified by the dependency graph. We see that when a lot of data is flowing through the system, the data passing through these streams grinds to a halt.
Is there any HTTP2 flow control config that could cause this? Is it guaranteed that even when there are thousands of streams on a single channel they can all independently make progress? Can something prevent a client from sending any data to a server on one of the streams because of any HTTP2 flow control limit?
Some config we specify for our GRPC server:
ResourceQuota max threads: 2000
ResourceQuota max memory: 1GB
Thanks,
Sandeep