Plataforma de autogestión y pagos para retail
Microservicios sobre GKE con Apigee, tokenización PCI-DSS y autoescalado para que los clientes de una cadena de retail nacional consulten y paguen solos, incluso en los picos.
- Java
- Spring Boot
- .NET
- GKE
- Apigee
- PostgreSQL
- Redis
- Docker
- Kubernetes
- GCP
- Grafana
Contexto
Una cadena de retail con operación nacional necesitaba que sus clientes resolvieran solos consultas y pagos, sin llamar ni ir a sucursal.
Problema
Tráfico irregular con picos fuertes, datos sensibles de medios de pago de por medio, y una capa de integración que fallaba de formas difíciles de diagnosticar: resolución de nombres dentro del clúster, errores de stream contra el gateway, conexiones cifradas que se caían intermitentemente.
Decisiones
- Microservicios contenerizados con Docker sobre Kubernetes (GKE) en GCP, con autoescalado y health checks para absorber los picos.
- Apigee como capa de gateway, con diagnóstico y corrección de los errores de protocolo que rompían las llamadas bajo carga.
- Datos sensibles bajo tokenización PCI-DSS, llaves en un servicio de gestión de llaves y credenciales fuera del código.
- Redis con TLS para caché y sesión, y réplicas de lectura en base de datos para descargar las consultas pesadas.
- Corrección de la resolución DNS dentro del clúster, causa raíz de fallas intermitentes que parecían aleatorias.
Resultado
Las fallas intermitentes que se atribuían a "la red" resultaron tener causas concretas y reproducibles: una configuración de resolución de nombres dentro del clúster y un manejo incorrecto de streams en el gateway bajo carga. Documentar y corregir eso convirtió incidentes recurrentes sin explicación en un problema cerrado. La plataforma quedó absorbiendo los picos por autoescalado en lugar de por intervención manual, y los datos de medios de pago dejaron de vivir en la aplicación: pasaron a estar tokenizados, con llaves y credenciales fuera del código.
Lo que aprendí
Que en Kubernetes la mitad de los bugs "aleatorios" son de red, y que sin logs y métricas uno termina optimizando lo que no era.