订阅

UiPath Installation and Upgrade

UiPath 安装和升级指南

性能最佳实践

以下页面介绍了为大规模生产环境推荐的要求,并提供了一组旨在提高其性能的最佳实践。

📘

备注:

有关运行 Orchestrator 的最低要求的更多详细信息,请参阅硬件要求页面和软件要求页面。

大规模生产环境的推荐要求

要运行 10K 有人值守机器人或 1K 无人值守机器人,您需要:

  • An F5 load balancer
  • Orchestrator - 至少 6 个在具有 8 个 CPU 核心和 16 GB RAM 的计算机上运行的节点
  • Robots - machines with 4 CPU Cores and 16 GB RAM
  • SQL Server - 具有 4 个插槽/16 个 CPU 核心(默认为 8 个插槽/16 个 CPU 核心)和 64 GB RAM 的计算机

📘

备注:

若要减少高度并发环境中的 SQL Server 分配争用,请确保使用大小相等的 tempdb 数据文件的最佳数量。

用于提高性能的 Orchestrator 变更

本节列出了可以对 Orchestrator 的 UiPathOrchestrator.dll.config 文件进行的一系列调整,以提高大规模生产环境中的性能。

启用 Redis

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

在连接字符串中指定较大的最大池大小

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

将机器人日志写入 Elasticsearch 并使用 AsyncWrapper

  • 使用以下参数添加或修改 Elasticsearch 的记录目标。
<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>
  • 添加或修改机器人日志规则,以仅将日志写入到上一个示例中显示的目标。这将自动禁用默认的数据库目标。
<nlog>
  <rules>
    <logger name="Robot.*" ruleName="primaryRobotLogsTarget" final="true" writeTo="robotElasticBuffer" />
  </rules>
</nlog>
  • 配置 Orchestrator 以从 ElasticSearch 读取日志。
<appSettings>
   <add key="Logs.RobotLogs.ReadTarget" value="robotElasticBuffer" />
</appSettings>

使用高吞吐量存储

为此,您可以选择 Azure Blob 存储。

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

禁用 Webhook 和 Ledger

如果您不使用 Webhook 功能,则可以禁用它。

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

禁用维护模式

如果您不使用维护模式,则可以将其禁用。

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

增加应用程序设置的缓存时间

You can configure Orchestrator to use some in-memory caches that reduce the number of calls to Redis. For instance, configuring them to expire every 30 minutes means that, once you make a change to an application-level setting, it may not be reflected until after the 30-minute interval.
The expiry time you set here can vary depending on what delay you can tolerate, but even a 5-minute caching time can greatly improve performance.

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

增加 MinWorkerThreads

MinWorkerThreads 设置较大的值有助于加速方案。

<appSettings>
  <add key="ThreadPool.MinWorkerThreads" value="50" />
</appSettings>

调整 Quartz 以实现极高吞吐量

仅当触发器触发的数量非常多(例如,每分钟 2,000 个)时,才需要执行此步骤。

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

在审核中禁用 IP 到 DNS 解析

如果您不在公司网络中,或者不需要查看 Audit 中记录的 IP 的 DNS 名称,则可以禁用解析。

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

切换到更快的策略以获取组成员身份

使用 Windows 身份验证时,将用于检索组的方法更改为 TokenGroups 可以提高登录性能。默认情况下,UiPathOrchestrator.dll.config 不显示此参数,并且不会隐式启用该策略。

<appSettings>
  <add key="WindowsAuth.GroupMembershipFetchStrategy" value="TokenGroups" />
</appSettings>

🚧

重要

在使用此策略之前,您需要仔细考虑很多限制条件。此策略最适合由嵌套组组成的大型 AD 环境,其中用户驻留在单个域中。它不适用于多个域。特定域中的用户不能从其他域中的父组继承访问权限,尽管它们之间具有双向信任关系。

禁用用于机器人许可证更改事件的 SignalR

在激增期间,许可证获取事件将对 SignalR Redis 背板造成巨大压力。为了减轻这种情况,可以禁用该事件,这将导致许可 UI 不再实时更新。但是,当您有 10 万个机器人时,实时屏幕更新几乎没有价值。

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

启用 NuGet 包缓存

此更改可确保在服务器端缓存包内容,并且在文件共享无法跟上包下载吞吐量的情况下,此更改非常有用。

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

添加 NuGet.Caching.Enabled 设置应该足以启用该功能。如果要更改默认值,例如,增加缓存大小或包大小限制,则仅需要调整上例中显示的其余设置。

在 Azure PaaS 部署中启用本地缓存

在 Orchestrator App 服务的生产插槽上将以下配置设置为粘性插槽。

WEBSITE_LOCAL_CACHE_OPTION = Always
WEBSITE_LOCAL_CACHE_SIZEINMB = 1000

在 Azure PaaS 部署中配置插槽预热

在 Orchestrator App 服务的生产和热插拔部署插槽上设置以下配置。在部署过程中,这将预热应用程序,从而最大程度地减少将流量重定向到冷应用程序引起的性能下降。

WEBSITE_SWAP_WARMUP_PING_PATH = /api/status
WEBSITE_SWAP_WARMUP_PING_STATUSES = 200

在 Azure PaaS 部署中使用 Azure SignalR 服务

Using Azure SignalR Service in an Azure deployment can significantly reduce the load on the web servers. See Scalability.AzureSignalR.ConnectionString for more details on the setting.

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

调整 SubmitLogs 端点的刷新间隔和大小

此更改可帮助您控制时间范围批处理窗口,以在调用 SubmitLogs API 端点之前从执行程序流程收集日志。在 UiPath.Orchestrator.dll.config 中启用以下设置,然后根据需要进行配置:

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

For more on this setting, see RobotsLogs.Flush.Interval.

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

For more on this setting, see RobotsLogs.Flush.BatchSize.

用于提高性能的 Identity Server 变更

对 Identity Server 的 AppSettings.Production.json 文件进行以下更改应当会提高大规模生产环境中的性能。

在连接字符串中指定较大的最大池大小

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

启用 Redis

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

用于提高性能的 UI 配置变更

Orchestrator 的 UI 允许您采取以下步骤,以提高大规模生产环境中的性能:

  • 禁用个人工作区;
  • 禁用针对机器人用户的允许网页登录
  • 机器人Automation User 角色分配给机器人用户。

2 个月前更新


性能最佳实践


建议的编辑仅限用于 API 参考页面

您只能建议对 Markdown 正文内容进行编辑,而不能建议对 API 规范进行编辑。