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.
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.
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.
Múltiples eventos de rastreo podían activar trabajo de notificación en un corto periodo de tiempo.
Demasiado trabajo llegando simultáneamente a la capa de procesamiento podía concentrar la carga en el servicio de notificaciones.
Sin una capacidad de procesamiento controlada, los picos de carga podían producir comportamientos de ejecución significativamente distintos.
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.
El número de canales de procesamiento permaneció fijo, proporcionando una cantidad predecible de trabajo concurrente.
Round-Robin ofreció una forma simple y predecible de distribuir el trabajo entrante sin coordinación adicional ni lógica de balanceo compleja.
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.
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.
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.
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.
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.
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.
El trabajo de notificaciones entrante se repartió entre múltiples canales de procesamiento en lugar de concentrarse en una sola ruta de ejecución.
El número de rutas de procesamiento concurrente quedó limitado por la capacidad configurada de los canales.
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.
El sistema podía continuar procesando trabajo de notificaciones en paralelo sin permitir que las ráfagas crearan presión concurrente no controlada.
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.