このドキュメントはAIによって翻訳されました。不正確な情報については、英語版をご参照ください
通常、NocoBaseアプリケーションのすべてのサービスは、単一のNode.jsインスタンスで動作します。ビジネスの成長とともにアプリケーション内の機能が複雑になるにつれて、一部の時間のかかるサービスが全体のパフォーマンスに影響を与える可能性があります。
アプリケーションのパフォーマンスを向上させるため、NocoBaseはクラスターモードでのアプリケーションサービスの異なるノードへの分割実行をサポートしています。これにより、単一サービスのパフォーマンス問題がアプリケーション全体に影響を与え、ユーザーリクエストに正常に応答できなくなるのを防ぎます。
また、特定のサービスを対象に水平スケーリングを行い、クラスターのリソース利用率を向上させることも可能です。
NocoBaseをクラスターにデプロイする際、異なるサービスを分割して別々のノードで実行できます。以下の図は、分割構造の概要を示しています。

サービス KEY:workflow:process
非同期モードのワークフローは、トリガーされるとキューに入り、順次実行されます。これらのワークフローはバックグラウンドタスクと見なすことができ、通常、ユーザーが結果の返却を待つ必要はありません。特に、複雑で時間のかかるプロセスやトリガーされる頻度が高い場合は、独立したノードに分割して実行することをお勧めします。
サービス KEY:async-task:process
非同期のインポートやエクスポートなど、ユーザー操作によって作成されるタスクが含まれます。大量のデータや高い並行処理が発生する場合、独立したノードに分割して実行することをお勧めします。
異なるサービスを別々のノードに分割するには、環境変数 WORKER_MODE を設定する必要があります。この環境変数は、以下のルールに従って設定できます。
WORKER_MODE=<空>:未設定の場合、または空に設定されている場合、ワーカーモードは現在の単一インスタンスモードと同じになり、すべてのリクエストを受け入れ、すべてのタスクを処理します。これは、以前に設定されていなかったアプリケーションとの互換性があります。WORKER_MODE=!:ワーカーモードはリクエストのみを処理し、タスクは一切処理しません。WORKER_MODE=workflow:process,async-task:process:1つまたは複数のサービス識別子(カンマ区切り)で設定された場合、ワーカーモードはこれらの識別子に該当するタスクのみを処理し、リクエストは処理しません。WORKER_MODE=*:ワーカーモードはモジュールに関係なくすべてのバックグラウンドタスクを処理しますが、リクエストは処理しません。WORKER_MODE=!,workflow:process:ワーカーモードはリクエストを処理し、同時に特定の識別子に該当するタスクのみを処理します。WORKER_MODE=-:ワーカーモードはリクエストもタスクも一切処理しません(このモードはワーカープロセス内で必要です)。例えば、K8S環境では、分割された機能が同じノードには、同じ環境変数を設定できます。これにより、特定の種類のサービスを簡単に水平スケーリングできます。
node1、node2、node3の3つのノードがあると仮定します。これらは次のように設定できます。
node1:ユーザーUIリクエストのみを処理します。WORKER_MODE=! を設定します。node2:ワークフロータスクのみを処理します。WORKER_MODE=workflow:process を設定します。node3:非同期タスクのみを処理します。WORKER_MODE=async-task:process を設定します。node1、node2、node3、node4の4つのノードがあると仮定します。これらは次のように設定できます。
node1 と node2:すべての通常リクエストを処理します。WORKER_MODE=! を設定し、ロードバランサーがこれらの2つのノードにリクエストを自動的に分散します。node3 と node4:その他のすべてのバックグラウンドタスクを処理します。WORKER_MODE=* を設定します。ビジネスプラグインを開発する際、要件に応じて、リソース消費の大きいサービスを分割することができます。これは以下の方法で実現できます。
my-plugin:process のような新しいサービス識別子を定義し、そのドキュメントを提供します。app.serving() インターフェースを使用して環境を判断し、現在のノードが環境変数に基づいて特定のサービスを提供すべきかを決定します。