對 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 可讓您使用開發人員驗證,在沒有網路連線能力的情況下測試服務。這樣一來,在與專案相關聯的虛擬私有雲 (VPC) 附加的 Compute Engine 虛擬機器上,JMeter 等測試控管工具就能存取。
請勿使用無法控制速率和並行性的工具產生負載。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 和 Matplotlab 整合。Colab 也能輕鬆與 Seaborn 等豐富的資料圖表工具整合。
找出瓶頸
負載測試可協助您找出效率不彰的程式碼和擴充瓶頸。效率不彰的程式碼需要處理更多流量,因此會導致成本增加,但不一定會阻礙資源調度。舉例來說,如果依賴具有資料表層級鎖定的資料庫交易,可能會形成瓶頸,導致 Cloud Run 服務無法擴充,因為一次只能執行一筆交易。
查看用戶端體驗的效能
您可以查詢 JMeter 擷取的記錄,其中包含在用戶端測得的延遲時間。不過,由於 JMeter 等伺服器測試工具與瀏覽器或行動用戶端不同,您可能也需要使用瀏覽器架構 (例如 Selenium Webdriver) 或行動用戶端測試架構執行測試。請注意,TLS 連線初始化可能會導致最大延遲時間過長,進而產生離群值,導致結果偏差。
最佳做法摘要
執行負載測試,判斷遷移至 Cloud Run 是否為正確選擇,以及服務是否能擴充至預期的流量上限。使用 JMeter 等工具執行測試。將記錄匯出至 BigQuery 進行詳細分析。