feat(api): implement namespace-level rate limiting with token bucket #5186
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Currently, Nginx rate limiting provides global protection but lacks isolation between namespaces. When multiple namespaces make API requests simultaneously, they compete for the same global limit.
A token bucket implementation at the application level gives each namespace its own rate limit state. This means heavy traffic in one namespace won't affect others, allowing each to handle its own request patterns independently.
While Nginx's leaky bucket drains requests at a fixed rate, Go's token bucket works differently: it stores tokens in a burst buffer, consuming them when new requests arrive and replenishing them at the defined rate.
The idea of combining Nginx and a token bucket provides effective multi-layer protection: global traffic management at the edge, while maintaining precise per-namespace control at the application level.