Abonnieren

UiPath Installation and Upgrade

Die UiPath-Installations- und Upgrade-Anleitung

Best Practices für Leistung

Auf der folgenden Seite werden die empfohlenen Anforderungen für große Produktionsumgebungen beschrieben und eine Reihe von bewährten Methoden zur Verbesserung ihrer Leistung beschrieben.

📘

Hinweis:

Weitere Informationen zu den Mindestanforderungen für den Orchestrator finden Sie auf den Seiten Hardwareanforderungen und Softwareanforderungen.

Empfohlene Anforderungen für große Produktionsumgebungen

Für die Ausführung von 10.000 Attended-Robotern oder 1.000 Unattended-Robotern benötigen Sie:

  • An F5 load balancer
  • Orchestrator – mindestens 6 Knoten, die auf Maschinen mit 8 CPU-Kernen und 16 GB RAM ausgeführt werden
  • Roboter – Maschinen mit 4 CPU-Kernen und 16 GB RAM
  • SQL Server - Maschinen mit 4 Sockets/16 CPU-Kernen (Standard 8 Sockets/16 CPU-Kerne) und 64 GB RAM

📘

Hinweis:

Um SQL Server-Zuweisungskonflikte in einer sehr gleichzeitigen Umgebung zu reduzieren, stellen Sie sicher, dass Sie eine optimale Anzahl von tempdb-Datendateien mit gleicher Größe verwenden.

Orchestrator-Änderungen für verbesserte Leistung

This section lists a series of adjustments you can make to Orchestrator's UiPathOrchestrator.dll.config file in order to improve performance in a large scale production environment.

Aktivieren von Redis

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

Geben Sie eine große maximale Poolgröße in der Verbindungszeichenfolge an.

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

Schreiben von Roboterprotokollen in Elasticsearch und Verwenden von AsyncWrapper

  • Fügen Sie das Protokollierungsziel für Elasticsearch mithilfe der folgenden Parameter hinzu oder ändern Sie es.
<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>
  • Fügen Sie die Roboterprotokollregel hinzu oder ändern Sie sie, um Protokolle nur in das im vorherigen Beispiel gezeigte Ziel zu schreiben. Dadurch wird das Standard-Datenbankziel automatisch deaktiviert.
<nlog>
  <rules>
    <logger name="Robot.*" ruleName="primaryRobotLogsTarget" final="true" writeTo="robotElasticBuffer" />
  </rules>
</nlog>
  • Konfigurieren Sie Orchestrator, um Protokolle aus ElasticSearch zu lesen.
<appSettings>
   <add key="Logs.RobotLogs.ReadTarget" value="robotElasticBuffer" />
</appSettings>

Verwenden eines Speichers mit hohem Durchsatz

Sie können sich zu diesem Zweck für Azure Blob Storage entscheiden.

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

Deaktivieren von Webhooks und Ledger

Wenn Sie die Webhooks-Funktion nicht verwenden, können Sie sie deaktivieren.

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

Wartungsmodus deaktivieren

Wenn Sie den Wartungsmodus nicht verwenden, können Sie ihn deaktivieren.

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

Erhöhen der Zwischenspeicherungszeit von Anwendungseinstellungen

Sie können Orchestrator so konfigurieren, dass einige In-Memory-Caches verwendet werden, die die Anzahl der Aufrufe von Redis reduzieren. Wenn Sie sie z. B. so konfigurieren, dass sie alle 30 Minuten ablaufen, bedeutet dies, dass eine Änderung an einer Einstellung auf Anwendungsebene möglicherweise erst nach dem 30-Minuten-Intervall widergespiegelt wird.
Die hier festgelegte Ablaufzeit kann variieren, je nachdem, welche Verzögerung Sie tolerieren können, aber selbst eine Zwischenspeicherungszeit von 5 Minuten kann die Leistung erheblich verbessern.

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

Increase MinWorkerThreads Wert

Setting a larger value for MinWorkerThreads helps with ramp-up scenarios.

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

Optimieren von Quarz für sehr hohen Durchsatz

Dieser Schritt ist nur notwendig, wenn Sie eine sehr hohe Anzahl von Triggern haben, die ausgelöst werden, z. B. in der Größenordnung von 2.000 pro Minute.

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

Deaktivieren von IP-zu-DNS-Auflösung in der Prüfung

Wenn Sie sich nicht in einem Unternehmensnetzwerk befinden oder die DNS-Namen von IPs, die in der Prüfung aufgezeichnet wurden, nicht sehen müssen, können Sie die Lösung deaktivieren.

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

Wechseln zu einer schnelleren Strategie zum Abrufen der Gruppenmitgliedschaft

📘

Hinweis:

Directory.ActiveDirectory.GroupMembershipFetchStrategy and Directory.ActiveDirectory.AuthorizationGroupsCacheExpirationHours only apply to the legacy AD adapter. You should use these settings only if you upgraded from an Orchestrator version that had AD enabled to 2021.10 or later.

To set Directory.ActiveDirectory.GroupMembershipFetchStrategy to TokenGroups in the [identity].[Settings] table, run:

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)

To set Directory.ActiveDirectory.AuthorizationGroupsCacheExpirationHours to 4 hours in the [identity].[Settings] table, run:

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)

Adjust AD domain cache expiration time

📘

Hinweis:

Directory.ActiveDirectory.CacheExpirationSeconds only applies to the legacy AD adapter. You should use this setting only if you upgraded from an Orchestrator version that had AD enabled to 2021.10 or later.

To control the AD domain cache expiration time, you can use the Directory.ActiveDirectory.CacheExpirationSeconds setting in the [identity].[Settings] table. The default value of this setting is 43200 seconds (12 hours). To disable AD domain caching, you must set this setting to 0.

To set this setting to 7 days, run:

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)

To disable AD domain caching, run:

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)

Deaktivieren von SignalR für Roboter-Lizenzänderungsereignisse

Während einer offensiven Anlaufphase würden die Lizenzerwerbsereignisse die SignalR Redis-Backplane erheblich unter Druck setzen. Um dies zu mildern, kann das Ereignis deaktiviert werden, was dazu führt, dass die Lizenzierungsbenutzeroberfläche nicht mehr in Echtzeit aktualisiert wird. Wenn Sie jedoch 100.000 Roboter haben, ist diese Bildschirmaktualisierung in Echtzeit von geringem Wert.

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

Aktivieren der NuGet-Paketzwischenspeicherung

Diese Änderung stellt sicher, dass der Paketinhalt serverseitig zwischengespeichert wird, und kann sich als nützlich erweisen, wenn die Dateifreigabe nicht mit dem Paket-Download-Durchsatz mithalten kann.

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

Adding the NuGet.Caching.Enabled setting should be enough to enable the feature. You only need to adjust the rest of the settings displayed in the example above if you want to change the defaults, e.g. increase the size of the cache or package size limits.

Aktivieren des lokalen Caches in Azure PaaS-Bereitstellungen

Legen Sie die folgende Konfiguration für den Produktionsslot des Orchestrator App Service als angeheftet fest.

WEBSITE_LOCAL_CACHE_OPTION = Always
WEBSITE_LOCAL_CACHE_SIZEINMB = 1000

Konfigurieren von Slot Warm-Up in Azure PaaS-Bereitstellungen

Legen Sie die folgende Konfiguration sowohl für die Produktions- als auch für die Hotswap-Bereitstellungsslots des Orchestrator App Service fest. Während der Bereitstellung wird die Anwendung aufgewärmt, wodurch die Leistungseinbußen minimiert werden, die durch die Umleitung von Datenverkehr an eine kalte App verursacht werden.

WEBSITE_SWAP_WARMUP_PING_PATH = /api/status
WEBSITE_SWAP_WARMUP_PING_STATUSES = 200

Verwenden von Azure SignalR Service in Azure PaaS-Bereitstellungen

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>

Anpassen des Flush-Intervalls und der Größe für den SubmitLogs-Endpunkt

This change helps you control the timeframe batch window for collecting logs from the executor process before calling the SubmitLogs API endpoint. Enable the following settings in UiPath.Orchestrator.dll.config and configure them according to your needs:

  • 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-Änderungen für verbesserte Leistung

The following changes to Identity Server's AppSettings.Production.json file should result in improved performance in large scale production environments.

Geben Sie eine große maximale Poolgröße in der Verbindungszeichenfolge an.

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

Aktivieren von Redis

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

Benutzeroberflächenkonfigurationsänderungen für verbesserte Leistung

Auf der Benutzeroberfläche von Orchestrator können Sie die folgenden Schritte ausführen, um die Leistung in großen Produktionsumgebungen zu verbessern:

  • Deaktivieren des persönlichen Arbeitsbereichs;
  • Deaktivieren von Webanmeldung zulassen für Roboterbenutzer;
  • Weisen Sie Roboterbenutzern die Rollen Roboter und Automation User zu.

Aktualisiert vor 5 Monaten


Best Practices für Leistung


Auf API-Referenzseiten sind Änderungsvorschläge beschränkt

Sie können nur Änderungen an dem Textkörperinhalt von Markdown, aber nicht an der API-Spezifikation vorschlagen.