How nandinideshmukh/rate-limiter works
RateLimitX is an HTTP rate-limiting service. Requests to /api/ are identified by API key or client IP, assigned a policy, checked by its configured Redis-backed algorithm, and either rejected with rate-limit headers or passed to the API handler. The service also serves an embedded page, health endpoints, and Prometheus metrics. The source excerpts show all five Redis-backed algorithms and some Lua scripts; other script and deployment wiring is not inspected, so those relationships are omitted.
Main entry points: main.go HTTP server · ratelimit.go Rate-limit middleware · fixed_window.go Redis fixed window · sliding_window_counter.go Redis sliding counter
Components 21
HTTP service
- HTTP server
cmd/server/main.go - API handler
cmd/server/main.go - Embedded page
web/assets.go
Policy and enforcement
- Policy manager
internal/policy/manager.go - Rate-limit middleware
internal/middleware/ratelimit.go
Limiter algorithms
- Fixed window logic
internal/limiter/fixed_window.go - Sliding counter logic
internal/limiter/sliding_window_counter.go - Sliding log logic
internal/limiter/sliding_window_log.go - Token bucket logic
internal/limiter/token_bucket.go - Leaky bucket logic
internal/limiter/leaky_bucket.go - Redis fixed window
internal/storage/fixed_window.go - Redis sliding counter
internal/storage/sliding_window_counter.go - Redis sliding log
internal/storage/sliding_window_log.go - Redis token bucket
internal/storage/token_bucket.go - Redis leaky bucket
internal/storage/leaky_bucket.go
Metrics and health
- Request metrics
internal/metrics/metrics.go - Prometheus endpoint
Other components
- HTTP client
- Redis
- Prometheus service
- Grafana service
Connections 24
- HTTP client → HTTP server: sends requests
cmd/server/main.go - HTTP server → Rate-limit middleware: routes /api
cmd/server/main.go - HTTP server → Embedded page: serves page
cmd/server/main.go - HTTP server → Prometheus endpoint: serves metrics
cmd/server/main.go - HTTP server → Prometheus service: checks health
cmd/server/main.go - HTTP server → Grafana service: checks health
cmd/server/main.go - HTTP server → Policy manager: configures policies
cmd/server/main.go - HTTP server → Redis fixed window: constructs backend
cmd/server/main.go - HTTP server → Redis sliding counter: constructs backend
cmd/server/main.go - HTTP server → Redis sliding log: constructs backend
cmd/server/main.go - HTTP server → Redis token bucket: constructs backend
cmd/server/main.go - HTTP server → Redis leaky bucket: constructs backend
cmd/server/main.go - Rate-limit middleware → Policy manager: selects policy
internal/middleware/ratelimit.go - Rate-limit middleware → Redis fixed window: checks limit
internal/middleware/ratelimit.go - Rate-limit middleware → Redis sliding counter: checks limit
internal/middleware/ratelimit.go - Rate-limit middleware → Redis sliding log: checks limit
internal/middleware/ratelimit.go - Rate-limit middleware → Redis token bucket: checks limit
internal/middleware/ratelimit.go - Rate-limit middleware → Redis leaky bucket: checks limit
internal/middleware/ratelimit.go - Rate-limit middleware → API handler: allows request
internal/middleware/ratelimit.go - Rate-limit middleware → Request metrics: records outcomes
internal/middleware/ratelimit.go - Prometheus endpoint → Request metrics: exposes metrics
- Redis fixed window → Redis: runs script
internal/storage/fixed_window.go - Redis sliding counter → Redis: runs script
internal/storage/sliding_window_counter.go - Redis leaky bucket → Redis: runs script
internal/storage/leaky_bucket.go