負載測試最佳做法

本頁面提供負載測試 Cloud Run 服務的最佳做法,可判斷服務能否在正式使用期間順利調度資源,並找出導致無法調度資源的任何瓶頸。

執行負載測試前執行的測試

在進行負載測試前,請先在開發或小型測試環境中找出並解決並行問題。執行負載測試前,請先測量容器並行數,並確保 Cloud Run 服務能穩定啟動。

手動調整執行次數時,請著重於小幅增加的次數,進行容器測試。 如要在 Cloud Run 中模擬手動資源調度,請將執行個體數量上限設為您想調度的值。

如果您最近才建構或變更容器映像檔,請先獨立測試該映像檔,再執行負載測試。

此外,在執行大規模負載測試前,您也應檢查其他類型的效能問題,例如延遲時間過長和 CPU 使用率過高。

適當使用 max instances

Cloud Run 會強制執行執行個體數量上限,限制服務的擴充規模。執行個體數量的預設上限為 100。 如果預期負載測試會超過這個預設值,請務必與 Google 的帳戶團隊合作,設定新的上限。如果您尚未與帳戶團隊建立關係,請與銷售人員聯絡 Cloud de Confiance by S3NS

可選取的執行個體數量上限取決於CPU 限制記憶體限制,以及您要部署的區域。

這些限制由配額限制管理,您可以提出配額限制增加要求,提高限制。

europe-west1 區域進行負載測試

Cloud de Confiance 區域europe-west1提供高配額限制,因此 Google 建議在europe-west1中進行負載測試。如果您預期會接近配額限制,請與帳戶團隊協調,並提交支援案件,詳細說明測試時間和規模。

測試適當的 CPU 使用率和服務初始化設定檔

在理想情況下,您可以將服務的測試版本部署至 Cloud Run,並直接進行負載測試。不過,在某些情況下,您可能無法部署服務的測試版本。舉例來說,您的 Cloud Run 服務可能屬於複雜的生態系統,難以在測試環境中複製。

在這些情況下,您可以模擬服務,使用 CPU 使用率和初始化時間相近的較簡單服務,估算服務的效能。初始化時間對於快速擴展尤其重要。請注意,使用過於簡單的內容進行測試也會有問題。舉例來說,請避免使用簡單的 hello world 服務進行測試,因為這類服務會傳回收到的要求,且不會進行任何處理。

使用測試架構產生負載

您可以使用測試架構 (例如 JMeter) 產生測試負載,導致流量出現受控尖峰。您可以在 JMeter 測試中使用 JMeter 執行緒群組數量和要求之間的延遲,增加負載。

您也可以傳送簡單的 HTTP 要求,或使用 JMeter 記錄瀏覽器工作階段。Cloud Run 可讓您使用開發人員驗證測試服務,不必連上網際網路。這樣一來,您就能從測試架構 (例如 JMeter) 存取服務,該架構在附加至與專案相關聯的虛擬私有雲 (VPC) 的 Compute Engine 虛擬機器上執行。

請勿透過無法控制速率和並行的工具產生負載。 Pub/Sub 無法控制流量速率和用戶端數量,因此不適合用來產生負載。如果您不知道速率和並行,就不會知道要測試的內容。

使用匯出的記錄檔進行詳細的記錄分析

您需要以秒為單位分析事件,瞭解 Cloud Run 服務對流量快速暴增的反應。由於監控資料的精細程度不足,因此需要進行記錄檔分析。您也可以透過記錄分析,調查延遲時間較長的請求原因。

寫入記錄時,您可以直接寫入 stdout,不必使用 Cloud Logging 用戶端程式庫,即可提升記錄效能。

如要在開始測試前設定記錄匯出功能,請建立目的地為 BigQuery 的記錄接收器,並加入篩選器,例如:

resource.type="cloud_run_revision"
resource.labels.service_name="[your app]"

避免虛假的冷啟動

如要盡量減少使用者遇到的冷啟動情形,請將執行個體數量下限設為至少 1。

確保服務能線性擴充

在不同負載下重複測試,確保 Cloud Run 服務會隨著負載線性擴展,且不會在低於預期實際工作環境的負載下,達到限制瓶頸。

在 Colaboratory 中分析結果並以視覺化方式呈現

使用摘要監控圖表,大致瞭解結果,並透過匯出的記錄進行詳細記錄分析

監控圖表可協助您找出:

  • 新執行個體建立及初始化的速度有多快 (以秒為單位)?
  • 要求在不同執行個體間的分配是否平均?
  • 不同百分位數的延遲時間可以多快降至穩定狀態值?

您可以使用 BigQuery 的 Cloud de Confiance 控制台使用者介面,檢查匯出的記錄結構定義並預覽結果。使用 Colab 執行查詢並繪製結果圖表,因為 Colab 已與 BigQuery、Pandas 和 Matplotlib 整合。Colab 也可輕鬆整合 Seaborn 等豐富的資料視覺化工具。

找出瓶頸

負載測試可協助您找出效率不彰的程式碼和擴充瓶頸。程式碼效率不彰會導致成本增加,因為需要處理更多流量,但這不一定會阻止擴充。舉例來說,如果資料庫翻譯作業依賴表格層級的鎖定,可能會成為瓶頸,因為一次只能執行一項交易,導致 Cloud Run 服務無法擴充。

檢查用戶端體驗到的效能

您可以查詢 JMeter 擷取的記錄,這些記錄包含在用戶端測量的延遲時間。不過,由於伺服器測試工具 (例如 JMeter) 與瀏覽器或行動用戶端不同,您可能也想使用瀏覽器架構 (例如 Selenium Webdriver) 或行動用戶端測試架構執行測試。請注意,傳輸層安全標準 (TLS) 連線初始化可能導致最大延遲時間過長,進而使結果出現離群值。

最佳做法摘要

執行負載測試,判斷遷移至 Cloud Run 是否為正確選擇,以及服務是否能擴充至預期流量上限。使用 JMeter 等測試架構執行測試。將記錄匯出至 BigQuery,進行詳細分析。

後續步驟