02CASO DE ESTUDIO

Optimización de procesamiento de alto rendimiento

Investigación del tiempo de procesamiento, consumo de memoria, carga de base de datos y operaciones costosas en un sistema backend que maneja datos de rastreo continuos.

RolDesarrollador Backend
Periodo2023 — 2025
EnfoqueRendimiento · Alto rendimiento

Cuando un sistema procesa miles de eventos, las pequeñas ineficiencias se vuelven significativas.

La plataforma de rastreo recibía un flujo continuo de datos GPS. Cada rastreo podía activar validaciones, cálculos, detección de eventos, persistencia, actualizaciones de estado y acciones posteriores.

A esta escala, el rendimiento no estaba limitado a una sola operación lenta. Las consultas a base de datos, cálculos, creación de objetos, transformaciones, uso de memoria y trabajo repetido podían contribuir al costo total de procesamiento.

El desafío era comprender dónde estaba gastando sus recursos el sistema y determinar qué trabajo era realmente necesario.

01Datos entrantesFlujo continuo de rastreo
02ProcesamientoValidación · cálculos · eventos
03PersistenciaBase de datos y estado
04Acciones posterioresReportes · notificaciones · actualizaciones

La parte difícil era encontrar el costo real detrás del flujo de procesamiento.

El sistema ya procesaba la lógica de negocio requerida. El desafío era determinar qué partes de ese flujo consumían tiempo, memoria, capacidad de base de datos o recursos de procesamiento innecesarios.

Optimizar una operación de forma aislada podía simplemente mover el cuello de botella a otro lugar. Necesitaba revisar la ruta completa de un rastreo, desde los datos entrantes hasta la persistencia y las acciones posteriores.

Por ello, la investigación se centró en medir el sistema antes de cambiarlo y separar los cuellos de botella reales de las operaciones que solo parecían costosas.

01Tiempo de procesamiento

Identificar operaciones que añadían un tiempo significativo al procesamiento de cada rastreo.

02Carga de base de datos

Encontrar consultas innecesarias, accesos repetidos y operaciones que aumentaban la presión sobre el almacenamiento persistente.

03Consumo de memoria

Comprender qué objetos, estructuras de datos y operaciones contribuían al uso de memoria y a asignaciones grandes.

04Operaciones costosas

Localizar cálculos, transformaciones y trabajo repetido cuyo costo se volvía significativo a alto volumen.

Medí el sistema antes de decidir qué cambiar.

El primer paso fue comprender la ruta completa de procesamiento y observar cómo se comportaba el sistema bajo cargas de trabajo realistas. En lugar de asumir dónde estaba el problema, busqué evidencia en el flujo de ejecución real.

La investigación abarcó tiempo de procesamiento, actividad de base de datos, llamadas externas, cálculos, transformaciones, asignaciones, tamaños de objetos y comportamiento de memoria.

01
Comprender

Rastrear el ciclo de vida completo de un rastreo y entender qué hace cada etapa.

02
Medir

Observar tiempo de procesamiento, consumo de recursos, actividad de base de datos, asignaciones y comportamiento de memoria.

03
Localizar

Identificar las operaciones que realmente contribuían al costo observado en lugar de optimizar según suposiciones.

04
Aislar

Separar cálculos, consultas, transformaciones y rutas intensivas en memoria para entender su impacto específico.

PRINCIPIO RECTORNo optimices lo que no has medido.

Los cuellos de botella estaban distribuidos por el sistema, no concentrados en un solo lugar.

La investigación mostró que el rendimiento estaba influido por varias partes distintas del flujo de procesamiento. Algunos problemas provenían de trabajo que podía evitarse, mientras que otros venían de operaciones que se volvían costosas a mayores volúmenes.

Esto significaba que no había una sola optimización que resolviera el problema. El enfoque consistió en reducir trabajo innecesario en cada etapa relevante manteniendo intacto el comportamiento de negocio esperado.

01Acceso innecesario a base de datos

Parte de la información no necesitaba obtenerse del almacenamiento persistente en cada ciclo. Las consultas se revisaron y redujeron cuando los datos podían obtenerse de forma más eficiente.

02Cálculos costosos

Se revisaron cálculos y estrategias de procesamiento para identificar operaciones cuyo costo se volvía significativo al ejecutarse repetidamente sobre un gran volumen de eventos de rastreo.

03Transformaciones repetidas

Se examinaron transformaciones de datos y operaciones repetidas para eliminar trabajo que no contribuía al resultado final de negocio.

04Operaciones intensivas en memoria

Se analizaron tamaños de objetos, tipos de datos, asignaciones y comportamiento de memoria para identificar operaciones que contribuían innecesariamente al consumo de memoria.

El objetivo no era hacer menos. Era evitar trabajo innecesario.

Una vez identificadas las partes costosas del flujo de procesamiento, el siguiente paso fue determinar qué operaciones podían eliminarse, reducirse, reutilizarse o realizarse de forma más eficiente.

Cada optimización se evaluó bajo la misma restricción: el sistema debía seguir produciendo el mismo resultado de negocio esperado.

01
Acceso a base de datos

Las consultas se revisaron para evitar acceder al almacenamiento persistente cuando la información requerida ya estaba disponible o podía obtenerse de forma más eficiente. El trabajo de base de datos se redujo a lo que el flujo realmente necesitaba.

02
Estrategias de procesamiento

Se revisaron cálculos y estrategias para reducir operaciones repetidas o innecesariamente costosas, especialmente cuando el mismo trabajo se realizaba sobre un gran número de eventos.

03
Diseño de datos y objetos

Se examinaron tipos de datos, tamaños de objetos y la cantidad de información transportada por el flujo para reducir sobrecarga innecesaria de memoria y procesamiento.

04
Redis y estado

Se evaluó información requerida frecuentemente para acceso rápido mediante Redis cuando era apropiado, reduciendo presión innecesaria sobre el almacenamiento persistente.

05
Operaciones costosas

Las operaciones con un costo de ejecución significativo se aislaron y evaluaron individualmente. Algunas se optimizaron, mientras que otras se evitaron cuando no aportaban suficiente valor para justificar su costo.

06
Comportamiento de memoria

El uso de memoria y las asignaciones grandes se investigaron con diagnósticos y análisis de memoria para entender dónde se consumían recursos y dónde eran posibles las mejoras.

PRINCIPIO DE OPTIMIZACIÓNLa operación más rápida suele ser aquella que el sistema no necesita realizar.

Una optimización solo es útil si el sistema sigue haciendo lo correcto.

Después de cada cambio relevante, el sistema debía evaluarse nuevamente bajo cargas de trabajo realistas. Mejorar el consumo de recursos no era suficiente si cambiaba el comportamiento de procesamiento o los resultados de negocio.

La validación se centró en comparar el sistema antes y después de los cambios, observando tanto el comportamiento técnico como la salida de negocio resultante.

01Comportamiento de procesamiento

Verificar que los datos de rastreo continuaran por el flujo esperado y que los cálculos y la detección de eventos requeridos siguieran siendo correctos.

02Consumo de recursos

Observar CPU, memoria, actividad de base de datos y comportamiento de procesamiento para determinar si la optimización redujo realmente el uso innecesario de recursos.

03Cargas de alto volumen

Probar el sistema bajo volúmenes significativos de rastreo para verificar que las mejoras siguieran siendo efectivas al aumentar la carga.

04Resultados de negocio

Confirmar que el sistema siguiera produciendo el estado, eventos, reportes y comportamiento posterior esperados tras los cambios técnicos.

ANTESMedirObservar el comportamiento existente
CAMBIOOptimizarReducir trabajo innecesario
DESPUÉSCompararValidar resultados técnicos y de negocio
PRINCIPIO DE VALIDACIÓNUn mejor rendimiento significa poco si el sistema deja de producir el resultado correcto.

El sistema pudo manejar la misma carga de negocio con menos trabajo innecesario.

Las optimizaciones redujeron el procesamiento innecesario en distintas partes de la canalización de rastreo. El objetivo no era cambiar lo que producía el sistema, sino hacer más eficiente la ruta hacia ese resultado.

Esto se tradujo en menor consumo de recursos, menos actividad innecesaria de base de datos y un flujo de procesamiento más eficiente para un sistema que maneja miles de eventos de rastreo por segundo.

01Menor consumo de recursos

El procesamiento se volvió más eficiente al reducir trabajo innecesario y evitar operaciones cuyo costo no se justificaba por su contribución al resultado final.

02Menor presión sobre la base de datos

Se redujo el acceso innecesario a la base de datos, permitiendo que el almacenamiento persistente se enfocara en las operaciones que realmente lo requerían.

03Mayor eficiencia de procesamiento

Los cálculos costosos, transformaciones y rutas intensivas en memoria se refinaron para que la canalización pudiera manejar altos volúmenes de forma más eficiente.

04Menores necesidades de infraestructura

Un uso de recursos más eficiente redujo los requisitos de infraestructura necesarios para respaldar la plataforma mientras su carga continuaba creciendo.

CAPACIDAD DE PROCESAMIENTO~7,000–8,000

eventos de rastreo procesados por segundo por la plataforma, manteniendo el comportamiento de negocio esperado.

Los sistemas de alto rendimiento hacen que las decisiones pequeñas importen.

A volúmenes bajos, una consulta, asignación, transformación o cálculo innecesario puede parecer insignificante. A miles de eventos por segundo, la misma decisión puede convertirse en una parte relevante del costo total del sistema.

La experiencia reforzó un enfoque que intento aplicar a sistemas backend: comprender el flujo completo, medir antes de optimizar y cuestionar si cada pieza de trabajo es realmente necesaria.

El rendimiento no se trata solo de hacer más rápidas las operaciones individuales. También consiste en diseñar sistemas que eviten trabajo innecesario desde el inicio.

CONCLUSIÓNComprende primero. Mide lo importante. Optimiza deliberadamente.