Servicio de calificación de alto rendimiento en Go
Backend
Problema
Calificar grandes lotes de forma confiable, separando el trabajo en cola del cacheo de resultados, y dejando todo listo para una futura migración a la nube.
Impacto
Un servicio rápido y portable, con políticas de almacenamiento correctas y compatible con Redis administrado en la nube.
- Go
- Redis
- Docker
El problema
El servicio debía calificar grandes lotes de forma confiable. Necesitaba una cola para el trabajo pendiente y un caché para los resultados, pero esas dos cargas tienen políticas de memoria opuestas — y el plan era migrar a la nube, donde Redis administrado impone restricciones.
La arquitectura
- Servicio HTTP en Go, con la lógica de calificación separada de la capa de transporte.
- Dos instancias de Redis: una para caché y otra para cola, aisladas por prefijos de clave (no por multi-DB).
- Worker separado de la API, para escalar el procesamiento de forma independiente.
- Autenticación Bearer multi-token para proteger los endpoints.
Decisiones clave
- Dos Redis en vez de uno con multi-DB: el caché necesita una política de
eviction (
allkeys-lru) y la cola necesita no perder datos (noeviction). Son mutuamente excluyentes en una sola instancia. Además, el multi-DB no es viable en Redis administrado con cluster mode, así que separar por instancias y prefijos dejó el diseño listo para la nube desde el día uno. - Worker/API separados: el cálculo escala sin afectar la disponibilidad del endpoint.
Impacto
Un servicio de calificación rápido, con las políticas de almacenamiento correctas para cada tipo de carga, y portable a infraestructura administrada sin rediseñar.