下一页描述了针对大规模生产环境的推荐要求,并提供了一组旨在改善其性能的最佳实践。
大规模生产环境的推荐要求
要运行 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>
增加应用程序设置的缓存时间
您可以将 Orchestrator 配置为使用部分内存缓存,以减少对 Redis 的调用次数。例如,将它们配置为每 30 分钟过期一次意味着,一旦更改了应用程序级设置,它可能要等到 30 分钟间隔后才会反映出来。
您在此处设置的到期时间可能会有所不同,具体取决于您可以容忍的延迟时间,但是即使是 5 分钟的缓存时间也可以极大地提高性能。
<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
值为 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 年前更新