03CASO DE ESTUDIO

Distribución de cargas de trabajo de notificaciones

Control del procesamiento concurrente de notificaciones mediante la distribución del trabajo entrante entre múltiples canales de procesamiento.

RolDesarrollador Backend
Periodo2023 — 2025
EnfoqueConcurrencia · Distribución de carga de trabajo

Un solo evento de rastreo podía activar múltiples flujos de notificación.

La plataforma de rastreo permitía configurar notificaciones para distintos eventos y condiciones. Por ello, un solo rastreo podía generar trabajo que debía procesarse y entregarse a servicios externos de notificaciones.

A medida que aumentaba el volumen de datos de rastreo, el trabajo de notificaciones podía llegar en ráfagas. El desafío no era solo procesar cada notificación, sino controlar cuánto trabajo podía llegar a la capa de procesamiento al mismo tiempo.

01Evento de rastreoEstado del vehículo o evento detectado
02Reglas de notificaciónLas condiciones determinan qué debe activarse
03Trabajo de notificaciónSolicitudes en espera de procesarse
04EntregaServicio externo de notificaciones

El problema no era procesar notificaciones. Era procesar demasiadas a la vez.

Cuando varios eventos de rastreo activaban notificaciones al mismo tiempo, el trabajo resultante podía llegar a la capa de procesamiento de notificaciones en grandes ráfagas.

Permitir que todo ese trabajo se ejecutara de forma concurrente aumentaba la presión sobre el servicio de notificaciones y hacía menos predecible el comportamiento del sistema durante picos de tráfico.

Por lo tanto, el desafío era introducir una cantidad controlada de concurrencia sin ralentizar innecesariamente el procesamiento normal.

01Ráfagas de carga de trabajo

Múltiples eventos de rastreo podían activar trabajo de notificación en un corto periodo de tiempo.

02Presión concurrente

Demasiado trabajo llegando simultáneamente a la capa de procesamiento podía concentrar la carga en el servicio de notificaciones.

03Carga impredecible

Sin una capacidad de procesamiento controlada, los picos de carga podían producir comportamientos de ejecución significativamente distintos.

04Necesidad de concurrencia controlada

El sistema debía procesar trabajo en paralelo, pero dentro de una capacidad predecible y controlada.

Introduje concurrencia controlada distribuyendo el trabajo entre canales de procesamiento fijos.

En lugar de permitir que cada solicitud de notificación se ejecutara de forma independiente, el trabajo de notificaciones se distribuyó entre un número fijo de canales de procesamiento.

Cada elemento de trabajo entrante se asignaba al siguiente canal en secuencia. Esto creó una distribución predecible de la carga de trabajo mientras mantenía bajo control la cantidad de procesamiento concurrente.

TRABAJO ENTRANTE
010203040506
DISTRIBUCIÓNRound-RobinCada elemento nuevo se asigna al siguiente canal en secuencia.
CHANNEL 0101 05
CHANNEL 0202 06
CHANNEL 0303
CHANNEL 0404
01Capacidad fija

El número de canales de procesamiento permaneció fijo, proporcionando una cantidad predecible de trabajo concurrente.

02Distribución simple

Round-Robin ofreció una forma simple y predecible de distribuir el trabajo entrante sin coordinación adicional ni lógica de balanceo compleja.

03Concurrencia controlada

El trabajo podía seguir procesándose en paralelo, pero la concurrencia estaba limitada en lugar de crecer con cada notificación entrante.

La solución debía controlar la concurrencia sin introducir complejidad innecesaria.

Había distintas formas de distribuir el trabajo de notificaciones. Una estrategia más adaptativa podría evaluar continuamente el estado de cada ruta de procesamiento y tomar decisiones según la carga actual.

En este caso, esa complejidad adicional no era necesaria. El requisito principal era establecer una capacidad de procesamiento predecible y evitar concentrar ráfagas de trabajo en una sola ruta.

01
¿Por qué canales fijos?

Un número fijo de canales hacía explícita y predecible la cantidad de procesamiento concurrente. Era posible razonar sobre la capacidad en lugar de que creciera con el número de solicitudes entrantes.

02
¿Por qué Round-Robin?

Round-Robin proporcionó una estrategia de distribución simple y determinista. Cada nuevo elemento de trabajo pasaba al siguiente canal sin requerir coordinación adicional ni análisis de carga.

03
¿Por qué no un balanceo adaptativo?

Un enfoque adaptativo introduciría estado y lógica de decisión adicional. Puesto que el problema podía resolverse con distribución predecible y capacidad controlada, la complejidad extra no estaba justificada.

04
¿Por qué permitir procesamiento en paralelo?

El objetivo no era serializar todo el trabajo de notificaciones. Múltiples canales permitían al sistema continuar procesando en paralelo mientras mantenía la concurrencia dentro de un límite controlado.

PRINCIPIO DE DISEÑOLa estrategia más simple que resuelve el problema real suele ser el mejor diseño.

El procesamiento de notificaciones se volvió más predecible ante picos de carga.

Distribuir el trabajo de notificaciones entre múltiples canales de procesamiento redujo la concentración de operaciones concurrentes que llegaban al servicio de notificaciones al mismo tiempo.

El sistema continuó procesando trabajo en paralelo, pero dentro de una capacidad de procesamiento definida. Esto facilitó razonar sobre el comportamiento de la carga y redujo el riesgo de concurrencia no controlada durante las ráfagas.

01Carga de trabajo distribuida

El trabajo de notificaciones entrante se repartió entre múltiples canales de procesamiento en lugar de concentrarse en una sola ruta de ejecución.

02Concurrencia controlada

El número de rutas de procesamiento concurrente quedó limitado por la capacidad configurada de los canales.

03Comportamiento más predecible

Los picos de carga fueron más fáciles de analizar porque la capacidad de procesamiento era explícita en vez de crecer con la demanda entrante.

04Mejor manejo de picos

El sistema podía continuar procesando trabajo de notificaciones en paralelo sin permitir que las ráfagas crearan presión concurrente no controlada.

IDEA CENTRALMás concurrencia no siempre significa mayor capacidad de procesamiento.

La cantidad adecuada de concurrencia depende de la capacidad y el comportamiento del sistema que recibe el trabajo.

La concurrencia debe diseñarse alrededor de la capacidad, no simplemente maximizarse.

El procesamiento paralelo puede mejorar la capacidad de procesamiento, pero permitir que más trabajo se ejecute simultáneamente no hace automáticamente que un sistema sea más rápido. En algún punto, la concurrencia adicional se convierte en presión sobre el siguiente componente de la cadena.

Esta experiencia reforzó la importancia de comprender toda la ruta de procesamiento antes de elegir una estrategia de concurrencia. El objetivo no es el paralelismo máximo, sino la cantidad adecuada de paralelismo para la capacidad real del sistema.

CONCLUSIÓNNo maximices la concurrencia. Contrólala.