limitador 0.1.0

Rate limiter.
docs.rs failed to build limitador-0.1.0
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build: limitador-0.5.0

Limitador

Github Workflow Docker Repository on Quay

Limitador is a generic rate-limiter written in Rust. It can be used as a library, as an HTTP service, or as a GRPC service that implements the Envoy Rate Limit protocol.

Status: Experimental

Getting started

Rust library

Add this to your Cargo.toml:

[dependencies]
limitador = { version = "0.1.0" }

To use limitador in a project that compiles to WASM, there are some features that need to be disabled. Add this to your Cargo.toml instead:

[dependencies]
limitador = { version = "0.1.0", default-features = false }

HTTP service

The OpenAPI spec of the service is here.

Run with Docker (replace latest with the version you want):

docker run --rm --net=host -it quay.io/3scale/limitador:latest http-server

To use Redis, specify the URL with REDIS_URL:

docker run -e REDIS_URL=redis://127.0.0.1:6379 --rm --net=host -it quay.io/3scale/limitador:latest http-server

You can also run the service locally:

cargo run --release --bin http-server

You can change the host and port with the HOST and PORT envs.

GRPC server that implements Envoy's RLS

To run Limitador, you need to provide a YAML file with the limits. There's an example file that allows 10 requests per minute and per user_id when the HTTP method is "GET" and 5 when it is a "POST". You can run it with Docker (replace latest with the version you want):

docker run -e LIMITS_FILE=/home/limitador/my_limits.yaml --rm --net=host -it -v $(pwd)/examples/limits.yaml:/home/limitador/my_limits.yaml:ro quay.io/3scale/limitador:latest envoy-rls

To use Redis, specify the URL with REDIS_URL:

docker run -e LIMITS_FILE=/home/limitador/my_limits.yaml -e REDIS_URL=redis://127.0.0.1:6379 --rm --net=host -it -v $(pwd)/examples/limits.yaml:/home/limitador/my_limits.yaml:ro quay.io/3scale/limitador:latest envoy-rls

You can also run the service locally:

LIMITS_FILE=./examples/limits.yaml cargo run --release --bin envoy-rls

There's a minimal Envoy config to try limitador here. The config forwards the "userid" header and the request method to Limitador. It assumes that there's an upstream API deployed in the port 1323. You can use echo, for example.

You can change the host and port with the HOST and PORT envs.

Limits storage

Limitador can store its limits and counters in memory or in Redis. In memory is faster, but the limits are applied per instance. When using Redis, multiple instances of limitador can share the same limits, but it's slower.

Development

Build

cargo build

Run the tests

Some tests need a redis deployed in localhost:6379. You can run it in Docker with:

docker run --rm --net=host -it redis

Then, run the tests:

cargo test

License

Apache 2.0 License