[Tutorial] How to Prioritize Traffic with Rate Limits by HTTP Method
Most applications require external users or clients to access a variety of their services and therefore require policies to secure and protect them. Rate limiting is a strategy implemented in API or Edge Gateways to protect backend services by preventing service outages from being overrun with more requests than it’s resources can process and respond to within the agreed service levels.
Rate limits can be configured in a variety of ways to limit the volume or requests over a time period to the endpoint, by the client ID, by HTTP method, with integrated security, and more. This article digs a use case case to configure multiple rate limits for the same client ID (remote address). In our previous post, we detailed setting up multiple rate limits by client ID and in this post we cover setting up rate limits by HTTP method.
When to use this use case
Rate limiting by HTTP method helps build resilient systems by implementing different priorities or classes of traffic incoming to the same service that needs to be processed for response. This strategy is strongly related to the concept of load shedding.
The diagram below explains the scenario with an exposed API that supports both
POST methods for listing data and creating resources, respectively. Both are important but the
POST action is more important to your business and that function needs to be available over the
GET function. Multiple rate limits are configured to enable this scenario.
Try this use case
Follow along using this tutorial to try configuring this type of rate limiting policy.
Set up your environment using these instructions. Any self-hosted or cloud managed Kubernetes (our demo uses GKE) with Gloo API Gateway (latest 1.4) installed will work. Then deploy the demo app, add a virtual service to expose via Gloo, and query the service.
Then you’ll use these instructions to set up and test the global and nested rate limit configuration with 10 requests per minute for
POST and 2 request per minutes with
spec: ratelimit: descriptors: # allow 5 calls per minute for any unique host - key: remote_address rateLimit: requestsPerUnit: 10 unit: MINUTE # specifically limit GET requests from unique hosts to 2 per min - key: method value: GET descriptors: - key: remote_address rateLimit: requestsPerUnit: 2 unit: MINUTE
Watch the demo
We hope you found this tutorial informative and useful in your exploration of API Gateway functionality. You can watch the full webinar featuring this demo here and sign up for an upcoming webinar here.