DynamoDB 全域資料表的運作方式 - Amazon DynamoDB

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

DynamoDB 全域資料表的運作方式

下列各節說明 Amazon DynamoDB 中全域資料表的概念和行為。

概念

全域資料表是一種 DynamoDB 功能,可跨 AWS 區域複寫資料表資料。

複本資料表 (或複本) 是做為全域資料表一部分的 DynamoDB 資料表。全域資料表包含兩個或多個不同 AWS 區域的複本資料表。每個全域資料表每個 AWS 區域只能有一個複本。全域資料表中的所有複本共用相同的資料表名稱、主索引鍵結構描述和項目資料。

當應用程式將資料寫入一個區域中的複本時,DynamoDB 會自動將寫入複寫至全域資料表中的所有其他複本。如需如何開始使用全域資料表的詳細資訊,請參閱 教學課程:建立全域資料表

版本

DynamoDB 全域資料表有兩種版本可用:2019.11.21 版 (目前) 和 2017.11.29 版 (舊版)。您應該盡可能使用 2019.11.21 版 (目前)。本文件區段中的資訊適用於 2019.11.21 版 (目前)。如需詳細資訊,請參閱判斷全域資料表的版本

可用性

全域資料表可讓您更輕鬆地實作多區域高可用性架構,藉此改善業務連續性。如果單一 AWS 區域中的工作負載受損,您可以將應用程式流量轉移到不同的區域,並對相同全域資料表中的不同複本資料表執行讀取和寫入。

全域資料表中的每個複本資料表都提供與單一區域 DynamoDB 資料表相同的耐用性和可用性。全域資料表提供 99.999% 的可用性服務水準協議 (SLA),相較於單一區域資料表的 99.99%。

一致性模式

建立全域資料表時,您可以設定其一致性模式。全域資料表支援兩種一致性模式:多區域最終一致性 (MREC) 和多區域強式一致性 (MRSC)。

如果您在建立全域資料表時未指定一致性模式,全域資料表會預設為多區域最終一致性 (MREC)。全域資料表不能包含以不同一致性模式設定的複本。您無法在建立後變更全域資料表的一致性模式。

多區域最終一致性 (MREC)

多區域最終一致性 (MREC) 是全域資料表的預設一致性模式。MREC 全域資料表複本中的項目變更會以非同步方式複寫至所有其他複本,通常在一秒或更短時間內。萬一 MREC 全域資料表中的複本遭到隔離或受損,當複本正常運作時,任何尚未複寫到其他區域的資料都會複寫。

如果相同項目同時在多個區域中修改,DynamoDB 會針對每個項目使用具有最新內部時間戳記的修改來解決衝突,稱為「最後寫入者獲勝」衝突解決方法。項目最終會在所有複本中收斂至上次寫入所建立的版本。

如果項目上次在發生讀取的區域中更新,則高度一致的讀取操作會傳回項目的最新版本,但如果項目上次在不同區域中更新,則可能會傳回過時的資料。條件式寫入會根據區域中項目的版本來評估條件表達式。

您可以透過將複本新增至現有的 DynamoDB 資料表來建立 MREC 全域資料表。新增複本不會影響現有單一區域 DynamoDB 資料表或全域資料表複本的效能。您可以將複本新增至 MREC 全域資料表,以擴展資料複寫的區域數量,或在不再需要複本時從 MREC 全域資料表中移除複本。MREC 全域資料表可以在可使用 DynamoDB 的任何區域中擁有複本,並且可以擁有與AWS 分割區中存在區域一樣多的複本。

多區域強式一致性 (MRSC)

您可以在建立全域資料表時設定多區域強式一致性 (MRSC) 模式。在寫入操作傳回成功回應之前,MRSC 全域資料表複本中的項目變更會同步複寫到至少一個其他區域。

任何 MRSC 複本上高度一致的讀取操作一律會傳回項目的最新版本。條件式寫入一律會根據項目的最新版本評估條件表達式。

當 嘗試修改已在另一個區域中修改的項目ReplicatedWriteConflictException時,寫入操作會失敗。如果寫入失敗,ReplicatedWriteConflictException則可以重試,如果項目不再在其他區域中修改,則寫入將會成功。

您可以使用三個複本或兩個複本和一個見證來設定 MRSC 全域資料表。見證是 MRSC 全域資料表的元件,其中包含寫入全域資料表複本的資料,並提供完整複本的選用替代方案,同時支援 MRSC 的可用性架構。您無法對見證執行讀取或寫入操作。見證位於與兩個複本不同的區域。

建立 MRSC 全域資料表時,您可以在 MRSC 資料表建立時間選擇複本和見證部署的區域。您可以判斷 MRSC 全域資料表是否已在哪個區域中從 DescribeTable API 的輸出設定見證。見證由 DynamoDB 擁有和管理,且見證不會出現在您設定見證的區域中 AWS 的帳戶中。

MRSC 全域資料表必須部署在剛好三個區域中。您可以將一個複本和一個見證或兩個複本新增至不包含資料的現有 DynamoDB 資料表,以建立 MRSC 全域資料表。您無法將其他複本新增至現有的 MRSC 全域資料表。您無法從 MRSC 全域資料表刪除單一複本或見證。您可以刪除兩個複本,或從 MRSC 全域資料表刪除一個複本和見證,將剩餘的複本轉換為單一區域 DynamoDB 資料表。

下列考量適用於 MRSC 全域資料表:

  • MRSC 全域資料表可在下列區域集中使用:

    • 美國區域集:美國東部 (維吉尼亞北部)、美國東部 (俄亥俄)、美國西部 (奧勒岡)

    • 歐洲區域集:歐洲 (愛爾蘭)、歐洲 (倫敦)、歐洲 (巴黎)、歐洲 (法蘭克福)

    • AP 區域集:亞太區域 (東京)、亞太區域 (首爾) 和亞太區域 (大阪)。

  • MRSC 全域資料表不能跨越區域集 (例如,MRSC 全域資料表不能同時包含來自美國和歐洲區域集的複本)。

  • MRSC 全域資料表不支援存留時間 (TTL)。

  • MRSC 全域資料表不支援本機次要索引 (LSIs)。

  • CloudWatch Contributor Insights 資訊只會針對發生 操作的 區域報告。

選擇一致性模式

選擇多區域一致性模式的關鍵條件是,您的應用程式是優先考慮較低的延遲寫入和強式一致性讀取,還是優先考慮全域強式一致性。

相較於 MRSC 全域資料表,MREC 全域資料表的寫入和強烈一致性讀取延遲較低。MREC 全域資料表可以支援相當於複本之間複寫延遲的復原點目標 (RPO),通常取決於複本區域幾秒鐘。

在下列情況下,您應該使用 MREC 模式:

  • 如果資料已在另一個區域中更新,您的應用程式可以容忍從強式一致讀取操作傳回的過時資料。

  • 相較於多區域讀取一致性,您可以優先考慮較低的寫入和高度一致的讀取延遲。

  • 您的多區域高可用性策略可以容忍大於零的 RPO。

相較於 MREC 全域資料表,MRSC 全域資料表具有更高的寫入和高度一致的讀取延遲。MRSC 全域資料表支援零的復原點目標 (RPO)。

在下列情況下,您應該使用 MRSC 模式:

  • 您需要跨多個 區域的強式一致讀取。

  • 您可以將全域讀取一致性優先於較低的寫入延遲。

  • 您的多區域高可用性策略需要 RPO 為零。

監控全域資料表

針對多區域最終一致性 (MREC) 設定的全域資料表會將ReplicationLatency指標發佈至 CloudWatch。此指標會追蹤項目寫入複本資料表,以及該項目出現在全域資料表中另一個複本之間的經過時間。 ReplicationLatency 以毫秒為單位,並針對全域資料表中的每個來源和目的地區域對發出。

典型ReplicationLatency值取決於所選 AWS 區域之間的距離,以及其他變數,例如工作負載類型和輸送量。例如,與非洲 (開普敦) (af-south-1) 區域相比,美國西部 (加利佛尼亞北部) (us-west-1) 區域的來源複本ReplicationLatency低於美國西部 (奧勒岡) (us-west-2) 區域。

的值增加ReplicationLatency可能表示來自一個複本的更新未及時傳播到其他複本資料表。在這種情況下,您可以暫時將應用程式的讀取和寫入活動重新導向至不同的 AWS 區域。

針對多區域強式一致性 (MRSC) 設定的全域資料表不會發佈ReplicationLatency指標。

故障注入測試

MREC 全域資料表與 AWS Fault Injection Service (AWS FIS) 整合,以在全域資料表工作負載上執行故障注入實驗。這可讓您透過暫停複寫往返所選複本,來測試應用程式對模擬區域隔離的回應。如需詳細資訊,請參閱暫停全域資料表複寫

存留時間 (TTL)

為 MREC 設定的全域資料表支援設定存留時間 (TTL) 刪除。全域資料表中所有複本的 TTL 設定會自動同步。當 TTL 從區域中的複本刪除項目時,刪除會複寫到全域資料表中的所有其他複本。TTL 不會耗用寫入容量,因此您不需要為發生刪除的區域中的 TTL 刪除付費。不過,您需要支付在全域資料表中具有複本的另一個區域中複寫刪除的費用。

TTL 刪除複寫會在要複寫刪除的複本上耗用寫入容量。如果寫入輸送量和 TTL 刪除輸送量的組合高於佈建寫入容量,則針對佈建容量設定的複本可能會調節請求。

針對多區域強式一致性 (MRSC) 設定的全域資料表不支援設定存留時間 (TTL) 刪除。

串流

為多區域最終一致性 (MREC) 設定的全域資料表會複寫變更,方法是從複本資料表上的 DynamoDB 串流讀取這些變更,並將該變更套用至所有其他複本資料表。因此,串流預設會在 MREC 全域資料表中的所有複本上啟用,而無法在這些複本上停用。MREC 複寫程序可能會在短時間內將多個變更合併為單一複寫寫入,導致每個複本的串流包含稍微不同的記錄。MREC 複本上的串流記錄一律會依項目排序,但複本之間的順序可能不同。

針對多區域強式一致性 (MRSC) 設定的全域資料表不使用 DynamoDB Streams 進行複寫,因此 MRSC 複本上預設不會啟用串流。您可以在 MRSC 複本上啟用串流。MRSC 複本上的串流記錄對於每個複本都是相同的,包括串流記錄排序。

如果您想要撰寫應用程式來處理 Streams 記錄,以取得在全域資料表中特定區域而非其他區域發生的變更,您可以將 屬性新增至定義該項目發生變更所在區域的每個項目。您可以使用此屬性來篩選 Streams 記錄,以找出在其他區域中發生的變更,包括使用 Lambda 事件篩選條件來呼叫 Lambda 函數,以找出特定區域中的變更。

交易

在針對 MREC 設定的全域資料表上,DynamoDB 交易操作 ( TransactWriteItemsTransactGetItems) 僅在叫用操作的區域中為原子。交易寫入不會跨區域複寫為單位,這表示在指定時間點,只有交易中的部分寫入可由其他複本中的讀取操作傳回。

例如,如果您在美國東部 (俄亥俄) 和美國西部 (奧勒岡) 區域擁有具有複本的全域資料表,並在美國東部 (俄亥俄) 區域執行TransactWriteItems操作,您可能會看到在美國西部 (奧勒岡) 區域中複寫變更時部分完成的交易。變更只有在來源區域中遞交之後,才會複寫到其他區域。

針對多區域強式一致性 (MRSC) 設定的全域資料表不支援交易操作,如果在 MRSC 複本上調用這些操作,則會傳回錯誤。

讀取和寫入輸送量

複寫會使用寫入容量。如果寫入輸送量和複寫輸送量的組合高於佈建寫入容量,則針對佈建容量設定的複本可能會調節請求。全域資料表中所有複本的隨需模式寫入容量都會同步。針對佈建容量設定的全域資料表會同步複本之間的自動擴展設定。根據耗用的寫入輸送量,每個複本的實際佈建寫入容量設定可能有所不同。

您可以獨立設定全域資料表中每個複本的讀取容量設定。將複本新增至全域資料表時,除非指定覆寫值,否則來源資料表或複本的讀取容量會用作初始值。

設定同步

DynamoDB 全域資料表中的設定是組態參數,可控制資料表行為和複寫的各個層面。這些設定是透過 DynamoDB 控制平面 APIs而且可以在建立或修改全域資料表時進行設定。全域資料表會自動同步所有複本的特定設定,以維持一致性,同時提供區域特定最佳化的彈性。了解哪些設定同步及其行為可協助您有效地設定全域資料表。根據其在複本之間的同步方式,設定分為三個主要類別。

下列設定一律會在全域資料表中的複本之間同步:

  • 容量模式 (佈建容量或隨需)

  • 資料表佈建寫入容量

  • 資料表寫入自動擴展

  • 全域次要索引 (GSI) 定義

  • GSI 佈建的寫入容量

  • GSI 寫入自動擴展

  • 伺服器端加密 (SSE) 類型

  • MREC 模式中的串流定義

  • 存留時間 (TTL)

  • 暖輸送量

  • 隨需最大寫入輸送量

下列設定會在複本之間同步,但每個複本都可以覆寫:

  • 資料表佈建的讀取容量

  • 資料表讀取自動擴展

  • GSI 佈建的讀取容量

  • GSI 讀取自動擴展

  • 資料表類別

  • 隨需最大讀取輸送量

注意

如果在任何其他複本上修改設定,則會變更可覆寫的設定值。例如,您有一個 MREC 全域資料表,其中包含美國東部 (維吉尼亞北部) 和美國西部 (奧勒岡) 的複本。美國東部 (維吉尼亞北部) 複本已將讀取輸送量佈建為 200 RCUs。美國西部 (奧勒岡) 的複本已將佈建讀取輸送量覆寫設定為 100 RCUs。如果您將美國東部 (維吉尼亞北部) 複本上的佈建讀取輸送量設定從 200 個 RCUs 更新為 300 RCUs,則新的佈建讀取輸送量值也會套用至美國西部 (奧勒岡) 的複本。這會將美國西部 (奧勒岡) 複本的佈建讀取輸送量設定,從 100 RCUs 的覆寫值變更為 300 RCUs 的新值。

下列設定絕不會在複本之間同步:

  • 刪除保護

  • Point-in-time復原

  • 標籤

  • 資料表 CloudWatch Contributor Insights 啟用

  • GSI CloudWatch Contributor Insights 啟用

  • Kinesis Data Streams 定義

  • 資源政策

  • 在 MRSC 模式中串流定義

複本之間的所有其他設定不會同步。

DynamoDB Accelerator (DAX)

寫入全域資料表複本會略過 DynamoDB Accelerator (DAX),直接更新 DynamoDB。因此,由於寫入未更新 DAX 快取,DAX 快取可能會過時。只有在快取 TTL 過期時,才會重新整理針對全域資料表複本設定的 DAX 快取。

管理全域資料表的考量事項

您無法刪除用來新增全域資料表複本的資料表,直到新複本建立後已經過 24 小時。

如果您停用包含全域資料表複本 AWS 的區域,這些複本會在區域停用後 20 小時永久轉換為單一區域資料表。