Cloud Storage 一致性

本頁面說明哪些 Cloud Storage 作業具有同步一致性,以及哪些作業具有最終一致性。在可快取且可公開讀取的物件中,您可以控制物件作業的一致性程度。

同步一致性作業

Cloud Storage 可在下列作業中提供全域同步一致性:

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

將物件寫入 Cloud Storage 時 (例如上傳、組合或複製物件),只要收到寫入要求的回應,物件就能立即用於讀取和中繼資料作業。這項規定適用於所有 bucket 和所有儲存空間類別,也適用於建立新物件和取代現有物件。Cloud Storage 也提供資源 (例如資料夾和受管理資料夾) 的建立後讀取、中繼資料更新後讀取、刪除後讀取,以及列出一致性。

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

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

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

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

同樣地,HMAC 金鑰的狀態變更要求送出後,最多需要 3 分鐘才會生效。舉例來說,如果您停用 HMAC 金鑰,請至少等待 3 分鐘再提出刪除金鑰的要求,因為在停用後的 3 分鐘內嘗試刪除金鑰可能會失敗。

最終一致性作業

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

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

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

本文透過下列範例來說明最終一致性引起的行為:如果您將使用者的值區存取權移除,這項變更會立即反映在值區的中繼資料中,但是該使用者短時間內可能還是會擁有該值區的存取權。

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

快取控制與一致性

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

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

不可分割的作業

Cloud Storage 可確保大多數涉及個別物件的作業 (例如上傳物件、更新物件的中繼資料、覆寫物件及刪除物件) 具有原子性。

批次要求會將個別作業匯總為單一要求,但並非不可分割,因為批次中可能部分作業失敗,部分作業成功。

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

後續步驟