通知を受け取る

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

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

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

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

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

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 の変更

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.

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>

Increase MinWorkerThreads 値 (Value)

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

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

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

When using Windows Authentication, changing the method for retrieving groups to TokenGroups can increase login performance. This parameter is not displayed by default in UiPathOrchestrator.dll.config, and the strategy is not enabled by default, implicitly.

<appSettings>
  <add key="WindowsAuth.GroupMembershipFetchStrategy" value="TokenGroups" />
</appSettings>

🚧

重要

このストラテジを使用する前に、いくつかの制限事項について注意深く検討する必要があります。このストラテジは、ユーザーが単一のドメインに存在し、グループが入れ子になっている、大規模な Active Directory 環境に対して最適です。複数のドメインにまたがって機能することはありません。たとえドメイン間に双方向の信頼関係があっても、特定のドメインに属するユーザーが別のドメインの親グループからアクセス権を継承することはできません。

ロボットのライセンス変更イベントに対して 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) -->

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.

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 エンドポイントのフラッシュの間隔とサイズを調整する

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 の変更

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

接続文字列で最大プール サイズに大きな値を指定する

"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 の割り当て

1 年前に更新


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


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

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