Distributed Deployments
Deploy RateThrottle across multiple servers with Redis.
Overview
For applications running on multiple servers:
Use Redis storage backend
All servers share rate limit state
Consistent limits across instances
High availability with Redis Sentinel
Architecture
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Server 1 │ │ Server 2 │ │ Server 3 │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
└───────────────────┼───────────────────┘
│
▼
┌───────────────┐
│ Redis Server │
└───────────────┘
Setup
Each Server
from ratethrottle import create_limiter, RateThrottleRule
# Same configuration on all servers
limiter = create_limiter(
storage='redis',
redis_url='redis://redis-server:6379/0'
)
rule = RateThrottleRule(
name="api_limit",
limit=1000,
window=60
)
limiter.add_rule(rule)
Result: Clients hitting different servers share the same 1000/min limit.
High Availability
Using Redis Sentinel:
from redis.sentinel import Sentinel
from ratethrottle import RateThrottleCore, RedisStorage
sentinel = Sentinel([
('sentinel-1', 26379),
('sentinel-2', 26379),
('sentinel-3', 26379)
])
redis_client = sentinel.master_for('mymaster')
storage = RedisStorage(redis_client)
limiter = RateThrottleCore(storage=storage)
Best Practices
Use Connection Pooling - Reuse Redis connections - Set max_connections appropriately
Monitor Redis Health - Track memory usage - Set up alerts
Configure Persistence - Enable AOF for durability - Set up regular backups
Test Failover - Verify Sentinel failover - Test recovery procedures
Next Steps
Configure Storage Backends
Set up DDoS Protection
Monitor with Analytics and Reporting