Client-Based Rate Limiting

Implement rate limiting based on client identity rather than topic patterns, providing per-client quotas and preventing individual clients from overwhelming your system.

Overview

Client-based rate limiting tracks and limits requests per individual client, identified by:

  • Client ID from MQTT connection

  • User ID from authentication

  • API key or token

  • Device ID from IoT devices

  • IP address (with caution)

  • Custom client identifiers

Basic Client-Based Rate Limiting

Custom Key Generator for Client-Based Limiting

from app.middleware.rate_limit import RateLimitMiddleware

def client_based_key_generator(context):
    """Generate rate limit keys based on client identity"""
    
    # Try different client identification methods in order of preference
    
    # 1. Authenticated user ID (most reliable)
    user_id = context.get('user_id')
    if user_id:
        return f"user:{user_id}"
    
    # 2. Device ID from authenticated device
    device_id = context.get('device_id')
    if device_id:
        return f"device:{device_id}"
    
    # 3. API key identifier
    auth_data = context.get('auth_data', {})
    api_key_id = auth_data.get('key_id')
    if api_key_id:
        return f"api_key:{api_key_id}"
    
    # 4. MQTT client ID
    client = context.get('client')
    if client and hasattr(client, '_client_id'):
        return f"mqtt_client:{client._client_id}"
    
    # 5. Fallback to topic-based (if no client info available)
    topic = context.get('topic', 'unknown')
    return f"topic:{topic}"

# Create client-based rate limiter
client_rate_limiter = RateLimitMiddleware(
    max_requests=100,
    window_seconds=3600,  # 100 requests per hour per client
    key_generator=client_based_key_generator,
    strategy="sliding_window"
)

# Apply to routes
router.on("api/{endpoint}", 
          ApiController.handle,
          middleware=[client_rate_limiter])

Dedicated Client Rate Limiting Middleware

Advanced Client-Based Patterns

Tiered Client Rate Limiting

Multi-Dimensional Client Rate Limiting

Client Identification Strategies

Enhanced Client ID Extraction

Client Fingerprinting

Use Cases and Examples

API Rate Limiting by User

IoT Device Rate Limiting

Multi-Tenant Rate Limiting

Testing Client-Based Rate Limiting

Unit Testing

Load Testing

Performance Considerations

Key Space Management

Client-based rate limiting can create many unique keys. Monitor and manage key proliferation:

Memory Usage Optimization

Next Steps

Last updated