En la programación de tareas, existen dos estrategias para implementar la limitación de aplicación: habilitar el control de flujo con un tamaño de cola específico o configurar una cola de prioridades con apropiación. Estos métodos ayudan a mantener estable el sistema de programación y garantizan que las tareas críticas se ejecuten a tiempo.
Casos de uso
Los picos repentinos en la programación de tareas generan una presión enorme sobre el sistema. Por ejemplo, si muchas tareas diarias están programadas para iniciar al mismo tiempo, la carga concurrente puede saturar los servicios de backend y provocar fallas. Para evitarlo, utilice un mecanismo de colas que limite las tareas concurrentes dentro de una aplicación. De este modo, las tareas se despachan de forma incremental y se mantiene la estabilidad operativa.
Procedimiento
Habilitar el control de flujo y establecer el tamaño de la cola
-
Cuando cree o edite un grupo de aplicaciones, habilite el interruptor flow control en la sección de advanced configuration. Esta función está deshabilitada de forma predeterminada. Para obtener más información sobre cómo crear un grupo de aplicaciones, consulte Create an application group.
Una vez habilitado el interruptor, configure el number of concurrent task instances. Este parámetro define el número máximo de instancias de tarea que pueden ejecutarse simultáneamente en la aplicación. Las tareas que superen este límite no se descartan, sino que se colocan en una cola para esperar su ejecución.
En este grupo de aplicaciones, cree tres tareas y haga clic en Run Once para cada una en la columna Actions.
En el panel de navegación izquierdo, vaya a la página Execution List y seleccione la pestaña Task Instance List. La primera tarea activada, hello_jobA, se está ejecutando, mientras que hello_jobB y hello_jobC esperan en el pool.
-
Cuando hello_jobA finaliza con éxito, hello_jobB se extrae de la cola para su ejecución.
En este punto, el estado de hello_jobB en la lista de instancias cambia a running, mientras que hello_jobC permanece en el pool.
Configurar una cola de prioridades con apropiación
Por ejemplo, YARN utiliza colas de prioridades para aislar los recursos de las tareas según su prioridad.
El panel Application Queues del ResourceManager de YARN muestra el uso de capacidad de las colas root, research y default. La cola root tiene una capacidad del 100.0 %, la subcola research alcanza el 93.8 % y la subcola default llega al 101.6 %, lo cual supera su capacidad asignada. Esto ilustra cómo se aíslan los recursos y cómo compiten por ellos las tareas con distintas prioridades.
SchedulerX combina la limitación de aplicación y la prioridad de las tareas para implementar una cola de prioridades con apropiación de la siguiente manera.
-
Las tareas admiten la asignación de prioridades. Dentro de una misma aplicación, si varias tareas se programan al mismo tiempo, se despachan primero las de mayor prioridad.
Durante la creación de la tarea, en el paso Basic Configuration, la lista desplegable Priority ofrece cuatro opciones: low, medium, high y very high.
-
Habilite el control de flujo para la aplicación de ejemplo dts-all.hxm y establezca el number of concurrent task instances en 1 para facilitar la observación. A continuación, cree tres tareas con prioridades alta, media y baja. Active cada tarea una vez en el siguiente orden: prioridad media, prioridad baja y, por último, prioridad alta.
La lista de tareas en la página Task Management de la consola muestra las tres tareas creadas. La columna Priority indica high, medium y low, respectivamente, y cada tarea cuenta con un botón Run once en la columna Actions.
-
En el panel de navegación izquierdo, vaya a la página Execution List y seleccione la pestaña Task Instance List. Al activar la tarea de prioridad media, esta se ejecuta de inmediato porque la cola está vacía.
En este momento, el estado tanto de la tarea de prioridad alta como de la tarea de prioridad baja es pool, mientras que el estado de la tarea de prioridad media es running.
-
Cuando la tarea de prioridad media termina, queda disponible un espacio de ejecución en la cola. Entonces, la tarea de prioridad alta se apropia del espacio de la tarea de prioridad baja y comienza a ejecutarse.
En este punto de la lista de tareas, el estado de la tarea de prioridad media es succeeded, el de la tarea de prioridad alta es running y la tarea de prioridad baja permanece en el pool a la espera de ser programada.
Preguntas frecuentes
-
Si establezco la prioridad de todas mis tareas en very high, ¿se garantiza que se programarán antes que las tareas de otros usuarios?
No. La prioridad de las tareas solo aplica en el ámbito de la aplicación. Únicamente afecta el orden de programación dentro de esa aplicación específica y no influye en otras aplicaciones.
-
¿Es posible usar el control de flujo basado en colas para tareas que se ejecutan cada minuto?
Esta función está diseñada para escenarios con picos de tráfico repentinos. No se recomienda para programaciones de alto volumen a nivel de minutos, ya que la cola podría crecer de forma indefinida. En estos casos, considere implementar una limitación del lado del cliente o escalar sus clientes para manejar la carga.