Cómo afinar el Scheduler de Bizagi en entornos de clúster

<< Clic para mostrar Tabla de Contenidos >>

Cómo afinar el Scheduler de Bizagi en entornos de clúster

 

Cómo afinar el Scheduler de Bizagi en entornos de clúster

  •     Introducción
  •     Definiciones
  •     Medición de su infraestructura
  •     Archivos de configuración
  •     Llaves de configuración
  •     Ajuste fino de ejecución de trabajos y RPA
  •     Afinando el Scheduler
  • Introducción

    La configuración de Bizagi Scheduler para un mejor rendimiento depende de la configuración de cada entorno. Depende de tres factores: la infraestructura del cliente, el paralelismo y el modelado del cliente. La mejor práctica al ajustar su Bizagi Scheduler es incluir tareas de verificación de rendimiento que funcionen junto con las pruebas de carga. Esto permite que la configuración precisa del Scheduler obtenga la mejor combinación en la que el rendimiento es óptimo.

     

    El siguiente documento presenta una breve explicación de las teclas utilizadas para hacer un ajuste fino del Programador. Además, le proporciona detalles sobre los Schedulers master y slave, y detalles sobre cómo puede ajustar el rendimiento para su entorno de producción.

     

    Definiciones

    Tenga en cuenta las siguientes definiciones:

    Un Scheduler Master se encargar de coordinar las tareas ejecutadas por cada Scheduler Slave y ejecuta tareas adicionales como las tareas de mantenimiento. Es obligatorio tener uno y solo un Scheduler Master configurado.

    Un Scheduler Slave se encarga de procesar una tarea asignada.

    Un núcleo (core en inglés) es la unidad de procesador dentro de una CPU.

    Los núcleos de procesador son los núcleos físicos en la CPU. Por ejemplo, si un servidor tiene un procesador QUAD-CORE tiene cuatro núcleos.

    Los hilos (threads en inglés) son la versión virtual del núcleo de una CPU ejecutando una instrucción.

    El procesador lógico, o núcleos lógicos, es el resultado del número de núcleos multiplicado por el número de hilos que se pueden ejecutar en cada núcleo. Esto se conoce como HyperThreading. Por ejemplo, si se tiene un procesador QUAD-CORE, con dos hilos por núcleo, se tendrían ocho procesadores lógicos o núcleos lógicos.

    El multithreading es la capacidad de ejecutar varias instrucciones al tiempo. Esto se logra de las siguientes maneras: usando varios núcleos o con HyperThreading.

     

    A continuación hay un ejemplo de las definiciones:

     

    Scheduler_05

     

    Medición de su infraestructura

    El primer paso es medir las capacidades de procesamiento del Scheduler utilizando las siguientes métricas y medidas:

     

    Consumo de CPU del servidor donde se ejecutan los Schedulers

    Conteo de trabajos / tareas pendientes

     

    note_pin

    Aunque existen múltiples métricas y variables que puede considerar para medir el rendimiento de un servidor o sistema, esta sección se centra en el rendimiento del Scheduler de Bizagi.

     

    Para contar el número de trabajos / tareas pendientes, ejecute las siguientes consultas en la base de datos del proyecto:

     

    Tipo de tarea

    Tabla

    Consulta para recuperar tareas pendientes

    Actividades asincrónicas

    ASYNCHWORKITEM

    select count(*) from ASYNCHWORKITEM where awState != 0 AND awProcessing != 1

    Temporizadores y otros trabajos

    JOB

    select count(*) from job where jobEnabled = 1 and jobNextRunTime < GETDATE()

     

    Con estas dos métricas, puede decidir si necesita ajustar el Scheduler existente o escalar la infraestructura. El siguiente algoritmo lo guía a través del patrón de escala:

     

    SchedulerScalingPatternsESP

     

    Si el uso de la CPU de su servidor es inferior al 60%, puede aumentar el número de subprocesos en el Scheduler de forma segura, siempre que tenga capacidades de subprocesamiento. Recuerde que debe tener en cuenta los siguientes parámetros: MaxThreadsForCustomJobs, MaxThreadsForJobs y MaxThreadsForAsynchWorkitems. Si el uso de su CPU está entre 60% y 75%, aún puede aumentar los parámetros de procesamiento (threading) del Scheduler, siempre que su servidor no se vea afectado por otras métricas como RAM o uso de disco. Esto depende completamente de la configuración de su servidor. Si su servidor excede el 75% del uso de la CPU, puede aumentar su hardware en el mismo servidor, agregando más procesadores físicos o agregando un nuevo servidor con un nuevo Scheduler. Si es posible, escale siempre los servidores, porque con un nuevo servidor también incluye capacidades de RAM y disco.

     

    Se recomienda dejar un Scheduler por servidor y aumentar las capacidades de procesamiento (threading) por Scheduler.

     

    Archivos de configuración

    Para ajustar el Bizagi Scheduler, localice estos archivos:

     

    Localice el archivo web.config ubicado en C:\Bizagi\Projects\[NombreProyecto]\WebApplication y ábralo usando el editor de texto de su elección.

     

    FineTune_01

     

    Localice los archivos BizAgi.Scheduler.Services.exe.config ubicados en la carpeta C:\Bizagi\Projects\[ProjectName]\Scheduler de cada scheduler.

     

    FineTune_02

     

    Agregue las llaves de configuración necesarias para afinar su Bizagi Scheduler in the <appsettings> key. Ejemplo:

    <add key="AsyncTaskWorkingSetSize" value="10"/>

     

    Llaves de configuración

    De acuerdo con la infraestructura de su proyecto, tenga en cuenta la siguiente configuración mínima:

     

    Llave de configuración

    Descripción

    Valores por defecto

    Sugerencias

    Configuración de Scheduler de hilos

    ID_STACK_SIZE

    Agregue está llave en los archivos web.config y BizAgi.Scheduler.Services.exe.config de cada scheduler. La llave reduce los bloqueos en la asignación de ID de negocio durante las altas tasas de creación de casos.

    El valor por defecto es 50.

    Este valor nuca debe ser disminuido y cada Scheduler debe tener el mismo valor.

    AsynchTaskWorkingSetSize

    Agregue está llave en el archivo BizAgi.Scheduler.Services.exe.config de cada scheduler. Esta llave define el número de tareas asíncronas a ser recuperada de la base de datos para ser procesado por hilo.

    El valor por defecto es 10.

    El Scheduler revisa dentro de cada intervalo si hay tareas adicionales para ejecutar.

     

    Si este valor es muy bajo para la demanda de tareas esperada por el Scheduler, el Scheduler necesitará de más iteraciones para obtener todas las tareas pendientes.

    SchedulerAsyncProcessorIntervalInMillis

    Agregue está llave en el archivo BizAgi.Scheduler.Services.exe.configde cada scheduler. Esta llave establece el tiempo en milisegundos que definen los hilos en el procesador del scheduler interno para esperar la próxima ejecución de las tareas asíncronas cuando se ejecutó el BizagiSchedulerInterval.

    El valor sugerido es 500.

    Si el tamaño de la bolsa de tareas incrementa para las actividades asíncronas, el valor del intervalo debe aumentar. Esto permite procesar más tareas en un intervalo mayor por ciclo.

     

    Si el intervalo es muy largo, se pierde tiempo de procesamiento y el número de tareas pendientes puede incrementar.

    JobWorkingSetSize

    Agregue está llave en el archivo BizAgi.Scheduler.Services.exe.configde cada scheduler. Esta llave define el número de tareas de la pila que se proporcionarán para ser ejecutadas.

    El valor sugerido es 10.

    El Scheduler revisa dentro de cada intervalo si hay tareas adicionales para ejecutar.

     

    Si este valor es muy bajo para la demanda de tareas esperada por el Scheduler, el Scheduler necesitará de más iteraciones para obtener todas las tareas pendientes.

    SchedulerMaxJobWaitInterval

    Agregue está llave en el archivo BizAgi.Scheduler.Services.exe.configde cada scheduler. Esta llave define el número de tiempo de ejecución de espera cuando se alcanza el número máximo de trabajos.

    El valor sugerido es 1.

    Si el tamaño de la bolsa de tareas incrementa para las actividades asíncronas, el valor del intervalo debe aumentar. Esto permite procesar más tareas en un intervalo mayor por ciclo. También depende de la llave JobWorkingSize.

     

    Si el intervalo es muy largo, se pierde tiempo de procesamiento y el número de tareas pendientes puede incrementar.

    LaunchThreadForLog

    Agregue está llave en el archivo BizAgi.Scheduler.Services.exe.config de cada scheduler. Esta llave defines you need an extra thread to improve the logging.

    El valor sugerido es 1.

    Cuando hay deadlocks en la escritura del log, el valor puede cambiar a 0.

    Habilitar una opción para cada función

    MaxThreadsForAsyncEcm

    Agregue está llave en el archivo BizAgi.Scheduler.Services.exe.config de cada scheduler. Esta llave define el número máximo de hilos para ejecutar el ECM cuando la función asíncrona está activa.

    El valor por defecto es 2.

    Tenga en cuenta que este número NO PUEDE exceder el número de hilos de procesador. Por ejemplo, si tiene dos procesadores de cuatro núcleos que pueden ejecutar dos hilos por núcleo, el número máximo debe ser 16.

     

    Este valor debe tener el cuenta sus recursos de hardware y la frecuencia de ejecución de tareas del Scheduler.

    MaxThreadsForAsynchWorkitems

    Agregue está llave en el archivo BizAgi.Scheduler.Services.exe.config de cada scheduler. Esta llave define el número máximo de hilos para ejecutar las tareas asíncronas.

    El valor predeterminado es 4. En caso de que tenga un proyecto con una alta demanda de actividades asincrónicas, puede establecer este valor en 10 si está por debajo de su capacidad de procesamiento.

    Tenga en cuenta que este número NO PUEDE exceder el número de hilos de procesador. Por ejemplo, si tiene dos procesadores de cuatro núcleos que pueden ejecutar dos hilos por núcleo, el número máximo debe ser 16.

     

    Este valor debe tener el cuenta sus recursos de hardware y la frecuencia de ejecución de tareas del Scheduler.

    Intervalo de ejecución del Scheduler

    BizagiSchedulerInterval

    Agregue está llave en el archivo BizAgi.Scheduler.Services.exe.config de cada scheduler. Esta llave define el tiempo (en segundos) utilizado por Bizagi para procesar las tareas que vienen de la base de datos.

    El valor por defecto es 30.

     

    Si el tamaño de la bolsa de tareas incrementa para las actividades asíncronas, el valor del intervalo debe aumentar. Esto permite procesar más tareas en un intervalo mayor por ciclo.

     

    Si el intervalo es muy largo, se pierde tiempo de procesamiento y el número de tareas pendientes puede incrementar.

    MASTER / SLAVE

    DisableAsynchCaseClosing

    Agregue está llave en el archivo BizAgi.Scheduler.Services.exe.config de cada scheduler. Esta llave se usa para nombrar al scheduler principal y garantizar que este sea el único que ejecuta las tareas de mantenimiento.

    El valor por defecto es 0.

    Configure 0 para el Master scheduler y 1 para el Slave scheduler. Es obligatorio tener uno y solo un programador maestro configurado.

    DisableInterfaceErrorLogger

    Agregue está llave en el archivo BizAgi.Scheduler.Services.exe.config de cada scheduler. Esta llave se usa para habilitar el registrador de errores de interfaz solo en el scheduler principal y garantizar que este sea el único que registre todos los errores de interfaz.

    El valor por defecto es 0.

    Configure 0 para el Master scheduler y 1 para el Slave scheduler. Es obligatorio tener uno y solo un programador maestro configurado.

     

    Ajuste fino de ejecución de trabajos y RPA

    El Programador considera las ejecuciones de RPA y los trabajos personalizados como trabajos. En proyectos en los que tiene una gran demanda de RPA o ejecución de trabajos personalizados, recomendamos ajustar el programador utilizando los siguientes parámetros:

     

     

    Llave de configuración

    Descripción

    Valores por defecto

    Sugerencias

    Habilitar una opción para cada función

    MaxThreadsForCustomJobs

    Agregue está llave en el archivo BizAgi.Scheduler.Services.exe.config de cada scheduler. Esta llave define el número máximo de hilos para ejecutar los trabajos personalizados.

    El valor por defecto es 2.

    Tenga en cuenta que este número NO PUEDE exceder el número de hilos de procesador. Por ejemplo, si tiene dos procesadores de cuatro núcleos que pueden ejecutar dos hilos por núcleo, el número máximo debe ser 16.

     

    Este valor debe tener el cuenta sus recursos de hardware y la frecuencia de ejecución de tareas del Scheduler.

    MaxThreadsForJobs

    Agregue está llave en el archivo BizAgi.Scheduler.Services.exe.config de cada scheduler. Esta llave define el número máximo de hilos para ejecutar los trabajos.

    El valor por defecto es 2.

    Tenga en cuenta que este número NO PUEDE exceder el número de hilos de procesador. Por ejemplo, si tiene dos procesadores de cuatro núcleos que pueden ejecutar dos hilos por núcleo, el número máximo debe ser 16.

     

    Este valor debe tener el cuenta sus recursos de hardware y la frecuencia de ejecución de tareas del Scheduler.

     

    Es muy importante que si realiza cambios en alguno de estos parámetros, incluya la siguiente llave.

     

    <add key=“EnableThreadCounterOptimization" value="true" />

     

    note_pin

    Consideraciones:

    Los parámetros MaxThreadsForCustomJobs, MaxThreadsForJobs y MaxThreadsForAsynchWorkitems indican el número máximo de hilos generados por el Scheduler para ser ejecutados por cualquiera de los procesadores lógicos. Sin embargo, el software puede generar más hilos, dependiendo de qué tan rápido los procesen los procesadores lógicos y dejen espacio para ejecutar más. Por lo tanto, existe una diferencia entre los hilos generados y los procesadores lógicos (hilos vistos por el procesador).
    Por lo tanto, puede aumentar el número de hilos generados por el Scheduler para que sea mayor que el número de procesadores lógicos multiplicando el número de subprocesos generados por el número total de procesadores lógicos por 5. No aumente el valor mayor que este cálculo.

    Cuando se utilizan máquinas virtuales, la suma de los parámetros MaxThreadsForCustomJobs, MaxThreadsForJobs y MaxThreadsForAsynchWorkitems debe ser menor o igual que el número de vCPU multiplicado por el número de procesadores lógicos multiplicado por el número de hilos generados.

     

    Afinando el Scheduler

    El ajuste de los valores para las llaves mostradas debe realizarse de acuerdo con los resultados de la fase de prueba de rendimiento de su proyecto. Siga estas recomendaciones para ajustar el rendimiento:

     

    Se recomienda tener una máquina independiente para los Schedulers.

    El rendimiento ideal ocurre cuando el número de workitems asíncronos (llave MaxThreadsForAsynchWorkitems) se procesa en la franja definida por el intervalo de Bizagi Scheduler (llave BizagiSchedulerInterval). Aumente los valores de las llaves AsynchTaskWorkingSetSize y BizagiSchedulerInterval hasta que sus tareas asíncronas se procesen en un tiempo óptimo.

    Si alcanza el valor máximo para la llave MaxThreadsForAsynchWorkitems, se recomienda agregar otro Scheduler usando los valores predeterminados y luego, aumentar los valores hasta que tenga el rendimiento ideal.

     

    note_pin

    Se recomienda realizar un monitoreo continuo de su infraestructura. Si encuentra algún aumento en términos de uso de la memoria o la CPU, debe tomar la decisión si desea ajustar los programadores o realizar cambios en la infraestructura para poder soportar la mayor demanda de recursos.

     

    Para más información vea Ejemplo de cómo afinar el Scheduler.

     

    En este articulo