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.

Recommended Requirements for Large-Scale Production Environments

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

In diesem Abschnitt sind eine Reihe von Anpassungen aufgeführt, die Sie an der Datei UiPathOrchestrator.dll.config von Orchestrator vornehmen können, um die Leistung in einer großen Produktionsumgebung zu verbessern.

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>

Erhöhen des MinWorkerThreads-Werts

Das Festlegen eines höheren Werts für MinWorkerThreads hilft in Anlaufszenarien.

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

Improve the AD domain loading performance

📘

Hinweis:

Directory.ActiveDirectory.DomainFilter 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 enable domain filter, run:

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)

To disable AD domain caching use:

DELETE [identity].[Settings] WHERE [Key]='Directory.ActiveDirectory.DomainFilter' and [PartitionId]=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) -->

Das Hinzufügen der Einstellung NuGet.Caching.Enabled sollte ausreichen, um die Funktion zu aktivieren. Sie müssen nur die restlichen Einstellungen anpassen, die im obigen Beispiel angezeigt werden, wenn Sie die Standardeinstellungen ändern möchten, z. B. die Größe des Caches oder der Paketgrößenbeschränkungen erhöhen möchten.

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

Mit dieser Änderung können Sie das Zeitrahmen-Batchfenster zum Sammeln von Protokollen aus dem Executor-Prozess steuern, bevor Sie den SubmitLogs-API-Endpunkt aufrufen. Aktivieren Sie die folgenden Einstellungen in UiPath.Orchestrator.dll.config und konfigurieren Sie sie entsprechend Ihren Anforderungen:

  • 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

Die folgenden Änderungen an der Datei AppSettings.Production.json von Identity Server sollten zu einer verbesserten Leistung in großen Produktionsumgebungen führen.

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