Selenium Grid コンポーネント

さまざまな Grid コンポーネントの使用方法を理解する

Selenium Grid 4 は、以前のバージョンから全面的に書き直されました。パフォーマンスと標準準拠の大幅な改善に加えて、Grid のさまざまな機能が、現代のコンピューティングとソフトウェア開発の時代を反映するように分割されました。コンテナ化とクラウド分散型のスケーラビリティのために専用に構築された Selenium Grid 4 は、現代の全く新しいソリューションです。

Selenium Grid 4 Components

ルーター

ルーターは Grid のエントリポイントであり、すべての外部リクエストを受信し、正しいコンポーネントに転送します。

ルーターが新規セッションリクエストを受信すると、新規セッションキューに転送されます。

リクエストが既存のセッションに属している場合、ルーターセッションマップにクエリを実行して、セッションが実行されているノード ID を取得し、リクエストはノードに直接転送されます。

ルーターは、プロセスで不要なコンポーネントに過負荷をかけることなく、リクエストをより適切に処理できるコンポーネントに送信することで、Grid 内の負荷を分散します。

ディストリビューター

ディストリビューターには、主に 2 つの責任があります。

すべてのノードとその機能を登録および追跡する

ノードは、イベントバスを介してノード登録イベントを送信することにより、ディストリビューターに登録します。ディストリビューターはそれを読み取り、HTTP 経由でノードに到達してその存在を確認しようとします。リクエストが成功した場合、ディストリビューターはノードを登録し、GridModel を介してすべてのノード機能を追跡します。

新規セッションキューをクエリし、保留中の新規セッションリクエストを処理する

新規セッションリクエストがルーターに送信されると、新規セッションキューに転送され、キュー内で待機します。ディストリビューターは、保留中の新規セッションリクエストについて新規セッションキューをポーリングし、セッションを作成できる適切なノードを見つけます。セッションが作成されると、ディストリビューターは、セッション ID とセッションが実行されているノード間の関係をセッションマップに保存します。

セッションマップ

セッションマップは、セッション ID とセッションが実行されているノード間の関係を保持するデータストアです。リクエストをノードに転送するプロセスでルーターをサポートします。ルーターは、セッション ID に関連付けられたノードセッションマップに要求します。

新規セッションキュー

新規セッションキューは、すべての新規セッションリクエストを FIFO 順に保持します。リクエストタイムアウトとリクエスト再試行間隔(タイムアウトのチェック頻度)を設定するための構成可能なパラメータがあります。

ルーターは、新規セッションリクエストを新規セッションキューに追加し、応答を待ちます。新規セッションキューは、キュー内のリクエストがタイムアウトしたかどうかを定期的にチェックし、タイムアウトした場合、リクエストは拒否され、すぐに削除されます。

ディストリビューターは、スロットが利用可能かどうかを定期的にチェックします。利用可能な場合、ディストリビューターは、新規セッションキューをポーリングして、最初に一致するリクエストを探します。次に、ディストリビューターは新しいセッションの作成を試みます。

要求された機能が、空いているノードスロットの機能と一致すると、ディストリビューターは利用可能なスロットを取得しようとします。すべてのスロットがビジー状態の場合、ディストリビューターはリクエストをキューに戻します。再試行中またはキューの先頭に追加中にリクエストがタイムアウトした場合、リクエストは拒否されます。

セッションが正常に作成されると、ディストリビューターはセッション情報を新規セッションキューに送信します。新規セッションキューは、それをルーターに送り返し、最終的にクライアントに送り返します。

ノード

Grid には複数のノードを含めることができます。各ノードは、それが実行されているマシンの利用可能なブラウザのスロットを管理します。

ノードは、イベントバスを介してディストリビューターに自身を登録し、その構成は登録メッセージの一部として送信されます。

デフォルトでは、ノードは、それが実行されているマシンのパスで利用可能なすべてのブラウザドライバを自動登録します。また、Chromium ベースのブラウザと Firefox 用に CPU ごとに 1 つのスロットを作成します。Safari の場合、作成されるスロットは 1 つだけです。特定の構成により、Docker コンテナでセッションを実行したり、コマンドをリレーしたりできます。

ノードは、受信したコマンドのみを実行し、評価、判断、またはコマンドと応答の流れ以外のものを制御しません。ノードが実行されているマシンは、他のコンポーネントと同じオペレーティングシステムである必要はありません。たとえば、Windows ノードは、Edge の IE モードをブラウザオプションとして提供する機能を備えている場合がありますが、これは Linux または Mac では不可能であり、Grid には Windows、Mac、または Linux で構成された複数のノードを含めることができます。

イベントバス

イベントバスは、ノードディストリビューター新規セッションキュー、およびセッションマップ間の通信パスとして機能します。Grid は、高価な HTTP 呼び出しを避け、内部通信のほとんどをメッセージを介して行います。完全に分散モードで Grid を起動する場合、イベントバスは最初に起動する必要があるコンポーネントです。