本頁面提供負載測試 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,進行詳細分析。