Caching, Message Queues & Background Workers
Decouple heavy compute and network I/O. Master Redis cache-aside patterns, Celery distributed task queues, RabbitMQ brokers, and exponential backoff retry policies.
Synchronous HTTP Request Blocking vs Asynchronous Background Offloading
Never block HTTP responses with long-running operations like email delivery or PDF rendering. Offload tasks to Celery background workers.
# ❌ Blocks HTTP response thread for 5+ seconds!
@router.post("/register")
def register_user(data: UserRegister):
user = db.create(data)
send_smtp_email_sync(user.email) # Blocking I/O!
return user
# ✅ Enqueues task & returns HTTP 202 immediately
@router.post("/register", status_code=202)
def register_user(data: UserRegister):
user = db.create(data)
send_welcome_email_task.delay(user.email)
return {"message": "User created, email queued"}
⚙️ Distributed Task Queue & Cache Components
Sub-millisecond key-value cache with TTL expiration to reduce DB load.
Asynchronous background worker processes executing queues in parallel.
AMQP message broker ensuring reliable task delivery & dead-letter exchanges.
Monitoring dashboard tracking worker health, retry counts, and execution latency.
💻 Production Blueprint: Celery Task with Exponential Backoff
Tasks automatically retry upon failure using exponential countdown delays (`60s`, `120s`, `240s`).
from core.celery_app import celery_app
@celery_app.task(bind=True, max_retries=3)
def send_welcome_email_task(self, email: str):
try:
smtp_service.send_welcome(email)
except Exception as exc:
# Exponential backoff retry calculation: 60 * (2 ^ retries)
countdown = 60 * (2 ** self.request.retries)
raise self.retry(exc=exc, countdown=countdown)