orchestrator
2020.10
false
Importante :
A tradução automática foi aplicada parcialmente neste conteúdo.
UiPath logo, featuring letters U and I in white
Fora do período de suporte
Guia de instalação do Orchestrator
Automation CloudAutomation Cloud Public SectorAutomation SuiteStandalone
Last updated 12 de dez de 2023

Melhores práticas de desempenho

A seguinte página descreve os requisitos recomendados para ambientes de produção de grande escala e fornece um conjunto de práticas recomendadas que visam melhorar seu desempenho.

Requisitos Recomendados para Ambientes de Produção de Grande Escala

Para executar 10K Robôs Assistidos ou 1K Robôs Não Assistidos, você precisa de:

  • Um balanceador de carga F5
  • Orchestrator - pelo menos 6 nós sendo executados em máquinas com 8 núcleos de CPU e 16 GB de RAM
  • Robôs - máquinas com 4 núcleos de CPU e 16 GB de RAM
  • SQL Server - máquinas com 4 soquetes / 16 núcleos de CPU (padrão 8 soquetes / 16 núcleos de CPU) e 64 GB de RAM

    Observação: para reduzir a contenção de alocação do SQL Server em um ambiente altamente simultâneo, certifique-se de empregar um número ideal de arquivos de dados tempdb que tenham tamanho igual.

Alterações do Orchestrator para um desempenho aprimorado

Esta seção lista uma série de ajustes que você pode fazer no arquivo UiPathOrchestrator.dll.config do Orchestrator para melhorar o desempenho em um ambiente de produção de grande escala.

Habilite o 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>

Especifique um tamanho de pool máximo grande na String de Conexão

<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>

Grave os logs do Robô no Elasticsearch e use o AsyncWrapper

  • Adicione ou modifique o destino de logs para o Elasticsearch usando os parâmetros a seguir.
    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>
  • Adicione ou modifique a regra de logs do robô para gravar logs apenas no destino mostrado no exemplo anterior. Isso desabilita automaticamente o destino do Banco de Dados padrão.
    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>
  • Configure o Orchestrator para ler logs a partir do ElasticSearch.
    <appSettings>
       <add key="Logs.RobotLogs.ReadTarget" value="robotElasticBuffer" />
    </appSettings><appSettings>
       <add key="Logs.RobotLogs.ReadTarget" value="robotElasticBuffer" />
    </appSettings>

Use um armazenamento com alta taxa de transferência

Você pode optar pelo Azure Blob Storage para esse fim.

<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>

Desabilite o Webhooks e o Ledger

Se você não for usar o recurso do Webhooks, você pode desabilitá-lo.

<appSettings>
  <add key="Webhooks.Enabled" value="false" />
  <add key="Ledger.Enabled" value="false"/>
  <add key="Webhooks.LedgerIntegration.Enabled" value="false" />
</appSettings><appSettings>
  <add key="Webhooks.Enabled" value="false" />
  <add key="Ledger.Enabled" value="false"/>
  <add key="Webhooks.LedgerIntegration.Enabled" value="false" />
</appSettings>

Desabilite o Modo de Manutenção

Se você não for usar o Modo de Manutenção, você pode desabilitá-lo.

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

Aumente o tempo de cache das configurações do aplicativo

Você pode configurar o Orchestrator para usar alguns caches em memória que reduzem o número de chamadas para o Redis. Por exemplo, configurá-los para que expirem a cada 30 minutos significa que, quando você fizer uma alteração em uma configuração de nível de aplicativo, ela pode não entrar em vigor até o intervalo de 30 minutos passar.

O tempo de expiração que você define aqui pode variar dependendo do atraso que você pode tolerar, mas mesmo um tempo de cache de 5 minutos pode melhorar muito o desempenho.

<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 o valor de MinWorkerThreads

Definir um valor maior para MinWorkerThreads ajuda com cenários de crescimento.
<appSettings>
  <add key="ThreadPool.MinWorkerThreads" value="50" />
</appSettings><appSettings>
  <add key="ThreadPool.MinWorkerThreads" value="50" />
</appSettings>

Ajuste o Quartz para uma taxa de transferência muito alta

Essa etapa é necessária apenas se você tiver um número muito alto de gatilhos disparando, por exemplo, na ordem de 2.000 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>

Desative a resolução de IP para DNS no Audit

Se você não estiver em uma rede corporativa ou não precisar ver os nomes de DNS dos IPs gravados no Audit, você pode desabilitar a resolução.

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

Mude para uma estratégia mais rápida para obter Associações de Grupos

Ao usar a Autenticação do Windows, alterar o método para recuperar grupos para TokenGroups pode aumentar o desempenho de logon. Esse parâmetro não é exibido por padrão em UiPathOrchestrator.dll.config, e a estratégia não está habilitada por padrão, implicitamente.
<appSettings>
  <add key="WindowsAuth.GroupMembershipFetchStrategy" value="TokenGroups" />
</appSettings><appSettings>
  <add key="WindowsAuth.GroupMembershipFetchStrategy" value="TokenGroups" />
</appSettings>
Importante: Há várias limitações que você deve considerar cuidadosamente antes de usar essa estratégia. Ele funciona melhor para grandes ambientes AD feitos de grupos aninhados, com usuários residindo em um único domínio. Ele não funciona em vários domínios. Um usuário pertencente a um domínio específico não pode herdar direitos de acesso de grupos pai em outros domínios, apesar de haver uma relação de confiança bidirecional entre eles.

Desative o SignalR para os eventos de alteração de licença do Robô

Durante um crescimento agressivo, os eventos de aquisição de licenças colocariam uma pressão significativa no backplane do SignalR do Redis. Para mitigar isso, o evento pode ser desabilitado, o que faz com que a Interface Gráfica de licenciamento não seja mais atualizada em tempo real. No entanto, quando você tem 100k robôs, essa tela de atualização em tempo real não tem quase nenhum valor.

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

Habilite o Cache de Pacotes do NuGet

Essa alteração garante que haja o cache do lado do servidor dos conteúdos do pacote, e pode ser útil quando o compartilhamento de arquivos não puder acompanhar a taxa de transferência de download do pacote.

<<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) -->
Adicionar a configuração NuGet.Caching.Enabled deve ser suficiente para habilitar o recurso. Você só precisa ajustar o resto das configurações exibidas no exemplo acima se você quiser alterar os padrões, por exemplo, aumentar o tamanho do cache ou os limites de tamanho do pacote.

Habilite o cache local nas implantações PaaS do Azure

Defina a seguinte configuração como slot sticky no slot de produção do Serviço de Aplicativo do Orchestrator.

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

Configure o Slot Warm-Up nas implantações PaaS do Azure

Defina a seguinte configuração tanto no slot de produção quanto no slot de implantação hotswap do Serviço de Aplicativo do Orchestrator. Durante a implantação, isso irá preparar o aplicativo, minimizando a queda de desempenho causada pelo redirecionando do tráfego para um aplicativo frio.

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

Use o Serviço SignalR do Azure nas implantações PaaS do Azure

Usar o Serviço SignalR do Azure em uma implantação do Azure pode reduzir significativamente a carga nos servidores da web. Consulte Scalability.AzureSignalR.ConnectionString para obter mais detalhes sobre a configuração.

<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>

Ajuste o Intervalo de Descarga e o tamanho para o Endpoint do SubmitLogs

Essa alteração ajuda você a controlar a janela de lotes de tempo para coletar logs do processo executor antes de chamar o endpoint da API do SubmitLogs. Habilite as seguintes configurações em UiPath.Orchestrator.dll.config e configure-as de acordo com suas necessidades:
  • RobotsLogs.Flush.Interval

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

Para obter mais informações sobre essa configuração, consulte RobotsLogs.Flush.Interval.

  • RobotsLogs.Flush.BatchSize

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

Para obter mais informações sobre essa configuração, consulte RobotsLogs.Flush.BatchSize.

Alterações no Identity Server para um desempenho aprimorado

As seguintes alterações no arquivo AppSettings.Production.json do Identity Server devem resultar em um desempenho aprimorado em ambientes de produção de grande escala.

Especifique um tamanho de pool máximo grande na String de Conexão

"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"
  }

Habilite o Redis

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

Alterações de configuração de Interface Gráfica para um desempenho aprimorado

A Interface Gráfica do Orchestrator permite que você siga os seguintes passos para melhorar o desempenho em ambientes de produção de grande escala:

  • Desabilite o espaço de trabalho pessoal;
  • Desabilite Permitir login na web para usuários do robô;
  • Atribua as funções Robot e Automation User para os usuários do robô.

Esta página foi útil?

Obtenha a ajuda que você precisa
Aprendendo RPA - Cursos de automação
Fórum da comunidade da Uipath
Uipath Logo White
Confiança e segurança
© 2005-2024 UiPath. Todos os direitos reservados.