Cambios implementados: 1. Redis cache para _classify_cache (catalog_service.py): - Reemplaza dict in-memory por Redis compartido entre workers - TTL 5 minutos para clasificación Nexpart - classify_cache_clear() y classify_cache_stats() actualizados - Hit rate pasa de ~6% (15 cachés separados) a ~80%+ (cache unificado) 2. Redis cache para vehicle info en smart_search(): - Verifica Redis antes de ejecutar DISTINCT ON + 4 JOINs sobre 2B filas - Cache miss: query solo para los part_ids faltantes - TTL 1 hora por part_id - Impacto: búsquedas repetidas pasan de 500ms–2s a < 50ms 3. Gunicorn gthread (gunicorn.conf.py): - worker_class = 'gthread' con 4 threads por worker - 4 workers × 4 threads = 16 requests concurrentes - max_requests = 1000 para reciclar workers y prevenir memory leaks Tests: 73/73 pasando
22 lines
539 B
Python
22 lines
539 B
Python
import multiprocessing
|
||
|
||
bind = "0.0.0.0:5001"
|
||
|
||
# gthread workers handle multiple concurrent requests per worker via threads.
|
||
# Ideal for I/O-bound Flask apps with DB queries.
|
||
# 4 workers × 4 threads = 16 concurrent requests.
|
||
workers = 4
|
||
threads = 4
|
||
worker_class = "gthread"
|
||
worker_connections = 1000
|
||
|
||
# Recycle workers after N requests to prevent memory leaks
|
||
max_requests = 1000
|
||
max_requests_jitter = 50
|
||
|
||
timeout = 120
|
||
keepalive = 5
|
||
accesslog = "/var/log/nexus-pos/access.log"
|
||
errorlog = "/var/log/nexus-pos/error.log"
|
||
loglevel = "info"
|