Home

Awesome

proxy-wasm-as-rate-limiting

A prototype implementation of a rate-limiting filter written in AssemblyScript, using the proxy-wasm API for running on WebAssembly-enabled gateways.

What's implemented

What's missing

Build requirements

Building

Once the environment is set up with npm in your PATH, you can build it with:

npm install && make

This will produce as_rate_limiting_debug.wasm and as_rate_limiting.wasm files in build/.

Running

Make sure Kong configuration has the parameter wasm set to on and the injected nginx directive nginx_wasm_shm_kong_wasm_rate_limiting_counters set to some reasonable value, e.g. 12m. This directive defines a shared key/value memory zone named kong_wasm_rate_limiting_counters that's used by the filter to share request counters between workers.

The above configuration can be achieved using the environment variables:

The script demo.sh uses docker to start an upstream service and a Kong instance configured to receive requests at http://localhost:8000/rated and to allow only 3 requests per minute through the upstream service.

The docker resources created and initialized by the script can be destroyed by invoking ./demo.sh stop.