通知を受け取る

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

このセクションでは、大規模運用環境でのパフォーマンスを向上させるために、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>

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

You can configure Orchestrator to use some in-memory caches that reduce the number of calls to Redis. For instance, configuring them to expire every 30 minutes means that, once you make a change to an application-level setting, it may not be reflected until after the 30-minute interval.
The expiry time you set here can vary depending on what delay you can tolerate, but even a 5-minute caching time can greatly improve performance.

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

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

Windows 認証を使用する場合、グループの取得方法を TokenGroups に変更すると、ログイン パフォーマンスが向上する場合があります。このパラメーターは既定では UiPathOrchestrator.dll.config 内に表示されず、ストラテジーは既定では暗黙的に有効にされません。

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

この機能を有効にするには、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 の割り当て

10 か月前に更新


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


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

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