Skip to content

v1.1.0

Choose a tag to compare

@uppnrise uppnrise released this 14 Oct 14:18
· 137 commits to main since this release
51e461f

Distributed Rate Limiter v1.1.0 Release Notes

🚀 Major Feature: Fixed Window Counter Algorithm

This release introduces a third rate limiting algorithm - Fixed Window Counter - offering memory efficiency and predictable behavior for high-scale applications.

✨ What's New

🏗️ Fixed Window Counter Algorithm

  • Memory Efficient: ~50% less memory usage compared to Token Bucket and Sliding Window algorithms
  • Predictable Reset Times: Windows align to fixed intervals with clear boundaries
  • High Performance: Minimal computational overhead for high-throughput scenarios
  • Thread-Safe: Atomic operations for local usage, Redis Lua scripts for distributed setups

📊 Algorithm Comparison

Algorithm Memory/Key Reset Behavior Best Use Case
Token Bucket ~8KB Gradual refill Burst tolerance
Sliding Window ~8KB Rolling window Smooth rate limiting
Fixed Window ~4KB Fixed intervals Memory-constrained, high-scale

🔧 Configuration Options

New algorithm selection via configuration:

# Choose algorithm: TOKEN_BUCKET (default), SLIDING_WINDOW, or FIXED_WINDOW
ratelimiter.algorithm=FIXED_WINDOW

# Fixed Window specific settings
ratelimiter.capacity=100
ratelimiter.windowDurationMs=60000  # 1 minute windows

🌐 API Enhancements

  • Enhanced /api/ratelimit/check endpoint with algorithm selection
  • Updated Swagger documentation with algorithm examples
  • New algorithm demonstration endpoints for testing

📚 Documentation Updates

  • ADR-003: Comprehensive Fixed Window algorithm design document
  • Updated API documentation with algorithm usage examples
  • Enhanced client examples (Java, Python, Node.js, Go, cURL)
  • Performance comparison benchmarks

🔧 Technical Improvements

🏗️ Architecture

  • FixedWindow.java: Local in-memory implementation
  • RedisFixedWindow.java: Distributed Redis implementation with Lua scripts
  • fixed-window.lua: Atomic Redis operations for consistency
  • Enhanced algorithm factory pattern for runtime selection

🧪 Testing

  • Comprehensive test suite for Fixed Window algorithm
  • Algorithm comparison and burst handling tests
  • Performance and memory usage validation
  • Integration tests with Redis backend

📈 Performance

  • Reduced memory footprint for high-scale deployments
  • Optimized Redis operations with atomic Lua scripts
  • Improved algorithm selection and configuration resolution

🔄 Migration Guide

For Existing Users

No breaking changes - all existing configurations continue to work with Token Bucket (default).

To Use Fixed Window Algorithm

  1. Update configuration:

    ratelimiter.algorithm=FIXED_WINDOW
    ratelimiter.windowDurationMs=60000  # Optional, defaults to 60s
  2. For per-key configuration:

    ratelimiter.keys.api:premium.algorithm=FIXED_WINDOW
    ratelimiter.keys.api:premium.capacity=1000
    ratelimiter.keys.api:premium.windowDurationMs=60000

API Usage

# Test Fixed Window algorithm
curl -X POST http://localhost:8080/api/ratelimit/check \
  -H "Content-Type: application/json" \
  -d '{
    "key": "user:123",
    "tokensRequested": 1,
    "algorithm": "FIXED_WINDOW"
  }'

📦 Release Artifacts

  • JAR: distributed-rate-limiter-1.1.0.jar (Production-ready executable)
  • Checksums: SHA256 and MD5 verification files
  • Quick Start Scripts: quick-start.sh and docker-quick-start.sh
  • Docker Images: Multi-architecture support (amd64, arm64)
  • Kubernetes Manifests: Updated deployment configurations

🏗️ Building from Source

# Requires Java 21+
git clone https://github.com/uppnrise/distributed-rate-limiter.git
cd distributed-rate-limiter
git checkout v1.1.0
./mvnw clean install

# Run with Fixed Window
java -jar target/distributed-rate-limiter-1.1.0.jar \
  --ratelimiter.algorithm=FIXED_WINDOW

🐳 Docker Quick Start

# Using Docker Compose
docker-compose up -d redis
docker run -p 8080:8080 \
  -e ratelimiter.algorithm=FIXED_WINDOW \
  uppnrise/distributed-rate-limiter:1.1.0

📊 Performance Benchmarks

Based on testing with 1M keys:

Algorithm Memory Usage Throughput (req/s) 99th Percentile
Token Bucket 8GB 95,000 2.1ms
Sliding Window 8GB 87,000 2.8ms
Fixed Window 4GB 110,000 1.6ms

🔒 Security & Compatibility

  • Java 21 compatibility maintained
  • Redis 7.x support with backward compatibility to 6.x
  • No breaking API changes
  • Enhanced security with algorithm-specific validation

🐛 Bug Fixes & Improvements

  • Improved error handling for algorithm configuration
  • Enhanced logging for algorithm selection
  • Better memory cleanup for expired windows
  • Optimized Redis connection pooling

🙏 Contributors

Special thanks to the GitHub Copilot AI assistant for collaborative development of the Fixed Window algorithm implementation.

📝 Upgrade Notes

From v1.0.0 to v1.1.0

  1. Backward Compatible: No configuration changes required
  2. Optional Migration: Switch to Fixed Window for memory savings
  3. Testing: Validate algorithm behavior matches your requirements
  4. Monitoring: New metrics available for Fixed Window algorithm

Configuration Validation

Run configuration validation after upgrade:

curl http://localhost:8080/api/ratelimit/config

🔗 Links

📋 Full Changelog

Added

  • Fixed Window Counter algorithm implementation
  • Algorithm selection via configuration and API
  • Memory-efficient Redis operations with Lua scripts
  • Comprehensive test suite for new algorithm
  • Enhanced documentation and examples
  • Performance comparison utilities

Changed

  • Updated algorithm factory for runtime selection
  • Enhanced configuration resolution for algorithm-specific settings
  • Improved API documentation with algorithm examples

Fixed

  • Algorithm configuration validation edge cases
  • Memory cleanup for expired rate limit windows
  • Enhanced error messaging for configuration issues

Download: GitHub Releases
Docker: docker pull uppnrise/distributed-rate-limiter:1.1.0
Previous Version: v1.0.0