使用區域檢視畫面,確保控制層讀取作業具有彈性

「控制層依附元件」是指管理應用程式中資源定義的 API 和中繼資料服務。如要建構高可用性、具韌性的應用程式,並在 Compute Engine 上自動執行部署工作流程,就必須隔離這些依附元件。雖然全域 API 端點在所有區域都提供同步一致性,但全域控制層或遠端區域中任何暫時性的延遲高峰或中斷,都可能延遲或封鎖本機服務。

如要建構可靠的應用程式,確保應用程式在全域 API 中斷時仍能運作,並在每個區域獨立運作,您可以設定服務,查詢全域資源的區域檢視畫面。使用區域化唯讀 API 端點讀取資源定義,應用程式只會與特定區域的控制層通訊。這種區域性故障隔離機制可確保服務維持高可用性和回應能力,即使全球發生中斷事件也不受影響。

支援的資源類型

下列全域資源提供區域檢視端點:

  • 專案:projectViews 端點提供全域專案資源的區域唯讀存取權。
  • OS 映像檔:imageViews 端點提供全域 OS 映像檔資源的區域唯讀存取權。

限制

所有全域性資源的中繼資料都會儲存在中央全域資料庫。使用標準全域 API 端點建立、讀取、更新或刪除資源時,Compute Engine 要求會直接從中央全域資料庫讀取及寫入,提供同步一致性。

區域檢視端點會從中央全域資料庫的區域唯讀副本讀取資源中繼資料。由於變更會非同步複製到這些區域副本,因此查詢區域檢視區塊時,可能會遇到下列情況:

  • 些微延遲:在全球建立、更新或刪除資源時,變更最多可能需要 60 秒才能複製到所有區域檢視端點。在這段短暫期間,從區域檢視畫面讀取資料時,可能會傳回稍微舊一點的資料。
  • 自動備援:如果您在資源複製到區域完成前,從區域檢視畫面要求資源,Compute Engine 會自動直接從中央全域資料庫讀取,確保要求仍能成功。

區域檢視畫面和全域 API 的差異

下表列出各資源類型的區域檢視端點與標準全域 API 端點差異:

專案

下表彙整了專案資源的區域檢視端點和標準全域 API 端點之間的差異:

功能 全域 API 區域檢視 API
端點 全球 區域
資源網址 /projects/PROJECT_ID /projects/PROJECT_ID/regions/REGION/projectViews
故障域 全球 隔離到指定區域
支援的方法 讀取及寫入 唯讀 (Get)
API 配額 會消耗全域 API 讀取和寫入配額值區 耗用區域 API 讀取配額 bucket
寫後讀一致 同步一致 (從中央全域資料庫讀取) 最終一致 (從區域副本讀取)
配額欄位行為 傳回 quota 陣列,使用跨區域展開功能,提供所有區域和可用區的即時配額用量資料。 quota 陣列會從傳回的 Project 物件中排除。由於 projectViews 端點會嚴格從區域副本讀取資料,且不會執行跨區域扇出作業來收集配額指標,因此系統完全不會傳回 quota 陣列。如要瞭解配額設定限制和準確的即時用量指標,請查詢全域 projects.get 端點。

OS 映像檔

下表摘要說明 OS 映像檔資源的區域檢視端點與標準全域 API 端點之間的差異:

功能 全域 API 區域檢視 API
端點 全球 區域
資源網址 /projects/PROJECT_ID/global/images /projects/PROJECT_ID/regions/REGION/imageViews
故障域 全球 隔離到指定區域
支援的方法 讀取及寫入 唯讀 (Get和 List)
API 配額 會消耗全域 API 讀取和寫入配額值區 耗用區域 API 讀取配額 bucket
寫後讀一致 同步一致 (從中央全域資料庫讀取) 最終一致性 (從區域副本讀取)

定價

透過區域唯讀 API 端點存取區域檢視表,不會產生額外費用。與標準的全球 Compute Engine API 要求一樣,對區域檢視端點提出的要求會耗用專案的標準 API 配額,具體來說是區域 API 讀取配額,但不會產生額外費用。

高可用性最佳做法

為盡可能提高應用程式彈性、避免控制層負載過高,以及避免建立單一區域熱點,請在設定自動化系統和用戶端工作負載時,遵循下列可靠性做法:

  • 查詢當地區域,縮小受影響範圍:將 projectViews 和 imageViews API 要求傳送至用戶端工作負載或部署叢集執行的確切區域。如果是可用區工作負載,請使用父項區域。將讀取作業本地化,可確保其他區域的網路中斷或服務中斷,不會影響本機服務。
  • 動態偵測區域字串:請勿在共用用戶端程式庫或部署範本中,硬式編碼特定預設區域字串。請改為從本機執行階段環境動態偵測工作負載目前的執行區域,讓多區域容錯移轉功能順利運作。
  • 使用區域配額隔離功能,避免工作負載相互競爭:Compute Engine 會依區域強制執行 API 頻率限制。某個區域的流量尖峰或失控指令碼會耗用該特定區域的配額,但不會影響其他重要區域的 API 可用性或觸發速率限制 (429 Too Many Requests)。

後續步驟