インポート ソースの垂直スケーリング
TotalAgility は、マルチテナント Import Connector のインポート ソース取り込みスレッドに対する最適化されたスケーリングをサポートします。これにより、システムをスケール アウトすることなく、テナントの取り込みパフォーマンスとスループットを最適化することができます。これは、スケーリング要件が高い大規模テナントにおいて特に便利で、次のような点で役立ちます。
- スケーラビリティ: TotalAgility Core Worker クラウド サービス全体をスケール アウトすることなく、インポート ソースの垂直スケーリングを有効にします。
- パフォーマンス: フォールト トレランスが向上し、大規模なテナントで取り込みインポート ソースを垂直に拡張できるようになります。
- 一貫性: 小規模なテナントがスループットを維持し、より高いスループットを必要とする大規模テナントの要件に対応できるようにします。
インポート ソースの垂直スケーリングを構成できるようにするために、次のようなオプションが追加されました。
- テナント管理システム:
- 最大取り込みスレッド: テナントに許可される最大取り込みスレッド数。この制限により、TotalAgility Designer のインポート接続でインポート ソースに許可される同時ポーリングの最大数を定義します。
- 最大取り込みスレッド数を上書きする: テナントに許可される最大取り込みスレッド数を上書きします。
- TotalAgility Designer:
最大同時ポーリング数: 許可される同時ポーリングの最大数。
ローカル インポート接続には次の 2 つのモードがあります。
- ストレージ モード: ローカル インポート接続がストレージ モードで構成されている場合は、ストレージ モードが使用されます。各種のソースからドキュメントを取得し、内部ストレージに保存して、Web サービス インターフェイスを使用して取得できるようにします。TotalAgility は、Message Connector Web サービス インターフェイスに接続し、インポートするドキュメントを取得します。このモードは、サイズの大きいジョブに推奨されます。
- ダイレクト モード: : ローカル インポート接続がダイレクト モードで構成されている場合は、ダイレクト モードが使用されます。これは共有コネクタでも使用されます。
このトピックでは、それぞれのモードで 1 つの Core Worker と 1 つの Message Connector が使用される単純な展開について説明します。
複数の Core Worker や複数の Message Connector の使用に関する追加のヒントについては、「水平スケーリングのヒント」を参照してください。
ストレージ モードの関連構成値
| 値 | 説明 | 値の場所 |
|---|---|---|
| PrefetchSize |
Message Connector によってパッシブ入力からプリフェッチされたメッセージの数。(デフォルト: 1) この制限に達した場合、メッセージがインポートされるまで入力は停止されます。 |
|
| IngestTaskInterval |
取り込みシステム タスクを呼び出す間隔を定義します。デフォルト値を維持することをお勧めします。 |
|
| MaximumNumberofMessagesToImport |
ドキュメントの取り込み用にインポートするメッセージの最大数。(デフォルト: 50) |
Agility.Server.Core.WorkerService.exe.config |
| IngestSystemTaskThreadPoolSize |
IngestSystemTask のスレッド プールのサイズ。(デフォルト: 4) 例: サイズを 5 に設定すると、インポート操作に使用できるスレッドは最大 5 つだけになります。
スレッド プールは通常、他のタスクと共有されるため、これらのスレッドは排他的に使用できない場合があります。 |
Agility.Server.Core.WorkerService.exe.config |
ストレージ モードでのメッセージのインポートはどのように機能しますか?
ストレージ モードでのメッセージのインポートは、次の並行アクティビティに依存します。
- アクティビティ 1: インポート ソースから Message Connector にメッセージを転送します:
Message Connector は、構成されたパッシブ入力ごとに 1 つのスレッドを使用して、入力から Message Connector ストレージにメッセージを転送します。受信トレイ内の期限切れのメッセージの数 (アクティビティ 2 によってインポート用にすでにロックされているメッセージを除く) が PrefetchSize に達すると、これらのスレッドは一時停止されます。
SMTP や FoIP Web サービスからの受信などのアクティブな入力には追加のスレッドが使用されます。PrefetchSize はこれらの入力には影響しません。
アクティブなメッセージによってストレージの容量が 80% に達すると、すべてのアクティブ入力とパッシブ入力が一時停止されます。
- アクティビティ 2: Message Connector から Tungsten Capture にメッセージを転送および変換します。
取り込みシステム タスクは、デフォルトでは 1 分ごとにアクティブ化されます (間隔は IngestTaskInterval によって定義します)。同時に、すべての構成された (アクティブな) Message Connector をポーリングし、それ以上のメッセージがなくなるか、MaximumNumberofMessagesToImport 制限に達するまで、新しいメッセージをロックします。
ロックされたメッセージは、最大で IngestSystemTaskThreadPoolSize のワーカー スレッドによってインポートされます。このインポート操作は、次の主要な手順で構成されます。
- Message Connector からオプションの変換を含むメッセージを取得する。
-
メッセージを TotalAgility システムに保存する。
通常、最初の手順は高速ですが、ドキュメント変換が含まれる場合は 2 番目の手順よりも時間がかかります。
構成のヒント
- PrefetchSize の値をできるだけ低します。値を大きくすると、場合によってはパフォーマンスが向上する可能性がありますが、ストレージ ファイルが失われた場合に失われるメッセージの数も増加することがあります。
-
MaximumNumberofMessagesToImport 値により、通常、1 回の IngestSystemTask 呼び出しでインポートできるメッセージの最大数を制限します。値を大きくするとパフォーマンスが向上しますが、ストレージ ファイルが失われた場合に失われるメッセージの数も増加することがあります。
-
パフォーマンスを向上させるには、IngestSystemTaskThreadPoolSize の値を増やします。ただし、ドキュメント変換を使用して多くのメッセージをインポートする場合、5 を超える値は推奨されません。
- ドキュメント変換中、同じマシン上のすべての Message Connector による同時ドキュメント変換の最大数は通常 3 に制限されます。追加の変換要求は Message Connector でキュー待ち状態となり、全体的なパフォーマンスが低下します。
水平スケーリングのヒント
- 複数のオンプレミス、オンプレミス マルチテナント、または Azure Core Worker が使用されている場合、「システム タスク取り込み」によって、任意の Core Worker 上の次のメッセージがランダムにロックされます。つまり、1 つの IngestTaskInterval 内でインポートできるメッセージの数は、やはり MaximumNumberofMessagesToImport に制限されます。
-
PrefetchSize または MaximumNumberofMessagesToImport の値を高くした場合は、インスタンス間の負荷分散が減少する可能性があります。
ダイレクト モードの関連構成値
| 値 | 説明 | 値の場所 |
|---|---|---|
| MaximumDirectIngestThreads |
テナントおよび Core Worker あたりの直接インポート スレッドの最大数。(デフォルト: 1) |
優先順位が低い以下のいずれかの場所:
|
| DirectIngestBurstDurationInSeconds |
使用可能なメッセージを継続的にインポートするワーカー スレッドの開始からの最大期間。(デフォルト: 600 秒 (10 分)) この値により、通常、ポーリングする入力がない場合に MaximumDirectIngestThreads 値が終了します。この期間に達すると、現在のインポート/ポーリング操作の後にワーカー スレッドが完了します。 |
Agility.Server.Core.WorkerService.exe.config |
| IngestSystemTaskThreadPoolSize |
IngestSystemTasks のスレッド プールのサイズ。たとえば、サイズを 5 に設定すると、インポート操作に使用できるスレッドは最大 5 つだけになります。(デフォルト: 4) スレッド プールは通常、他のタスクと共有されるため、これらのスレッドは排他的に使用できない場合があります。
|
Agility.Server.Core.WorkerService.exe.config |
| MaxConcurrentPolls |
Core Worker あたりの入力の同時スレッドの最大数。 |
|
| IngestTaskInterval |
取り込みシステム タスクを呼び出す間隔を定義します。 デフォルト値を維持することをお勧めします。 |
|
ダイレクト モードでのメッセージのインポートはどのように機能しますか?
- 取り込みシステム タスクは、デフォルトでは 1 分ごとにアクティブ化されます (間隔は IngestTaskInterval によって定義します)。
- 次のすべての条件を満たしている場合、システム タスクによって新しいワーカー スレッドがキューに追加されます。
- 少なくとも 1 つの入力をポーリングする必要があります。MaxConcurrentPolls が 1 より大きく (2、3 など)、入力が少なくとも 50 秒間 (100、150 秒など) 継続して利用可能な場合、2 番目、(3 番目、4 番目など) のスレッドでポーリングする必要があるとみなされます。
-
アクティブまたはキュー待ち状態のワーカー スレッドの数 (現在のテナント) が、MaximumDirectIngestThreads の構成値よりも少ない。
-
すべてのテナントのアクティブまたはキュー待ち状態のワーカー スレッドの合計数が、SystemIngestTask (ワーカー タスク) および IngestSystemTaskThreadPoolSize のスレッド プールのサイズよりも少ない。
-
それぞれのワーカー スレッドは、次のいずれかの条件を満たすまでメッセージをインポートします。
- (ロック解除された) 利用可能なメッセージがない。
- DirectIngestBurstDurationInSeconds 期間に達する。
-
通常、すべての入力をポーリングするために 1 つのワーカー スレッドが使用されます。このワーカー スレッドがシステム タスク間隔内にすべてのポーリングを完了できない場合 (デフォルト: 1 分)、次のいずれかの制限に達するまで、1 分ごとに 1 つのワーカー スレッドが追加されます。
- 永続的な入力を持つそれぞれのメール ボックスに、MaximumIngestImportThreads のワーカー スレッドがある。
- テナントのワーカー スレッドの合計数が MaximumDirectIngestThreads である。
- すべてのテナントのワーカー スレッドの合計数が IngestSystemTaskThreadPoolSize である。
構成のヒント
- 単一の入力に対するワーカー スレッドの実際の数は、MaxConcurrentPolls に制限されます。
-
テナントのすべての入力に対する実際のワーカー スレッドの数は、MaximumDirectIngestThreads に制限されます。
-
すべてのテナントのすべての入力に対する実際のワーカー スレッドの数は、IngestSystemTaskThreadPoolSize に制限されます。
-
オプション。MaximumDirectIngestThreads および MaxConcurrentPolls に従って追加のスレッドを使用すると、垂直方向にスケーリングしてパフォーマンスを向上させることができますが、特にマルチテナント システムの場合や、入力時にドキュメント変換が使用される場合は、スレッド数の増加を慎重に行ってください。
-
DirectIngestBurstDurationInSeconds のデフォルト値を維持することをお勧めします。非常に例外的な場合にのみ変更を行うようにしてください。値を大きくするとパフォーマンスがわずかに向上しますが、テナント間のリソースの配分が減少することがあります。
水平スケーリングのヒント
複数のオンプレミス、オンプレミス マルチテナント、または Azure Core Worker が使用されている場合、新しいワーカー スレッドの開始のチェックは、任意の Core Worker でランダムに実行されます。つまり、特定の Core Worker への入力に対して 2 番目、3 番目、およびそれ以降のワーカー スレッドを開始するためにかかる時間は、Core Worker の数に応じて増加します。