Compute Engine API 的最佳做法

本文件說明使用 Compute Engine API 的最佳做法,適用對象為熟悉該 API 的使用者。如果您是初學者,請參閱必要條件使用 Compute Engine API 的相關說明。

遵循這些最佳做法可節省時間、避免錯誤,並減輕費率配額的影響。

使用用戶端程式庫

建議您透過程式碼存取 Compute Engine API,而用戶端程式庫是這項作業的最佳方式。用戶端程式庫提供的程式碼可讓您透過常見的程式設計語言存取 API,進而節省時間並改善程式碼效能。

進一步瞭解 Compute Engine 用戶端程式庫用戶端程式庫最佳做法

使用 Cloud 控制台產生 REST 要求

建立資源時,請使用 Google Cloud 控制台中的資源建立頁面或詳細資料頁面產生 REST 要求。使用產生的 REST 要求可節省時間,並有助於避免語法錯誤。

瞭解如何產生 REST 要求

等待作業完成

請勿假設作業 (任何變更資源的 API 要求) 已完成或成功。請改為使用 Operation 資源的 wait 方法,確認作業是否已完成。(您不需要驗證不會修改資源的請求,例如使用 GET HTTP 動詞的讀取要求,因為 API 回應已指出請求是否成功。因此,Compute Engine API 不會針對這些要求傳回 Operation 資源。)

只要 API 要求成功啟動,就會傳回 HTTP 200 狀態碼。雖然收到 200 表示伺服器已成功收到您的 API 要求,但這個狀態碼不會指出要求的作業是否已順利完成。舉例來說,您可以收到 200,但作業可能尚未完成,或作業可能已失敗。

任何針對長時間執行作業的建立、更新或刪除要求,都會傳回 Operation 資源,用於擷取該要求的狀態。Operation 資源的 status 欄位為 DONE 時,作業即完成。如要檢查狀態,請使用與傳回 Operation 資源的範圍相符的 wait 方法:

作業完成或要求接近 2 分鐘的期限時,wait 方法會傳回。使用 wait 方法時,請避免短暫的輪詢作業,執行這類作業時,用戶端會連續對伺服器提出要求而不會等待回應。在重試迴圈中使用 wait 方法,並搭配指數型退避來檢查要求狀態,這比使用 get 方法搭配 Operation 資源的短暫輪詢更有助於保留速率配額,並減少延遲時間。

如要進一步瞭解如何使用 wait 方法,並查看相關範例,請參閱「處理 API 回應」一文。

如要查看要求作業的狀態,請參閱「查看作業狀態」。

在等待作業完成的同時,請考量作業最短保留期限,因為完成的作業可能會在這個期限過後從資料庫中移除。

分頁列出結果

使用清單方法 (例如 *.list 方法、*.aggregatedList 方法或任何其他傳回清單的方法) 時,請盡可能分頁顯示結果,確保您能讀取整個回應。如果您未分頁,則只能收到 maxResults 查詢參數所指定的前 500 個元素。

如要進一步瞭解 Google Cloud 中的分頁,請參閱「清單分頁」一文。如需具體詳細資料和範例,請參閱您要使用的清單方法的參考說明文件,例如 instances.list

您也可以使用 Cloud 用戶端程式庫處理分頁

使用用戶端清單篩選器避免配額錯誤

當您使用篩選器搭配 *.list*.aggregatedList 方法時,如果要求中超過 10, 000 個篩選資源,就會產生額外的配額費用。詳情請參閱「費率配額」中的 filtered_list_cost_overhead

如果專案超出此費率配額,您會收到 403 錯誤,原因為 rateLimitExceeded。為避免發生這項錯誤,請為清單要求使用用戶端篩選器。

依賴錯誤代碼,而非錯誤訊息

Google API 必須使用由 google.rpc.Code 定義的標準錯誤代碼,但錯誤訊息可能會在未經通知的情況下變更。錯誤訊息通常是供開發人員閱讀,而非程式。

進一步瞭解 API 錯誤

盡量減少用戶端重試次數,以免超出速率配額

請盡量減少專案的用戶端重試次數,以免發生 rateLimitExceeded 錯誤,並盡量提高速率配額的使用率。下列做法有助於您保留專案的頻率配額:

  • 避免短時間輪詢。
  • 慎用爆發功能。
  • 請一律在以指數輪詢方式重試的迴圈中呼叫。
  • 使用用戶端頻率限制器。
  • 將應用程式分散在多個專案中。

避免短時間輪詢

避免短暫的輪詢作業,執行這類作業時,用戶端會連續對伺服器提出要求而不會等待回應。執行短時間輪詢較不易攔截異常要求,這類要求無論是否傳回有用資料均會佔用配額。

等待作業完成,而非短時間輪詢。

慎用爆發功能

慎用爆發功能。爆發是指允許特定用戶端在短時間內發出多項 API 要求。通常只會在例外情形這麼做,例如您的應用程式需要處理的流量比平常多。爆發會快速用完頻率配額,因此除非必要請勿使用。

如需使用爆發功能,請盡可能使用專用批次 API,例如 大量執行個體 API代管執行個體群組

進一步瞭解如何批次處理要求

請務必在重試循環中以指數輪詢方式呼叫

達到配額時,運用指數輪詢主動拉長要求與要求之間的間隔。

任何重試迴圈都應具備指數型後退,確保頻繁重試不會造成應用程式超載或超過頻率配額。否則,您可能會對同一專案中的所有其他系統造成負面影響。

如果您需要針對因達到速率配額而失敗的作業執行重試迴圈,指數輪詢策略應在重試之間保留足夠時間,讓配額值區重新填滿 (通常每分鐘一次)。

或者,如果您需要在等待作業逾時時重試迴圈,指數輪詢策略的最大間隔不得超過作業最小保留期間。否則,您可能會收到作業 Not Found 錯誤。

如需實作指數輪詢的範例,請參閱 Identity and Access Management API 的指數輪詢演算法

使用用戶端頻率限制工具

使用用戶端頻率限制工具。用戶端頻率限制工具會設定一個人工限制,相關用戶端就只能使用定量配額,避免任何一個用戶端佔用所有配額。

將應用程式分散在多個專案中

將應用程式分散在多個專案中,有助於減少對配額值區的要求數量。配額是採個別專案制,因此,您可以將應用程式分散開來,讓每一個應用程式各用一組專用配額。

檢查清單摘要

下列檢查清單列出使用 Compute Engine API 的最佳做法。

後續步驟