Cloud Storage 一致性

本頁面說明 Cloud Storage 的同步一致和最終一致作業。一致性行為會決定物件、bucket 和存取權限的變更何時生效。對於可快取、可公開讀取的物件,您可以控管作業的一致性。

同步一致性作業

Cloud Storage 為下列作業提供高度的全域一致性:

  • 值區清單
  • 建立後讀取 bucket
  • Bucket 中繼資料更新後的讀取作業
  • Bucket 刪除後的讀取作業
  • 物件寫入後的讀取作業
  • 中繼資料更新後的物件讀取作業
  • 刪除物件後的讀取作業
  • 物件清單

將物件寫入 Cloud Storage 時 (例如上傳、組成或複製物件),只要收到寫入要求成功的訊息,就能立即讀取物件及執行中繼資料作業。所有 bucket 和儲存空間類別都適用這項行為,且一致性模型適用於建立新物件和取代現有物件。 Cloud Storage 也提供建立後讀取、中繼資料更新後讀取、刪除後讀取,以及資料夾和代管資料夾等資源的清單一致性。

由於寫入作業具有同步一致性,因此在寫入後的物件讀取或中繼資料更新後的物件讀取作業上,您永遠不會收到 404 Not Found 回應或過時的資料,即使 bucket 位於雙區域或多區域也是如此。在極少數情況下,如果資料尚未跨區域複製,但物件最初寫入的位置無法使用,嘗試存取物件時會傳回可重試的 500 錯誤回應。

全域同步一致性也能延伸適用於物件的刪除作業。如果刪除要求成功,立即嘗試下載物件或其中繼資料,會出現 404 Not Found 狀態碼。您會收到 404 錯誤是因為刪除作業成功後該物件就不再存在。

值區清單和物件清單具有同步一致性:建立值區或物件後,如果立即執行相關的 list 作業,新建立的值區或物件會出現在傳回的清單中。

就值區而言,雖然中繼資料更新對於中繼資料更新後的讀取作業具有同步一致性,但產生的設定變更可能需要一些時間才能生效。舉例來說,如果您在 bucket 上啟用物件版本管理,請等待至少 30 秒,再刪除或取代物件。

同樣地,對於 HMAC 金鑰,從您要求變更金鑰狀態到狀態變更生效之間,最多會有 3 分鐘的延遲。舉例來說,如果您停用 HMAC 金鑰,請至少等待 3 分鐘,再要求刪除金鑰,因為在前 3 分鐘內嘗試刪除可能會失敗。

最終一致性作業

下列作業具有最終一致性:

  • 授予或撤銷資源存取權。
  • 刪除後重新建立 bucket。

一般來說,這些作業一分鐘後才會生效,在某些情況下,可能要幾分鐘後才會生效。

舉例來說,如果您移除使用者對值區的存取權,這項變更會立即反映在值區的中繼資料中;不過,使用者可能仍可在短時間內存取該值區。

刪除後重新建立的 bucket 可能需要幾分鐘才能存取。

快取控制與一致性

可公開讀取的快取物件可能不具有同步一致性。如果您允許物件受到快取,而且在更新或刪除時該物件處在快取中,則必須等到快取的生命週期結束後,系統才會更新或刪除經過快取的物件。

物件的快取生命週期是由與物件相關聯的 Cache-Control 中繼資料定義。您可以在物件的初始上傳作業中加入 Cache-Control 要求標頭,或在後續更新物件的中繼資料時,設定 Cache-Control 中繼資料。由於您控制 Cache-Control 中繼資料,因此也能控制快取物件的一致程度。此外,雖然物件要求可以包含自己的 Cache-Control 標頭,但如果這些標頭設為避免快取內容,Cloud Storage 會忽略這些標頭。

不可部分完成的作業

Cloud Storage 可確保大部分涉及個別物件的作業 (例如上傳物件、更新物件中繼資料、覆寫物件及刪除物件) 具有不可分割性。舉例來說,如果物件上傳作業因網路故障而中斷,就不會有部分資料上傳至 bucket。只有在整個上傳作業成功完成,且伺服器傳送成功回應後,物件才會顯示在 bucket 中。

批次要求會將個別作業彙整成單一要求,但並非不可分割,因為批次中包含的部分作業可能會失敗,其他作業則會成功。

快取可能會導致您收到過時版本的物件,如果您執行範圍讀取時未指定版本編號,且物件在連續範圍讀取之間遭到覆寫,資料可能會損毀。最佳做法是使用前置條件,確保擷取正確的物件版本。

後續步驟