通知を受け取る

UiPath 製品のインストールとアップグレード

UiPath 製品のインストールとアップグレード ガイド

パフォーマンスのベスト プラクティス

以下のページでは、大規模運用環境で推奨される要件について説明し、パフォーマンスの向上を目的とした一連のベスト プラクティスを示します。

📘

注:

Orchestrator を実行するための最小要件について詳しくは、「ハードウェア要件」と「ソフトウェア要件」のページをご覧ください。

大規模運用環境の推奨要件

10,000 台の Attended ロボットまたは 1,000 台の Unattended ロボットを実行するには、以下が必要です。

  • An F5 load balancer
  • Orchestrator - 8 コアの CPU と 16GB の RAM を搭載したマシン上で実行する 6 つ以上のノード
  • ロボット - 4 コアの CPU と 16GB の RAM を搭載したマシン
  • SQL Server - 4 ソケット/16 コアの CPU (既定は 8 ソケット/16 コアの CPU) と 64GB の 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>
  • ElasticSearch からログを読み取るよう Orchestrator を設定します。
<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>

アプリケーション設定のキャッシュ時間を増やす

Redis の呼び出しの回数を減らすいくつかのメモリ内キャッシュを使用するよう Orchestrator を設定できます。たとえば、キャッシュの有効期限が 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 に大きな数値を設定すると、パフォーマンスの向上に役立ちます。

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

超高スループットを実現するよう Quartz を調整する

この手順は、トリガーの起動回数が非常に多い場合にのみ必要です (例: 1 分当たり 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 解決を無効化する

企業ネットワークを使用していない場合や、監査で記録された IP の DNS 名を確認する必要がない場合は、解決を無効化できます。

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

グループ メンバーシップを素早く取得できるストラテジーに切り替える

📘

注:

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

📘

注:

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)

ロボットのライセンス変更イベントに対して 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 Service の運用環境スロットで、スロット固定として次の設定をします。

WEBSITE_LOCAL_CACHE_OPTION = Always
WEBSITE_LOCAL_CACHE_SIZEINMB = 1000

Azure の PaaS デプロイでスロット ウォームアップを設定する

Orchestrator App Service の運用環境スロットとホットスワップ デプロイ スロットの両方で、次の設定をします。これにより、デプロイ時にアプリケーションがウォームアップされ、コールド アプリにトラフィックをリダイレクトすることで生じるパフォーマンス ヒットを最小限に抑えることができます。

WEBSITE_SWAP_WARMUP_PING_PATH = /api/status
WEBSITE_SWAP_WARMUP_PING_STATUSES = 200

Azure の PaaS デプロイで Azure SignalR Service を使用する

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 エンドポイントを呼び出す前に、Executor プロセスからログを収集するためのタイムフレーム バッチ ウィンドウを制御できるようになります。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 により、以下の手順を実行して、大規模運用環境におけるパフォーマンスを向上させることができます。

  • 個人用ワークスペースの無効化
  • ロボット ユーザーに対する [Web ログインを許可] の無効化
  • ロボット ユーザーに対するロール Robot および Automation User の割り当て

27 日前に更新


パフォーマンスのベスト プラクティス


改善の提案は、API リファレンスのページでは制限されています

改善を提案できるのは Markdown の本文コンテンツのみであり、API 仕様に行うことはできません。