<< Clic para mostrar Tabla de Contenidos >> Escalabilidad del servicio Scheduler |
Introducción
Cada proyecto de Bizagi necesita un servicio llamado el Programador (incluido por la instalación de Automation Server).
El Programador es un agente ejecutado por Bizagi el cual está a cargo de realizar el mantenimiento del sistema, las tareas fuera de línea -asíncronas- y otros trabajos que se ejecuten en un segundo plano y que pueden ser programados (configurados para ser lanzados periódicamente).
Cuando ejecuta sus procesos en una plataforma .NET, el Programador se instala como servicio de Windows con un nombre que hace referencia al nombre del proyecto específico.
El Programador puede ser configurado en clúster para soportar balanceo de cargas de estas tareas que son ejecutadas en segundo plano.
La siguiente imagen ilustra una configuración de alta disponibilidad, donde se involucra un servicio redundante del Programador:
Sin embargo, para proyectos que requieren significativamente ejecutar tareas en segundo plano, usted puede instalar y instancias adicionales del Programador, ya sea instalándolas en servidores aparte (nodos del clúster), instalándolas en el mismo servidor, o bajo cualquier combinación de las anteriores:
Al configurar múltiples servicios del Programador, nótese que aunque se pueden configurar varias instancias sobre un mismo nodo, siempre será más recomendable configurarlos lo más independientemente posible (de manera que cada nodo utilice su propio servidor dedicado y recursos). Esto se debe a que así se evitan los puntos únicos de fallo (ante una eventual falla en un nodo, no se afectará más de una instancia del Programador). Por ejemplo, usted podrá optar por diversos servidores separados ejecutando el Programador (según las necesidades de su proyecto), incluso de manera aislada al Portal de Trabajo de Bizagi. |
¿Por qué configurar múltiples servicios del Programador?
Por defecto, cada proyecto de Bizagi opera con una instancia del servicio Programador.
Sin embargo, usted puede configurar múltiples servicios del Programador y cada uno de estos trabajará en un lote de tareas de segundo plano, de manera paralela.
Esto le permite lograr uno de los siguientes dos aspectos, o ambos:
Configuración de un sistema con arquitectura de alta disponibilidad.
En esta configuración, usted puede tener un clúster de Bizagi para contar con capacidades de balanceo de cargas, donde cada nodo es un Automation Server operacional con sus 2 componentes principales: el Portal de Trabajo de Bizagi (web application) y el Programador.
De esta manera, la arquitectura de su sistema evita únicos puntos de fallo (de manera que si un nodo falla, el otro continúe trabajando y no haya interrupción del servicio).
Para más información sobre la configuración del clúster de Bizagi, consulte Configuración de un Cluster de Bizagi.
Escalabilidad del Programador.
En algunos escenarios y de acuerdo a las características de la implementación del proyecto, el uso de más de un servicio de Programador procesando las tareas en segundo plano, es útil para asegurar que las tareas en segundo plano no permanecen mucho tiempo en una cola.
De acuerdo al análisis específico de la cantidad de tareas que el Programador necesita procesar en un tiempo dado y su SLA esperado (p.e dado por su análisis de dimensionamiento), usted puede instalar y configurar más de una instancia del Programador en el mismo servidor y sin la necesidad de hacer lo mismo para el Portal de Trabajo (escalar únicamente el Programador).
Antes de empezar
Los pasos que se describen a continuación, partes desde un proyecto ya configurado (Automation Server configurado adecuadamente, sea en clúster o en una arquitectura de servidor único).
Observe que a pesar de tener múltiples servicios del Programador, se distribuirá la carga de las tareas en segundo plano entre ellos, identifique el siguiente tratamiento:
Sólo un Programador va a ejecutar el mantenimiento del sistema
El mantenimiento del sistema que es llevado a cabo por el Programador, involucra mover la información desde las tablas transaccionales en la base de datos y se lleva a cabo en horas no laborales.
Cuando se tiene múltiples Programadores, es importante predefinir qué Programador estará encargado de ejecutar el mantenimiento del sistema, de tal manera que pueda configurarlo adecuadamente (un Programador "maestro").
Cada Programador tomará un lote de 10 tareas
Cuando cada servicio de Programador está listo para procesar tareas (de acuerdo a la definición del intervalo del Programador, como se describe en Configuración de los parametros de Bizagi), bloqueará previamente un lote de 10 tareas aunque vaya a trabajar con una a la vez y sea incierto cuánto tiempo tomará procesar la primera (o el lote completo).
El lote de 10 tareas y las tareas en segundo plano procesadas por el Programador en general, siguen el algoritmo de prioridad PEPS (una cola Primero en Entrar, Primero en Salir).
Lo anterior implica que la cantidad de tareas entrantes a procesar en un momento dado (en un periodo de tiempo muy corto), no excede las 10 tareas, entonces es común que el uso de servicios de Programador adiciona no balanceen las cargas entre ellos.
¿Qué necesita hacer?
Para configurar múltiples servicios del Programador, lleve a cabo los siguientes pasos:
1. Instale los servicios del Programador adicionales.
Esto se hace ya sea a través de la opción clústers de la Consola de Administración o a través de una instalación manual.
Se deben tener en cuenta consideraciones de nombramiento especiales cuando instale múltiples servicios del Programador en el mismo servidor.
2. Copie la carpeta "Herramientas" cuando utilice varios servidores.
Cada Scheduler usa algunas librerias de esta carpeta para ejecutar algunas tareas. Por lo tanto, debe copiar y pegar esta carpeta en cada nodo.
3. Configure los servicios del Programador adicionales.
Recuerde que sólo un Programador debe ejecutar el mantenimiento del sistema.
Las configuraciones adicionales orientadas al número de hilos ejecutados por cada Programador son opcionales para optimizar el paralelismo.
Procedimiento
Siga estos pasos.
1. Instale los servicios del Programador adicionales
Los Programadores adicionales son creados a través de la opción clústers de la Consola de Administración cuando se crea un primer servicio del Programador en dicho servidor.
Para ver más información sobre la configuración del clúster de Bizagi donde incluye un Programador adicional, consulte Configuración de un Cluster de Bizagi.
Si está instalado múltiples servicios del Programador en el mismo servidor, lleve a cabo lo siguiente:
1.1 Cree una copia (clone) de la carpeta de Scheduler.
Copie, pegue y renombre la carpeta localizada por defecto en C:\Bizagi\Projects\[su_proyecto]\Scheduler\.
Haga esto por cada servicio del Programador adicional que requiera en ese mismo servidor.
En este ejemplo, vamos a tener 3 servicios en el servidor:
1.2 Edite los archivos .bat dentro de las nuevas carpetas Scheduler.
Como una mejor práctica, asegúrese de editar todos los archivos .bat para mostrarlos listos cuando se necesiten.
Edite install.bat, installx64.bat, uninstall.bat y uninstallx64.bat cambiando el nombre del servicio del Programador, de tal manera que es único dentro del mismo servidor:
Observe que en este ejemplo, usamos el mismo nombre seguido de un sufijo numérico.
Para el servicio número tres, tenemos:
Guarde los cambios cuando termine.
1.3 Ejecute el archivo installx64.bat (o install.bat si aplica) para instalar cada nuevo servicio del Programador.
Dé clic en el archivo .bat de instalación de acuerdo a la arquitectura de su sistema para instalar el servicio.
Haga esto por cada servicio del Programador adicional que se desee instalar.
Asegúrese de tener privilegios de administrador y que tuvo una ejecución exitosa:
Al final, debe ver sus servicios de programador adicionales instalados y listados en sus servicios de Windows:
No inicie los servicios en este punto (necesitara editar primero su configuración).
2. Copie la carpeta Herramientas si está utilizando un servidor diferente.
El Scheduler usa librerías ubicadas en otras carpetas del proyecto. Debe copiar estas librerías en cada nuevo nodo del Scheduler que se encuentra en un servidor diferente. Si tiene un clúster, debe hacerlo en cada servidor donde se haya instalado un Scheduler.
Para hacerlo, vaya al servidor principal y ubique la carpeta del proyecto, generalmente ubicada en:
C: \ BIZAGI \ PROJECTS \ [tu_proyecto]
Seleccione la carpeta Herramientas y cópiela.
Vaya a la carpeta del proyecto del segundo servidor y pegue la carpeta Herramientas.
3. Configure los servicios del Programador adicionales
Define cuál de todos los servicios de Programador llevará a cabo las tareas de mantenimiento.
Considere todos sus servicios de Programador dentro de la solución (solo 1 dentro de todos los nodos que pueda tener en un clúster, incluyendo los múltiples servicios que pueda tener en cada nodo).
Podemos llamar al primero como el Programador "maestro" y este no requerirá configuraciones adicionales.
Para todos los otros servicios de programador, edite el archivo .config localizado por defecto en C:\BIZAGI\PROJECTS\[your_project]\SchedulerN3\BizAgi.Scheduler.Services.exe.config e incluya la siguiente llave dentro del elemento <appSettings>:
<add key="DisableAsynchCaseClosing" value="1"/>
Al configurar más de una instancia del Programador en un mismo nodo, es fundamental que también edite la ubicación de la carpeta temporal que usa cada Programador por aparte (para evitar inconvenientes que puedan surgir cuando múltiples servicios intenten acceder a los mismos archivos de manera simultánea). Para especifica el uso de una carpeta temporal diferente para cada instancia de Programador, edite la llave Project asegurándose se asignar un valor diferente, no repetido, en cada archivo de configuración. Por ejemplo, usar para 2 instancias en un mismo nodo: <add key="Project" value="Scheduler1" /> y <add key="Project" value="Scheduler2" />. |
En este punto puede guardar los cambios e iniciar el servicio del Programador (un inicio libre de errores valida que todos trabajen juntos):
Consideraciones cuando use Actividades Asíncronas
Como una configuración adicional, puede poner a punto los parámetros de procesamiento de los Programadores incluyendo la siguiente llave en sus respectivos archivos .config (dentro del elemento <appSettings>) para configurar el número de hilos que usará cada servicio del Programador:
<add key="MaxThreadsForAsynchWorkitems" value="[numero_de_hilos]"/>
Esta llave es útil especialmente cuando su proyecto espera un gran número de ejecuciones de tarea asíncronas, en grandes bloques.
Cuando seleccione modificar el número de hilos usados por el servicio del Programador (por defecto usa uno), asegúrese de considerar un balanceo apropiado de cargas entre el número de servicios del programador que usará y el numero de hilos que ejecuta cada uno en paralelo.
Tenga en cuenta que al modificar este valor debe ser analizado y probado adecuadamente, de acuerdo al número estimado de tareas en segundo plano, las características y el estimado del procesamiento involucrado en cada una de estas tareas y lo más importante, de acuerdo a las características del hardware subyacente (e.g número de núcleos y procesadores de sus servidores). Se recomienda vigilar este valor y optimizarlo como sea necesario mientras lleve a cabo las pruebas de aceptación para este escenario para usar la distribución más adecuada. |
Cuando use múltiples servicios del programados para procesar múltiples actividades asíncronas, se recomienda incluir la siguiente llave:
<add key="DisableInterfaceErrorLogger" value="1"/>
Esta llave optimiza el desempeño debido a que omite el log en el archivo .csv para los threshold y los timeout y previene los incidentes potenciales cuando múltiples servicios escriben en el mismo archivo.
Numeración de los programadores
Si está utilizando múltiples Schedulers, debe numerar cada nodo, para que Bizagi pueda darse cuenta de la cantidad de servidores y Schedulers de su ambiente. Para eso Bizagi usa algunas claves que deben ser configuradas dentro del archivo de configuración de cada Programador, generalmente ubicadas en:
C:\BIZAGI\PROJECTS\[your_project]\[SchedulerName]\BizAgi.Scheduler.Services.exe.config
Luego incluya las siguientes llaves:
<add key = "SchedulerClusterID" value = "1" />
<add key = "SchedulerClusterSize" value = "1" />
Donde:
SchedulerClusterID: Es un identificador de numeración, que ayuda a Bizagi a identificar a cada Scheduler individualmente. Este es un número consecutivo, comenzando por 1, y no puede ser mayor que el tamaño del clúster.
SchedulerClusterSize: número total de Scheduler configurados por entorno.
Los valores de estas llaves dependen número de cada Scheduler. Entonces, por ejemplo, si tiene dos Schedulers, la configuración para cada Scheduler es:
Nodo 1
<add key = "SchedulerClusterID" value = "1" />
<add key = "SchedulerClusterSize" value = "2" />
Nodo 2
<add key = "SchedulerClusterID" value = "2" />
<add key = "SchedulerClusterSize" value = "2" />
Definir la carpeta del proyecto del Scheduler
Cuando los proyectos son locales, cada proyecto tiene una carpeta ubicada en el servidor principal de Bizagi. Cuando crea varios Schedulers, es importante definir la carpeta del proyecto para el Scheduler nuevo. Para hacerlo, la llave "IsLocally" debe estar activa, incluya esta llave con el siguiente formato:
<add key = "IsLocally" value = "true" />
Si necesita definir una ruta diferente al valor predeterminado, debe agregar la clave [“WorkingPath”], esta clave omite el valor de la clave [“Proyecto”], por lo tanto, la ruta debe incluir el nombre donde se encuentran los directorios de se crea la nueva instancia del Scheduler.
Ejemplo: <add key = "WorkingPath" value = "C: \ Bizagi \ Projects \ [nueva instancia del Scheduler]" />
Notas importantes
Cuando se tienen multiples servicios del programador, todos estos servicios deben ser detenidos antes de hacer un deployment de proceso.
De igual manera, con esta configuración, considere sus múltiples servicios del programados cuando actualice la versión de Bizagi de tal manera que detenga y actualice todos (e.g actualizar el archivo mpas reciente de la librería usada por ellos).