orchestrator
2024.10
true
UiPath logo, featuring letters U and I in white
Guide d'installation d'Orchestrator
Automation CloudAutomation Cloud Public SectorAutomation SuiteStandalone
Last updated 21 oct. 2024

Bonnes pratiques de performance

La page suivante décrit les exigences recommandées pour les environnements de production à grande échelle et fournit un ensemble des meilleures pratiques visant à améliorer leurs performances.

Remarque : pour plus de détails sur la configuration minimale requise pour exécuter Orchestrator, consultez les pages Prérequis matériels et Prérequis logiciels .

Exigences recommandées pour les environnements de production à grande échelle

Pour exécuter 10K de Attended Robot ou 1K de Unattended Robot , vous avez besoin de :

  • Un équilibreur de charge F5
  • Orchestrator : au moins 6 nœuds qui s'exécutent sur des machines avec un processeur 8 cœurs et 16 Go de RAM.
  • Robots : machines avec processeur 4 cœurs et 16 Go de RAM
  • SQL Server - machines avec 4 prises / 16 cœurs processeur CPU (par défaut 8 prises/16 cœurs processeur cpu) et 64 Go de RAM

    Remarque : Pour réduire les conflits d'allocation du serveur SQL dans un environnement hautement concourant, veillez à utiliser un nombre optimal de fichiers de données tempdb de taille égale.

Modifications Orchestrator pour une meilleure performance

Cette section liste une série d’ajustements que vous pouvez apporter au fichier UiPathOrchestrator.dll.config Orchestrator afin d’améliorer les performances dans un environnement de production à grande échelle.

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

Spécifiez une taille maximale de pool dans la chaîne de connexion

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

Écrivez des journaux de Robot à Elasticsearch et utilisez AsyncWrapper

  • Ajoutez ou modifiez la cible d’enregistrement pour Elasticsearch en utilisant les paramètres suivants.
    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>
  • Ajoutez ou modifiez la règle des journaux de robots pour écrire des journaux uniquement sur la cible indiquée dans l’exemple précédent. Cela désactive automatiquement la cible de base de données par défaut.
    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>
  • Configurez Orchestrator pour lire les journaux de ElasticSearch.
    <appSettings>
       <add key="Logs.RobotLogs.ReadTarget" value="robotElasticBuffer" />
    </appSettings><appSettings>
       <add key="Logs.RobotLogs.ReadTarget" value="robotElasticBuffer" />
    </appSettings>

Utilisez un stockage à haut débit

Vous pouvez opter pour Azure Blob Storage à cette fin.

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

Augmentez le temps de mise en cache des paramètres d’application

Vous pouvez configurer Orchestrator pour utiliser des caches en mémoire qui réduisent le nombre d'appels à Redis. Par exemple, si vous les configurez pour qu'ils expirent toutes les 30 minutes, cela signifie que, lorsque vous modifiez un paramètre au niveau de l'application, il peut ne pas être pris en compte avant la fin de l'intervalle de 30 minutes.

Le délai d'expiration que vous fixez ici peut varier en fonction du délai que vous pouvez tolérer, mais même une mise en cache de 5 minutes peut améliorer considérablement les performances.

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

Augmenter la valeur MinWorkerThreads

Définir une plus grande valeur pour MinWorkerThreads aide avec les scénarios de montée en puissance.
<appSettings>
  <add key="ThreadPool.MinWorkerThreads" value="50" />
</appSettings><appSettings>
  <add key="ThreadPool.MinWorkerThreads" value="50" />
</appSettings>

Désactivez l'IP pour DNS Resolving dans Audit

Si vous n'êtes pas dans un réseau d'entreprise ou si vous n'avez pas besoin de voir les noms DNS des IP enregistrés dans l'Audit, vous pouvez désactiver la résolution.

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

Passez à une stratégie plus rapide pour aller chercher l’adhésion aux groupes

Remarque : Directory.ActiveDirectory.GroupMembershipFetchStrategy et Directory.ActiveDirectory.AuthorizationGroupsCacheExpirationHours ne s'appliquent qu'à l'adaptateur AD hérité. Vous ne devez utiliser ces paramètres que si vous avez effectué une mise à niveau depuis une version d'Orchestrator dans laquelle AD était activé vers 2021.10 ou une version ultérieure.
Pour définir Directory.ActiveDirectory.GroupMembershipFetchStrategy vers TokenGroups dans la table [identity].[Settings], exécutez :
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)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)
Pour définir Directory.ActiveDirectory.AuthorizationGroupsCacheExpirationHours sur 4 heures dans la table [identity].[Settings], exécutez :
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)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)

Ajuster le délai d'expiration du cache du domaine AD

Remarque : Directory.ActiveDirectory.CacheExpirationSeconds ne s'applique qu'à l'adaptateur AD hérité. Vous ne devez utiliser ce paramètre que si vous avez effectué une mise à niveau depuis une version d'Orchestrator dans laquelle AD était activé vers 2021.10 ou une version ultérieure.
Pour contrôler le délai d'expiration du cache du domaine AD, vous pouvez utiliser le paramètre Directory.ActiveDirectory.CacheExpirationSeconds dans la table [identity].[Settings]. La valeur par défaut de ce paramètre est de 43 200 secondes (12 heures). Pour désactiver la mise en cache du domaine AD, vous devez définir ce paramètre sur 0.

Pour définir ce paramètre sur 7 jours, exécutez :

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

Pour désactiver la mise en cache du domaine AD, exécutez :

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

Améliorer les performances de chargement du domaine AD

Remarque : Directory.ActiveDirectory.DomainFilter ne s'applique qu'à l'adaptateur AD hérité. Vous ne devez utiliser ce paramètre que si vous avez effectué une mise à niveau depuis une version d'Orchestrator dans laquelle AD était activé vers 2021.10 ou une version ultérieure.

Pour activer le filtre du domaine, exécutez :

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

Pour désactiver la mise en cache du domaine AD, utilisez :

DELETE [identity].[Settings] WHERE [Key]='Directory.ActiveDirectory.DomainFilter' and [PartitionId]=1DELETE [identity].[Settings] WHERE [Key]='Directory.ActiveDirectory.DomainFilter' and [PartitionId]=1

Désactivez Signalr pour les événements de changement de licence de Robot

Lors d'une montée en puissance agressive, les événements d'acquisition de licence exerceraient une pression importante sur le fond de panier SignalR Redis. Pour atténuer cela, l'événement peut être désactivé, ce qui fait que l'interface utilisateur d'acquisition de licence n'est plus mise à jour en temps réel. Cependant, lorsque vous avez des robots de 100 000 tonnes de capacité, la mise à jour de l'écran en temps réel n'a que peu de valeur.

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

Activer la mise en cache des packages NuGet

Cette modification assure la mise en cache côté serveur du contenu des packages. Cela peut s’avérer utile lorsque le partage de fichiers ne peut pas suivre le rythme du débit de téléchargement des packages.

<<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) -->
L’ajout du paramètre NuGet.Caching.Enabled devrait suffire à activer la fonctionnalité. Vous n’avez qu’à ajuster le reste des paramètres affichés dans l’exemple ci-dessus si vous souhaitez modifier les valeurs par défaut, par exemple, augmenter la taille du cache ou les limites de taille des packages.

Activez le cache local dans les déploiements Azure PaaS

Définissez la configuration suivante comme un "sticky slot" sur le créneau de production du service Orchestrator App Service.

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

Configurez le démarrage des créneaux dans les déploiements Azure PaaS

Définissez la configuration suivante sur les créneaux de production et de déploiement Hotswap de l'Orchestrator App Service. Pendant le déploiement, cela permettra de démarrer l'application, en minimisant l'impact sur les performances causé par la redirection du trafic vers une application figée.

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

Utilisez Azure SignalR Service dans les déploiements Azure PaaS

L'utilisation du service Azure SignalR dans un déploiement Azure peut réduire considérablement la charge sur les serveurs Web. Voir Scalability.AzureSignalR.ConnectionString pour plus de détails sur le paramètre.

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

Ajuster l’intervalle et la taille de vidage pour le point de terminaison SubmitLogs

Cette modification vous aide à contrôler la période de collecte des journaux à partir du processus de l'exécuteur avant d’appeler le point de terminaison de l’API SubmitLogs. Activez les paramètres suivants dans UiPath.Orchestrator.dll.config et configurez-les en fonction de vos besoins :
  • RobotsLogs.Flush.Interval

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

Pour plus d'informations sur ce paramètre, consultez RobotsLogs.Flush.Interval.

  • RobotsLogs.Flush.BatchSize

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

Pour en savoir plus sur ce paramètre, voir RobotsLogs.Flush.BatchSize.

Changements de serveur d’identité pour une performance améliorée

Les modifications suivantes apportées au fichier d'Identity Server AppSettings.Production.json devraient se traduire par une amélioration des performances dans les environnements de production à grande échelle.

Spécifiez une taille maximale de pool dans la chaîne de connexion

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

Activez Redis

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

Modifications Orchestrator pour une meilleure performance

L’interface utilisateur d’Orchestrator vous permet de prendre les mesures suivantes afin d’améliorer les performances dans les environnements de production à grande échelle :

  • Désactivez l’espace de travail personnel ;
  • Désactivez Autoriser la connexion Web pour les utilisateurs de robots ;
  • Attribuez des rôles de Robot et d’Automation User aux utilisateurs de robots.

Cette page vous a-t-elle été utile ?

Obtenez l'aide dont vous avez besoin
Formation RPA - Cours d'automatisation
Forum de la communauté UiPath
Uipath Logo White
Confiance et sécurité
© 2005-2024 UiPath Tous droits réservés.