orchestrator
2022.4
false
Importante :
Este contenido se ha localizado parcialmente a partir de un sistema de traducción automática.
UiPath logo, featuring letters U and I in white
Guía de instalación de Orchestrator
Automation CloudAutomation Cloud Public SectorAutomation SuiteStandalone
Last updated 7 de oct. de 2024

Mejores prácticas de rendimiento

La siguiente página describe los requisitos recomendados para entornos de producción a gran escala y proporciona un conjunto de prácticas recomendadas para mejorar su rendimiento.

Nota: para obtener más información sobre los requisitos mínimos para ejecutar Orchestrator, consulta las páginas Requisitos de hardware y Requisitos de software.

Requisitos recomendados para entornos de producción a gran escala

Para ejecutar 10000 robots atendidos o 1000 robots no atendidos, necesitarás:

  • Un equilibrador de carga F5
  • Orchestrator: al menos 6 nodos ejecutados en máquinas con 8 núcleos de CPU y 16 GB de RAM
  • Robots: máquinas con 4 núcleos de CPU y 16 GB de RAM
  • SQL Server: máquinas con 4 ranuras/16 núcleos de CPU (8 ranuras/16 núcleos de CPU por defecto) y 64 GB de RAM

    Nota: para reducir el contenido asignado de SQL Server en un entorno altamente concurrente, asegúrate de emplear un número óptimo de archivos de datos tempdb que tengan el mismo tamaño.

Cambios de Orchestrator para un rendimiento mejorado

Esta sección muestra una serie de ajustes que puedes realizar en el archivo UiPathOrchestrator.dll.config de Orchestrator para mejorar el rendimiento en un entorno de producción a gran escala.

Habilita Redis

<appSettings>
  <add key="LoadBalancer.UseRedis" value="true"/>
  <add key="LoadBalancer.Redis.ConnectionString" value="your.redis.cache.windows.net:6379,password=***"/>
</appSettings><appSettings>
  <add key="LoadBalancer.UseRedis" value="true"/>
  <add key="LoadBalancer.Redis.ConnectionString" value="your.redis.cache.windows.net:6379,password=***"/>
</appSettings>

Especifica un tamaño máximo de grupo en la cadena de conexiones

<connectionStrings>
  <add name="Default" providerName="System.Data.SqlClient" connectionString="Data Source=<SQLServer>;Initial Catalog=<dbName>;User ID=<username>;Password=***;Max Pool Size=1000" />
</connectionStrings><connectionStrings>
  <add name="Default" providerName="System.Data.SqlClient" connectionString="Data Source=<SQLServer>;Initial Catalog=<dbName>;User ID=<username>;Password=***;Max Pool Size=1000" />
</connectionStrings>

Escribe registros de Robot en Elasticsearch y utiliza AsyncWrapper

  • Añade o modifica el destino de registro para Elasticsearch utilizando los siguientes parámetros.
    xml <nlog> <targets> <target name="robotElasticBuffer" xsi:type="AsyncWrapper" overflowAction="Grow" queueLimit="10000" batchSize="1000" timeToSleepBetweenBatches="1"> <target xsi:type="ElasticSearch" name="robotElastic" uri="elastic.example.com:9200" requireAuth="true" username="***" password="***" index="${event-properties:item=indexName}-${date:format=yyyy.MM}" documentType="logEvent" includeAllProperties="true" layout="${message}" excludedProperties="agentSessionId,tenantId,indexName" /> </target> </targets> </nlog>xml <nlog> <targets> <target name="robotElasticBuffer" xsi:type="AsyncWrapper" overflowAction="Grow" queueLimit="10000" batchSize="1000" timeToSleepBetweenBatches="1"> <target xsi:type="ElasticSearch" name="robotElastic" uri="elastic.example.com:9200" requireAuth="true" username="***" password="***" index="${event-properties:item=indexName}-${date:format=yyyy.MM}" documentType="logEvent" includeAllProperties="true" layout="${message}" excludedProperties="agentSessionId,tenantId,indexName" /> </target> </targets> </nlog>
  • Añade o modifica la regla de registros de robot para escribir registros solo en el destino que se muestra en el ejemplo anterior. Esto deshabilita automáticamente el destino de la base de datos predeterminada.
    xml <nlog> <rules> <logger name="Robot.*" ruleName="primaryRobotLogsTarget" final="true" writeTo="robotElasticBuffer" /> </rules> </nlog>xml <nlog> <rules> <logger name="Robot.*" ruleName="primaryRobotLogsTarget" final="true" writeTo="robotElasticBuffer" /> </rules> </nlog>
  • Configura Orchestrator para leer registros de ElasticSearch.
    <appSettings>
       <add key="Logs.RobotLogs.ReadTarget" value="robotElasticBuffer" />
    </appSettings><appSettings>
       <add key="Logs.RobotLogs.ReadTarget" value="robotElasticBuffer" />
    </appSettings>

Utiliza un almacenamiento de alto rendimiento

Puedes optar por Azure Blob Storage para este propósito.

<appSettings>
  <add key="Storage.Type" value="Azure" />
  <add key="Storage.Location" value="DefaultEndpointsProtocol=https;AccountName=yourBlob;AccountKey=yourKey;EndpointSuffix=core.windows.net" />
</appSettings><appSettings>
  <add key="Storage.Type" value="Azure" />
  <add key="Storage.Location" value="DefaultEndpointsProtocol=https;AccountName=yourBlob;AccountKey=yourKey;EndpointSuffix=core.windows.net" />
</appSettings>

Deshabilita el modo de mantenimiento

Puedes desactivar el modo de mantenimiento si no lo utilizas.

<appSettings>
  <add key="MaintenanceMode.Enabled" value="false" />
</appSettings><appSettings>
  <add key="MaintenanceMode.Enabled" value="false" />
</appSettings>

Aumenta el tiempo de caché de la configuración de la aplicación

Puedes configurar Orchestrator para utilizar algunas cachés en memoria que reducen el número de llamadas a Redis. Por ejemplo, configurarlas para caducar cada 30 minutos significa que una vez realices un cambio en una configuración en alguna aplicación, puede que no se refleje hasta pasados 30 minutos.

El tiempo de vencimiento que establezcas aquí puede variar en función de qué retraso puedes tolerar, pero incluso un tiempo de caché de 5 minutos puede mejorar considerablemente el rendimiento.

<appSettings>
  <add key="Caching.MultiTier[AbpApplicationSettingsCache]" value="Memory" />
  <add key="Caching.MultiTier[AbpApplicationSettingsCache].ExpiresAfter" value="0:30:00" />
  <add key="Caching.MultiTier[AbpTenantSettingsCache]" value="Memory"/>
  <add key="Caching.MultiTier[AbpTenantSettingsCache].ExpiresAfter" value="0:30:00"/>
  <add key="Caching.MultiTier[AbpZeroTenantFeatures]" value="Memory"/>
  <add key="Caching.MultiTier[AbpZeroTenantFeatures].ExpiresAfter" value="0:30:00"/>
  <add key="Caching.MultiTier[AbpZeroRolePermissions]" value="Memory"/>
  <add key="Caching.MultiTier[AbpZeroRolePermissions].ExpiresAfter" value="0:30:00"/>
  <add key="Caching.MultiTier[LicenseKeys]" value="Memory"/>
  <add key="Caching.MultiTier[LicenseKeys].ExpiresAfter" value="0:30:00"/>
  <add key="Caching.MultiTier[TenantLicense]" value="Memory"/>
  <add key="Caching.MultiTier[TenantLicense].ExpiresAfter" value="0:30:00"/>
</appSettings><appSettings>
  <add key="Caching.MultiTier[AbpApplicationSettingsCache]" value="Memory" />
  <add key="Caching.MultiTier[AbpApplicationSettingsCache].ExpiresAfter" value="0:30:00" />
  <add key="Caching.MultiTier[AbpTenantSettingsCache]" value="Memory"/>
  <add key="Caching.MultiTier[AbpTenantSettingsCache].ExpiresAfter" value="0:30:00"/>
  <add key="Caching.MultiTier[AbpZeroTenantFeatures]" value="Memory"/>
  <add key="Caching.MultiTier[AbpZeroTenantFeatures].ExpiresAfter" value="0:30:00"/>
  <add key="Caching.MultiTier[AbpZeroRolePermissions]" value="Memory"/>
  <add key="Caching.MultiTier[AbpZeroRolePermissions].ExpiresAfter" value="0:30:00"/>
  <add key="Caching.MultiTier[LicenseKeys]" value="Memory"/>
  <add key="Caching.MultiTier[LicenseKeys].ExpiresAfter" value="0:30:00"/>
  <add key="Caching.MultiTier[TenantLicense]" value="Memory"/>
  <add key="Caching.MultiTier[TenantLicense].ExpiresAfter" value="0:30:00"/>
</appSettings>

Aumentar el valor de MinWorkerThreads

Establecer un valor más grande de MinWorkerThreads ayuda con los escenarios de aceleración.
<appSettings>
  <add key="ThreadPool.MinWorkerThreads" value="50" />
</appSettings><appSettings>
  <add key="ThreadPool.MinWorkerThreads" value="50" />
</appSettings>

Ajusta Quartz para un rendimiento muy alto

Este paso solo es necesario si tienes un número de desencadenadores muy alto, por ejempo, en torno a 2000 por minuto.

<quartz>
  <add key="quartz.scheduler.batchTriggerAcquisitionMaxCount" value="15" />
  <add key="quartz.threadPool.threadCount" value="15" />
  <add key="quartz.jobStore.misfireThreshold" value="3600000" />
  <add key="quartz.jobStore.clusterCheckinInterval" value="60000" />
  <add key="quartz.jobStore.clustered" value="true" />
</quartz><quartz>
  <add key="quartz.scheduler.batchTriggerAcquisitionMaxCount" value="15" />
  <add key="quartz.threadPool.threadCount" value="15" />
  <add key="quartz.jobStore.misfireThreshold" value="3600000" />
  <add key="quartz.jobStore.clusterCheckinInterval" value="60000" />
  <add key="quartz.jobStore.clustered" value="true" />
</quartz>

Deshabilita la resolución de IP a DNS en Audit

Puedes deshabilitar la resolución si no estás en una red empresarial o no necesitas ver los nombres DNS de las IP registradas en Audit.

<appSettings>
  <add key="Audit.UseDnsResolving" value="false" />
</appSettings><appSettings>
  <add key="Audit.UseDnsResolving" value="false" />
</appSettings>

Cambia a una estrategia más rápida de obtención de membresía de grupos

Nota: Directory.ActiveDirectory.GroupMembershipFetchStrategy y Directory.ActiveDirectory.AuthorizationGroupsCacheExpirationHours solo se aplican al adaptador AD heredado. Deberías utilizar estos ajustes solo si te actualizaste desde una versión de Orchestrator que tuviera AD habilitado a la versión 2021.10 o posterior.
Para establecer Directory.ActiveDirectory.GroupMembershipFetchStrategy como TokenGroups en la tabla [identity].[Settings], ejecuta:
SELECT * FROM [identity].[Settings] WHERE [Key]='Directory.ActiveDirectory.GroupMembershipFetchStrategy' and [PartitionId]=1
IF @@ROWCOUNT>0
    UPDATE [identity].[Settings] SET [Value]='TokenGroups' WHERE [Key]='Directory.ActiveDirectory.GroupMembershipFetchStrategy' and [PartitionId]=1
ELSE
    INSERT INTO [identity].[Settings] ([Key], [Value], [PartitionId]) VALUES ('Directory.ActiveDirectory.GroupMembershipFetchStrategy', 'TokenGroups', 1)SELECT * FROM [identity].[Settings] WHERE [Key]='Directory.ActiveDirectory.GroupMembershipFetchStrategy' and [PartitionId]=1
IF @@ROWCOUNT>0
    UPDATE [identity].[Settings] SET [Value]='TokenGroups' WHERE [Key]='Directory.ActiveDirectory.GroupMembershipFetchStrategy' and [PartitionId]=1
ELSE
    INSERT INTO [identity].[Settings] ([Key], [Value], [PartitionId]) VALUES ('Directory.ActiveDirectory.GroupMembershipFetchStrategy', 'TokenGroups', 1)
Para establecer Directory.ActiveDirectory.AuthorizationGroupsCacheExpirationHours como 4 horas en la tabla [identity].[Settings], ejecuta:
SELECT * FROM [identity].[Settings] WHERE [Key]='Directory.ActiveDirectory.AuthorizationGroupsCacheExpirationHours' and [PartitionId]=1
IF @@ROWCOUNT>0
    UPDATE [identity].[Settings] SET [Value]='4' WHERE [Key]='Directory.ActiveDirectory.AuthorizationGroupsCacheExpirationHours' and [PartitionId]=1
ELSE
    INSERT INTO [identity].[Settings] ([Key], [Value], [PartitionId]) VALUES ('Directory.ActiveDirectory.AuthorizationGroupsCacheExpirationHours', '4', 1)SELECT * FROM [identity].[Settings] WHERE [Key]='Directory.ActiveDirectory.AuthorizationGroupsCacheExpirationHours' and [PartitionId]=1
IF @@ROWCOUNT>0
    UPDATE [identity].[Settings] SET [Value]='4' WHERE [Key]='Directory.ActiveDirectory.AuthorizationGroupsCacheExpirationHours' and [PartitionId]=1
ELSE
    INSERT INTO [identity].[Settings] ([Key], [Value], [PartitionId]) VALUES ('Directory.ActiveDirectory.AuthorizationGroupsCacheExpirationHours', '4', 1)

Ajuste del tiempo de expiración de la caché del dominio de AD

Nota: Directory.ActiveDirectory.CacheExpirationSeconds solo se aplica al adaptador de AD heredado. Deberías utilizar esta configuración solo si te actualizaste desde una versión de Orchestrator que tuviera AD habilitado a la versión 2021.10 o posterior.
Para controlar el tiempo de expiración de la caché del dominio de AD puedes usar el ajuste Directory.ActiveDirectory.CacheExpirationSeconds en la tabla [identity].[Settings]. El valor predeterminado de este ajuste es de 43200 segundos (12 horas). Para deshabilitar la caché del dominio de AD, debes establecer este ajuste como 0.

Para establecer este ajuste a 7 días, ejecuta:

SELECT * FROM [identity].[Settings] WHERE [Key]='Directory.ActiveDirectory.CacheExpirationSeconds' and [PartitionId]=1
IF @@ROWCOUNT>0
    UPDATE [identity].[Settings] SET [Value]='604800' WHERE [Key]='Directory.ActiveDirectory.CacheExpirationSeconds' and [PartitionId]=1
ELSE
    INSERT INTO [identity].[Settings] ([Key], [Value], [PartitionId]) VALUES ('Directory.ActiveDirectory.CacheExpirationSeconds', '604800', 1)SELECT * FROM [identity].[Settings] WHERE [Key]='Directory.ActiveDirectory.CacheExpirationSeconds' and [PartitionId]=1
IF @@ROWCOUNT>0
    UPDATE [identity].[Settings] SET [Value]='604800' WHERE [Key]='Directory.ActiveDirectory.CacheExpirationSeconds' and [PartitionId]=1
ELSE
    INSERT INTO [identity].[Settings] ([Key], [Value], [PartitionId]) VALUES ('Directory.ActiveDirectory.CacheExpirationSeconds', '604800', 1)

Para deshabilitar la caché del dominio de AD, ejecuta:

SELECT * FROM [identity].[Settings] WHERE [Key]='Directory.ActiveDirectory.CacheExpirationSeconds' and [PartitionId]=1
IF @@ROWCOUNT>0
    UPDATE [identity].[Settings] SET [Value]='0' WHERE [Key]='Directory.ActiveDirectory.CacheExpirationSeconds' and [PartitionId]=1
ELSE
    INSERT INTO [identity].[Settings] ([Key], [Value], [PartitionId]) VALUES ('Directory.ActiveDirectory.CacheExpirationSeconds', '0', 1)SELECT * FROM [identity].[Settings] WHERE [Key]='Directory.ActiveDirectory.CacheExpirationSeconds' and [PartitionId]=1
IF @@ROWCOUNT>0
    UPDATE [identity].[Settings] SET [Value]='0' WHERE [Key]='Directory.ActiveDirectory.CacheExpirationSeconds' and [PartitionId]=1
ELSE
    INSERT INTO [identity].[Settings] ([Key], [Value], [PartitionId]) VALUES ('Directory.ActiveDirectory.CacheExpirationSeconds', '0', 1)

Mejora del rendimiento de carga del dominio de AD

Nota: Directory.ActiveDirectory.DomainFilter solo se aplica al adaptador de AD heredado. Deberías utilizar esta configuración solo si te actualizaste desde una versión de Orchestrator que tuviera AD habilitado a la versión 2021.10 o posterior.

Para habilitar el filtro de dominio, ejecuta:

SELECT * FROM [identity].[Settings] WHERE [Key]='Directory.ActiveDirectory.DomainFilter' and [PartitionId]=1
IF @@ROWCOUNT>0
UPDATE [identity].[Settings] SET [Value]='<comma separated list of domain FQDNs>' WHERE [Key]='Directory.ActiveDirectory.DomainFilter' and [PartitionId]=1
ELSE
INSERT INTO [identity].[Settings] ([Key], [Value], [PartitionId]) VALUES ('Directory.ActiveDirectory.DomainFilter', '<comma separated list of domain FQDNs>', 1)SELECT * FROM [identity].[Settings] WHERE [Key]='Directory.ActiveDirectory.DomainFilter' and [PartitionId]=1
IF @@ROWCOUNT>0
UPDATE [identity].[Settings] SET [Value]='<comma separated list of domain FQDNs>' WHERE [Key]='Directory.ActiveDirectory.DomainFilter' and [PartitionId]=1
ELSE
INSERT INTO [identity].[Settings] ([Key], [Value], [PartitionId]) VALUES ('Directory.ActiveDirectory.DomainFilter', '<comma separated list of domain FQDNs>', 1)

Para deshabilitar la caché de dominio de AD usa:

DELETE [identity].[Settings] WHERE [Key]='Directory.ActiveDirectory.DomainFilter' and [PartitionId]=1DELETE [identity].[Settings] WHERE [Key]='Directory.ActiveDirectory.DomainFilter' and [PartitionId]=1

Deshabilita SignalR para eventos de cambio de licencia de Robot

Durante una aceleración agresiva, los eventos de adquisición de licencia imponen una presión significativa en el plano posterior de SignalR Redis. Puedes deshabilitar el evento para mitigarlo, pero esto conlleva que la IU de licencia ya no se actualizará en tiempo real. Sin embargo, cuando tengas 100 000 robots, esa actualización de pantalla en tiempo real tiene poca importancia.

<appSettings>
  <add key="Scalability.SignalR.Browser.RobotLicenseChangeEventEnabled" value="false" />
</appSettings><appSettings>
  <add key="Scalability.SignalR.Browser.RobotLicenseChangeEventEnabled" value="false" />
</appSettings>

Habilitar caché del paquete NuGet

Este cambio garantiza el almacenamiento en caché del contenido del paquete en el servidor, y puede resultar útil cuando el recurso compartido de archivos no puede seguir el ritmo de la descarga de paquetes.

<<add key="NuGet.Caching.Enabled" value="true" />
<add key="NuGet.Caching.MaxCacheSize" value="104857600" /><!-- (100 MiB) -->
<add key="NuGet.Caching.MaxPackageSize" value="4194304" /><!-- (4 MiB) -->
<add key="NuGet.Caching.AbsoluteExpirationRelativeToNow" value="00:10:00" /><!-- (1 min) --><<add key="NuGet.Caching.Enabled" value="true" />
<add key="NuGet.Caching.MaxCacheSize" value="104857600" /><!-- (100 MiB) -->
<add key="NuGet.Caching.MaxPackageSize" value="4194304" /><!-- (4 MiB) -->
<add key="NuGet.Caching.AbsoluteExpirationRelativeToNow" value="00:10:00" /><!-- (1 min) -->
Añadir el ajuste NuGet.Caching.Enabled debería ser suficiente para habilitar la función. Solo deberás ajustar el resto de la configuración que se muestra en el ejemplo anterior si quieres cambiar los valores predeterminados, por ejemplo, aumenta el límite de tamaño de la caché o del paquete.

Habilita la caché local en implementaciones de Azure PaaS

Establece la siguiente configuración como ranura adhesiva en la ranura de producción del Orchestrator App Service.

WEBSITE_LOCAL_CACHE_OPTION = Always
WEBSITE_LOCAL_CACHE_SIZEINMB = 1000WEBSITE_LOCAL_CACHE_OPTION = Always
WEBSITE_LOCAL_CACHE_SIZEINMB = 1000

Configura la preparación de ranuras en implementaciones de Azure PaaS

Establece la siguiente configuración en las ranuras de producción y de implementación de intercambio en caliente de Orchestrator App Service. La aplicación se preparará durante la implementación, minimizando la carga de rendimiento causada al redireccionar tráfico a una aplicación en frío.

WEBSITE_SWAP_WARMUP_PING_PATH = /api/status
WEBSITE_SWAP_WARMUP_PING_STATUSES = 200WEBSITE_SWAP_WARMUP_PING_PATH = /api/status
WEBSITE_SWAP_WARMUP_PING_STATUSES = 200

Utiliza el servicio Azure SignalR en implementaciones de Azure PaaS

El uso del servicio Azure SignalR en una implementación de Azure puede reducir significativamente la carga en los servidores web. Consulta Scalability.AzureSignalR.ConnectionString para obtener más detalles sobre la configuración.

<appSettings>
  <add key="LoadBalancer.UseRedis" value="true"/>
  <add key="Scalability.AzureSignalR.ConnectionString" value="**myAzureSignalRConnectionString" />
</appSettings><appSettings>
  <add key="LoadBalancer.UseRedis" value="true"/>
  <add key="Scalability.AzureSignalR.ConnectionString" value="**myAzureSignalRConnectionString" />
</appSettings>

Ajustar el intervalo y el tamaño de la descarga para el punto final de SubmitLogs

Este cambio te ayudará a controlar la ventana de lotes de tiempo para recopilar los registros del proceso ejecutor antes de llamar al punto final de la API SubmitLogs. Habilita los siguientes ajustes en UiPath.Orchestrator.dll.config y configúralos según tus necesidades:
  • RobotsLogs.Flush.Interval

    <add key="RobotsLogs.Flush.Interval" value="0" /><add key="RobotsLogs.Flush.Interval" value="0" />

Para obtener más información sobre esta configuración, consulta RobotsLogs.Flush.Interval.

  • RobotsLogs.Flush.BatchSize

    <add key="RobotsLogs.Flush.BatchSize" value="100" /><add key="RobotsLogs.Flush.BatchSize" value="100" />

Para obtener más información sobre esta configuración, consulta RobotsLogs.Flush.BatchSize.

Cambios de Identity Server para un rendimiento mejorado

Los siguientes cambios en el archivo AppSettings.Production.json de Identity Server deberían dar como resultado un rendimiento mejorado en entornos de producción a gran escala.

Especifica un tamaño máximo de grupo en la cadena de conexiones

"ConnectionStrings": {
    "DefaultConnection": "Data Source=dbServer;Initial Catalog=UiPath_is;User ID=username;Password=****;Max Pool Size=1000"
  }"ConnectionStrings": {
    "DefaultConnection": "Data Source=dbServer;Initial Catalog=UiPath_is;User ID=username;Password=****;Max Pool Size=1000"
  }

Habilita Redis

"LoadBalancerSettings": {
      "RedisConnectionString": "yourRedis:6379,password=****",
      "UseRedis": "true"
    }"LoadBalancerSettings": {
      "RedisConnectionString": "yourRedis:6379,password=****",
      "UseRedis": "true"
    }

Cambios de configuración de IU para un rendimiento mejorado

La IU de Orchestrator te permite tomar los siguientes pasos para mejorar el rendimiento en entornos de producción a gran escala:

  • Deshabilita el espacio de trabajo personal;
  • Deshabilita Permitir inicio de sesión web para usuarios robot;
  • Asigna los roles Robot y Usuario de automatización a los usuarios robot.

¿Te ha resultado útil esta página?

Obtén la ayuda que necesitas
RPA para el aprendizaje - Cursos de automatización
Foro de la comunidad UiPath
Uipath Logo White
Confianza y seguridad
© 2005-2024 UiPath. Todos los derechos reservados.