Skip to content
Open
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions L122-max-outstanding-streams.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
Title
----
* Author(s): Siddharth Nohria <siddharthnohria>
* Approver: Craig Tiller <ctiller>
* Status: Draft
* Implemented in: C++
* Last updated: 2025-05-12
* Discussion at: <google group thread> (filled after thread exists)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please start the groups thread so that the 2wk timer starts

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.


## Abstract

Allow servers to set a server-wide `MAX_CONCURRENT_STREAMS` as part of the
Resource Quota, in addition to the current per-connection `MAX_CONCURRENT_STREAMS`.

## Background

HTTP2 protocol provides the `MAX_CONCURRENT_STREAMS` setting as a way to limit
the number of concurrently open streams on any single connection between a
client and the server.

But this in itself is not good enough to protect the servers from too many
concurrent streams; a client can just create create more connections to the same
server, and be allowed to effectively send more concurrent streams.

In addition to the overload risk due too many connections, another limitation of
a per-connection `MAX_CONCURRENT_STREAMS` is that it is static in nature. For
servers where the number of clients might be dynamic, this is sub-optimal. When
there are only a few clients connected to the server, the server might be able
to server more concurrent requests from each of these clients. So a
per-connection limit set to deal with overload situations (with 1000's of clients)
might be sub-optimal in situations with only a small number of clients.

## Proposal

Introduce `StreamQuota` as part of the `ResourceQuota` on the server side. Users
can set the `max_outstanding_streams` in the `StreamQuota`, which will be equally
distributed among all open connections to the server. If the user also specifies
a per-connection `MAX_CONCURRENT_STREAMS`, that will also be respected as an
upper bound.

## Implementation

Implemented in https://github.com/grpc/grpc/pull/39125.