Selenium Grid 組件

了解如何使用不同的 Grid 組件

Selenium Grid 4 是從先前版本從頭開始重寫的。除了對效能和標準合規性進行全面的改進之外,Grid 的不同功能也被分解出來,以反映更現代的運算和軟體開發時代。Selenium Grid 4 專為容器化和雲端分散式擴展而建構,是現代化時代全新的解決方案。

Selenium Grid 4 Components

路由器

路由器是 Grid 的入口點,接收所有外部請求,並將它們轉發到正確的組件。

如果路由器收到新的 session 請求,它將被轉發到新 Session 佇列

如果請求屬於現有的 session,路由器將查詢 Session Map 以取得 session 正在執行的節點 ID,然後請求將直接轉發到節點

路由器通過將請求發送到能夠更好地處理它們的組件來平衡 Grid 中的負載,而不會使流程中不需要的任何組件過載。

分配器

分配器有兩個主要職責

註冊並追蹤所有節點及其功能

節點通過事件匯流排發送節點註冊事件來向分配器註冊。分配器讀取它,然後嘗試通過 HTTP 連線到節點以確認其存在。如果請求成功,分配器將註冊節點,並通過 GridModel 追蹤所有節點的功能。

查詢新 Session 佇列並處理任何待處理的新 session 請求

當新的 session 請求被發送到路由器時,它會被轉發到新 Session 佇列,在那裡它將在佇列中等待。分配器將輪詢新 Session 佇列以查找待處理的新 session 請求,然後找到適合建立 session 的節點。session 建立後,分配器將 session ID 與 session 正在執行的節點之間的關聯儲存在 Session Map 中。

Session Map

Session Map 是一個資料儲存,用於保存 session ID 與 session 正在執行的節點之間的關係。它在將請求轉發到節點的過程中支援路由器路由器將向 Session Map 詢問與 session ID 關聯的節點

新 Session 佇列

新 Session 佇列以 FIFO 順序保存所有新的 session 請求。它具有可配置的參數,用於設定請求超時和請求重試間隔(檢查超時的頻率)。

路由器將新的 session 請求添加到新 Session 佇列並等待回應。新 Session 佇列定期檢查佇列中是否有任何請求已超時,如果超時,則立即拒絕並移除請求。

分配器定期檢查是否有插槽可用。如果可用,分配器會輪詢新 Session 佇列以查找第一個匹配的請求。然後,分配器嘗試建立新的 session。

一旦請求的功能與任何可用節點插槽的功能匹配,分配器就會嘗試取得可用的插槽。如果所有插槽都忙碌,分配器將把請求發回佇列。如果請求在重試或添加到佇列前端時超時,則會被拒絕。

session 成功建立後,分配器將 session 資訊發送到新 Session 佇列,然後將其發送回路由器,最後發送到客戶端。

節點

一個 Grid 可以包含多個節點。每個節點管理其運行的機器上可用瀏覽器的插槽。

節點通過事件匯流排分配器註冊自身,其組態作為註冊訊息的一部分發送。

預設情況下,節點會自動註冊在其運行的機器路徑上可用的所有瀏覽器驅動程式。它還為基於 Chromium 的瀏覽器和 Firefox 為每個可用的 CPU 建立一個插槽。對於 Safari,僅建立一個插槽。通過特定的組態,它可以以 Docker 容器中運行 session 或中繼命令。

節點僅執行接收到的命令,它不評估、不做判斷或控制命令和回應的流程以外的任何事情。運行節點的機器不需要與其他組件具有相同的作業系統。例如,Windows 節點可能具有在 Edge 上提供 IE 模式作為瀏覽器選項的功能,而這在 Linux 或 Mac 上是不可能的,並且 Grid 可以配置多個配置有 Windows、Mac 或 Linux 的節點

事件匯流排

事件匯流排充當節點分配器新 Session 佇列Session Map 之間的通訊路徑。Grid 的大部分內部通訊都通過訊息進行,避免了昂貴的 HTTP 呼叫。在完全分散式模式下啟動 Grid 時,事件匯流排是第一個應該啟動的組件。

上次修改時間:2024 年 9 月 10 日:Transparent png favicons (#1937)[deploy site] (03705be0833)