Ajuste y escala del motor de ThingWorx Flow
En el servicio del motor de ThingWorx Flow se incluyen varias opciones de configuración que pueden afectar excesivamente al rendimiento de ThingWorx Flow y a su ejecución de los flujos de trabajo. Estas opciones se encuentran en el fichero deploymentConfig.json del módulo del motor. Si se cambia alguna de estas opciones de configuración, el servicio ThingWorx Flow debe reiniciarse con las herramientas nativas de control de servicios para el sistema operativo (Servicios o sc para Windows, sysctl para Red Hat). En las siguientes secciones se describe cada una de las opciones de configuración pertinentes y se proporcionan recomendaciones sobre cómo configurarlas según el entorno y los recursos del sistema.
Rendimiento de la ejecución (CHANNEL_MAX_FETCH)
Tipo: entero
Por defecto: 10
Unidades: mensajes totales
Permite controlar el número máximo de mensajes de ejecución del flujo de trabajo que el servicio del motor gestionará. ThingWorx Foundation transmite estos mensajes cada vez que se ejecuta un servicio de flujo de trabajo, incluidos los flujos de trabajo independientes que se ejecutan manualmente o que utilizan un activador. Si se reduce este número, se limitará el número de flujos de trabajo que el motor puede ejecutar simultáneamente.
Los entornos de desarrollo deben configurarlo para que coincida con el número de núcleos del sistema. Los sistemas de producción deben configurarlo entre el 50 y el 200 % del número de núcleos, en función del número de otros servicios que se ejecutan en el mismo ordenador.
Asignación de memoria del convertidor (ENGINE_SIZE)
Tipo: entero
Por defecto: 1802
Unidades: megabytes (10.242 bytes)
Representa la cantidad máxima de memoria en megabytes que un proceso de convertidor del motor puede asignar para los objetos. Entre los factores que se deben tener en cuenta para la configuración de este valor se incluyen:
Número de actividades en un flujo de trabajo
Complejidad de las expresiones en línea o las acciones de Node.js
Cantidad de datos recuperados o procesados por acción
Recomendaciones de implementación: se recomienda dejarlo en su valor por defecto en entornos de desarrollo. En los entornos de producción, ENGINE_SIZE se debe configurar para que sea aproximadamente la cantidad máxima de RAM del sistema dividida por la configuración que se utiliza para CHANNEL_MAX_FETCH.
Tiempo máximo de ejecución (MAX_FLOW_RUN_TIME)
Tipo: entero
Por defecto: 300.000
Unidades: milisegundos
Permite controlar la cantidad total de tiempo en milisegundos que un flujo de trabajo puede ejecutar por ejecución. Esta configuración impedirá que un convertidor del motor ejecute un flujo de trabajo durante un período de tiempo excesivo. Este valor variará en función de la implementación y del entorno de red presente. Sin embargo, se recomienda mantener este valor bajo para que evitar que los convertidores permanezcan no disponibles durante períodos de tiempo prolongados, ya que esto puede provocar una degradación del rendimiento general del flujo. Será necesario lograr un equilibrio adecuado entre proporcionar tiempo suficiente para que el flujo de trabajo finalice la ejecución y mantener el valor suficientemente bajo, de modo que los convertidores del motor estén disponibles lo antes posible.
Recomendaciones de implementación: se recomienda dejarlo en su valor por defecto para entornos de desarrollo o en valores más largos si es necesario para fines de depuración. Para los entornos de producción, se recomienda definir el valor en la longitud más larga del flujo de trabajo de ejecución más un 15 %.
Período de recuperación del convertidor (SLEEP_BETWEEN_FLOW_EXECUTION)
Tipo: entero
Por defecto: 3.000
Unidades: milisegundos
Permite insertar una demora adicional en milisegundos antes de que un convertidor del motor pueda ejecutar un flujo de trabajo. Esto se destina principalmente a permitir que el sistema operativo reclame memoria de los convertidores del motor eliminados, lo que permite una mayor seguridad en los entornos que no requieren que el espacio de memoria se comparta entre las ejecuciones de flujos de trabajo.
Recomendaciones de implementación: para los entornos de desarrollo y la mayoría de los de producción, se recomienda definir este valor en 0. Para entornos de varios inquilinos con información confidencial que no se puede entremezclar, se recomienda dejarlo con el valor por defecto o aumentar según sea necesario. No hay ningún valor que garantice que el sistema operativo haya reciclado correctamente la memoria.
Anulación de los convertidores del motor después de la ejecución del flujo (KILL_WORKER_AFTER_RUN)
Tipo: booleano
Por defecto: false
Siempre que se ejecuta un flujo de trabajo, el servicio del motor creará un proceso de convertidor que controlará la ejecución real del flujo de trabajo (hasta el valor definido por CHANNEL_MAX_FETCH). Por defecto, los procesos de convertidor seguirán activos para atender solicitudes de ejecución adicionales. Esta configuración modifica el comportamiento de modo que, una vez finalizada la ejecución del flujo de trabajo, se anula el proceso de convertidor.
Recomendaciones de implementación: para los entornos de desarrollo y la mayoría de los de producción, se recomienda dejarlo en el valor por defecto. Para entornos de varios inquilinos que tienen información confidencial que no se puede entremezclar, se recomienda definir esta opción en verdadero.
Recuento de reintentos de disponibilidad del convertidor (AVAILABLE_WORKER_CHECK_TRIES)
Tipo: entero
Por defecto: 10
Unidades: reintentos
Si todos los procesos de convertidor están en uso, pero hay una solicitud de flujo de trabajo pendiente, el servicio del motor seguirá intentando reservar un proceso de convertidor tantas veces como se haya configurado. Si se ha intentado el número máximo de reintentos, el motor no podrá realizar la solicitud de ejecución.
Recomendaciones de implementación: para fines de desarrollo, es suficiente mantenerlo en el valor por defecto. Para los entornos de producción, se recomienda definirlo en un valor razonable; junto con la configuración AVAILABLE_WORKER_CHECK_INTERVAL. No es aconsejable que la demora total supere aproximadamente la mitad del tiempo total de servicio de solicitud.
Demora de reintento de disponibilidad del convertidor (AVAILABLE_WORKER_CHECK_INTERVAL)
Tipo: entero
Por defecto: 3.000
Unidades: milisegundos
Permite determinar cuánto tiempo espera el servicio del motor antes de intentar reservar un proceso de convertidor para la ejecución del flujo de trabajo, en el supuesto de que el primer intento falle.
Recomendaciones de implementación: para fines de desarrollo, es suficiente mantenerlo en el valor por defecto. Para los entornos de producción, se recomienda definirlo en un valor razonable; junto con la configuración AVAILABLE_WORKER_CHECK_TRIES. No es aconsejable que la demora total supere aproximadamente la mitad del tiempo total de servicio de solicitud.
Demora de la detención de procesos de convertidor (WORKER_DISMISS_INTERVAL)
Tipo: entero
Por defecto: 1.800
Unidades: segundos
Permite especificar cuánto tiempo el servicio del motor espera trabajo adicional antes de que empiece a anular los procesos de convertidor. Este valor no tiene ningún significado si KILL_WORKER_AFTER_RUN se ha definido en verdadero.
Recomendaciones de implementación: en entornos locales, normalmente basta con dejarlo en el valor por defecto. En el caso de implementaciones en la nube o entornos con memoria restringida, puede ser conveniente reducir este valor, en especial si los flujos de trabajo solo se utilizan ocasionalmente.
Ejemplo de configuración del motor
El fichero el motor de ejemplo deploymentConfig.json es el siguiente:
{
"MAX_FLOW_RUN_TIME": 180000, // Only allows a workflow to run for up to 3 minutes.
"EXCHANGE_STATUS_CHECK_INTERVAL": 120000, // Checks if it can communicate with the Exchange service every 2 minutes.
"REFRESH_ON_INTERVAL_MINUTES": 60,
"ENGINE_PORT": 2006, // The port Engine will reserve for health check purposes
"ENGINE_HOST": "localhost", // The hostname Engine will reserve the port against
"SLEEP_BETWEEN_FLOW_EXECUTION": 3000, // Waits 3 seconds before a worker can execute the next workflow
"ENGINE_DATA_PATH": "C:/ThingWorxOrchestration/modules/cache", // Location where files are stored during workflow execution
"EXCHANGE": { // The host and port for the Exchange service that this Engine should communicate with
"HOST": "localhost",
"PORT": "7822"
},
"logLevel":"error", // valid levels are 'trace', 'debug', 'info', 'warn', and 'error'; default is 'error'
"QUEUE": {
"MAX_SOCKET": 100,
"QUEUE_CONSUMPTION_UNIT": {
"256": 1
},
"DEFAULT_FLOW_QUEUE": "256",
"ACTIVE_ADAPTER_DEFAULT": "amqp",
"ACTIVE_ADAPTER_FLOW": "amqp",
"ACTIVE_ADAPTER_STOP": "amqp",
"ACTIVE_ADAPTER_WEBHOOK": "amqp",
"ADAPTERS": {
"AMQP": {
"CONFIG": { // The host and port for the RabbitMQ server
"port": "5672",
"protocol": "amqp",
"host": "localhost",
"vhost": "orchestration",
"CHANNEL_MAX_FETCH": "5" // The maximum number of messages this Engine will fetch from the queue
},
"FLOW_QUEUE": {
"QUEUE_NAMES": {
"256m": "256mb"
},
"QUEUE_NAME": "256mb"
}
}
}
}
}