負載測試最佳做法

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

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

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

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

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

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

適當使用 max instances

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

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

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

europe-west1 區域進行負載測試

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

找出瓶頸

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

檢查用戶端體驗到的效能

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

最佳做法摘要

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

後續步驟