Saltar al contenido
La Forja Ingeniería sin filtros

Nivel 8 · 07 de 14

El recibo que salió de la caché de otra empresa

Nómina

El recibo que salió de la caché de otra empresa

Una plataforma de liquidación de sueldos que usan 480 empresas. Todas sobre la misma base. El día 28 de cada mes, cuando se aprueban las liquidaciones, la plataforma atiende 41.000 consultas de recibos por hora.

Para sobrevivir a ese pico, hace dos años se puso una caché delante del servicio de nómina. Guarda el recibo ya armado. La clave es el documento del empleado más el mes. Funcionó: el pico dejó de doler.

En febrero, la responsable de nómina de una consultora abrió el recibo de un contratista y encontró un sueldo que no era el que había firmado. Era el que esa misma persona cobra en otra empresa cliente de la plataforma.

El mismo documento. El mismo mes. Una sola clave.

Nadie se equivocó al escribir el código. Cuando esa clave se eligió, un documento identificaba a una persona y una persona trabajaba en un lugar. La multi-tenencia no rompió el código: rompió el supuesto.

Hay dos detalles más, y los dos importan.

La conexión a la caché está declarada como dato público. El equipo lo razonó así porque el recibo ya renderizado es texto, no una tabla. Por eso nadie recibió ninguna advertencia. Un recibo de sueldo con nombre, documento y monto es dato personal aunque esté en HTML.

Y el proceso de cierre mensual recorre la base de las 480 empresas en un solo barrido. Nadie le dice de qué empresa es cada fila que lee: lo deduce de una consulta escrita a mano.

El pico del día 28 es real. Sacar la caché y no poner nada en su lugar devuelve las 41.000 consultas por hora contra la base.

El equipo tiene 6 unidades operativas y hoy usa 5.

Rearmá el sistema para que ninguna memoria compartida guarde el dato de una empresa donde otra pueda pedirlo, para que el pico se siga absorbiendo, y para que el cierre mensual entre por la misma puerta que todos.

Uso de IA: libre, pero tu respuesta tiene que decir qué identifica a un recibo de forma única en tu diseño, y por qué ese identificador no puede repetirse entre dos empresas clientes.

Presupuesto
6 unidades operativas
Restricción
empresas clientes sobre la misma plataforma: al menos 480 empresas
Restricción
consultas de recibos en el pico del día 28: al menos 41000 consultas por hora

Este ejercicio se resuelve arrastrando piezas en un lienzo, y eso pide una pantalla ancha y un puntero preciso. Acá podés leerlo entero. Abrilo desde una computadora para jugarlo.

Recién salido del horno

La Forja acaba de salir

Es lo más nuevo del sitio, así que es donde es más probable que algo se rompa. Si algo no anda como esperabas, o simplemente no se entiende, contámelo: cada reporte la mejora.

¿No usás GitHub? Podés escribirme por mail. ¿Nada que decir todavía? Ver lo ya reportado.