本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
DynamoDB 全域資料表的運作方式
以下各節說明 Amazon DynamoDB 全域資料表的概念和行為。
概念
全域資料表是跨 AWS 區域複寫資料表資料的 DynamoDB 功能。
複本資料表 (或複本) 是一種 DynamoDB 資料表,也是全域資料表的一部分。全域資料表包含兩個或多個不同 AWS 區域的複本資料表。單一全域資料表的每個 AWS 區域只能有一個複本。全域資料表中的所有複本共用相同的資料表名稱、主索引鍵結構描述和項目資料。
當應用程式將資料寫入某個區域的複本時,DynamoDB 會自動將該寫入作業複寫到另一個全域資料表的所有其他複本。如需如何開始使用全域資料表的詳細資訊,請參閱 教學課程:建立全域資料表。
版本
DynamoDB 全域資料表有兩種版本可用:2019.11.21 版 (目前版本) 和 2017.11.29 版 (舊版)。您應該盡可能使用 2019.11.21 版 (目前版本)。本文件章節資訊適用於 2019.11.21 版 (目前版本)。如需詳細資訊,請參閱判斷全域資料表版本。
可用性
全域資料表可讓您更輕鬆實作多區域的高可用性架構,進而提升業務持續性。如果單一 AWS 區域中的工作負載受損,您可以將應用程式流量轉移到不同的區域,並對相同全域資料表中的不同複本資料表執行讀取和寫入。
全域資料表中的每個複本資料表,其提供的耐用性和可用性與單一區域 DynamoDB 資料表相同。全域資料表提供 99.999% 的可用性服務水準協議 (SLA)
一致性模式
您可以在建立全域資料表時設定其一致性模式。全域資料表支援兩種一致性模式:多區域最終一致性 (MREC) 和多區域強一致性 (MRSC)。
如果您在建立全域資料表時未指定一致性模式,全域資料表會預設為多區域最終一致性 (MREC)。全域資料表不能包含一致性模式設定不同的複本。您無法在建立全域資料表後變更其一致性模式。
多區域最終一致性 (MREC)
多區域最終一致性 (MREC) 是全域資料表的預設一致性模式。MREC 全域資料表複本中的項目變更通常會在一秒或更短時間內,以非同步方式複寫至所有其他複本。在極少的情況下,若 MREC 全域資料表中的複本受損或遭到隔離,任何尚未複寫到其他區域的資料,都會在複本正常運作時進行複寫。
如果同時在多個區域中修改相同項目,DynamoDB 會依據每個項目的最新內部時間戳記,使用修改來解決衝突,此方法稱為「最後一個寫入獲勝」衝突解決方法。所有複本的項目最終會收斂至上次寫入所建立的版本。
如果項目上次在發生讀取的區域中更新,則高度一致性讀取操作會傳回項目的最新版本,但如果項目上次在不同區域中更新,則可能會傳回過時的資料。條件式寫入會根據區域中項目的版本來評估條件運算式。
您可以將複本新增至現有 DynamoDB 資料表,來建立 MREC 全域資料表。新增複本不會影響現有單一區域 DynamoDB 資料表或全域資料表複本的效能。您可以將複本新增至 MREC 全域資料表,以擴展資料複寫的區域數量,或從 MREC 全域資料表中移除不再需要的複本。只要任何區域可以使用 DynamoDB,MREC 全域資料表皆可擁有這些區域的複本,且複本數量與 AWS 分割區中區域擁有的數量一樣多。
多區域強一致性 (MRSC)
您可以在建立全域資料表時設定多區域強一致性 (MRSC) 模式。在寫入操作傳回成功回應之前,MRSC 全域資料表複本中的項目變更會至少同步複寫到一個其他區域。將現有的單一區域資料表轉換為 MRSC 全域資料表時,您必須確保資料表在轉換完成前均為空白,以確保適當的初始化和複寫設定。
任何 MRSC 複本上的高度一致性讀取操作,一律會傳回項目的最新版本。條件式寫入一律會根據項目的最新版本,來評估條件運算式。
當寫入操作嘗試修改已在其他區域中修改的項目時,該操作會失敗並顯示 ReplicatedWriteConflictException。如果寫入失敗並顯示 ReplicatedWriteConflictException,可以重試;如果該項目不再於其他區域中修改時,即會成功。
您可將 MRSC 全域資料表設定為三個副本,或兩個副本搭配一個見證。見證是 MRSC 全域資料表的元件,其中包含寫入全域資料表複本的資料,並提供完整複本的選用替代方案,同時支援 MRSC 的可用性架構。您無法對見證執行讀取或寫入操作。見證所在的區域與兩個複本不同。
建立 MRSC 全域資料表時,您可以在建立 MRSC 資料表時選擇複本和見證部署的區域。您可以透過 DescribeTable API 輸出,判斷 MRSC 全域資料表是否已設定見證,以及在哪個區域。見證由 DynamoDB 擁有和管理,且見證不會出現在您設定見證的區域中 AWS 的帳戶中。
MRSC 全域資料表必須剛好部署在三個區域中。若要建立 MRSC 全域資料表,您可以將一個複本和一個見證或兩個複本新增至未含資料的現有 DynamoDB 資料表。無法在現有 MRSC 全域資料表中新增額外副本。您無法從 MRSC 全域資料表刪除單一複本或見證。您可以從 MRSC 全域資料表刪除兩個複本,或刪除一個複本和見證,同時將剩餘的複本轉換為單一區域 DynamoDB 資料表。
MRSC 全域資料表有下列考量:
-
將單一區域資料表轉換為 MRSC 全域資料表時,您必須確保資料表為空白。不支援將單一區域資料表轉換為具現有項目的 MRSC 全域資料表。在轉換過程中,務必不要將任何資料寫入資料表。
-
MRSC 全域資料表可在下列區域集內使用:
-
美國區域集:美國東部 (維吉尼亞北部)、美國東部 (俄亥俄)、美國西部 (奧勒岡)
-
歐洲區域集:歐洲 (愛爾蘭)、歐洲 (倫敦)、歐洲 (巴黎)、歐洲 (法蘭克福)
-
AP 區域集:亞太區域 (東京)、亞太區域 (首爾) 和亞太區域 (大阪)。
-
-
MRSC 全域資料表不能跨越區域集 (例如,MRSC 全域資料表不能同時包含來自美國和歐洲區域集的複本)。
-
MRSC 全域資料表不支援存留時間 (TTL)。
-
MRSC 全域資料表不支援區域次要索引 (LSI)。
-
CloudWatch Contributor Insights 資訊僅會針對執行操作的區域回報。
選擇一致性模式
選擇多區域一致性模式時,主要關鍵在於應用程式優先考量較低的延遲寫入和高度一致性讀取,還是全域強一致性。
相較於 MRSC 全域資料表,MREC 全域資料表的寫入和高度一致性讀取延遲較低。MREC 全域資料表可支援復原點目標 (RPO),其相當於複本之間的複寫延遲,通常幾秒鐘 (取決於複本區域而定)。
在下列情況下,您應該使用 MREC 模式:
-
如果資料已在另一個區域中更新,應用程式可以容忍高度一致性讀取操作傳回過時資料。
-
比起多區域讀取一致性,您更重視較低的寫入和高度一致性讀取延遲。
-
您的多區域高可用性策略可以容忍大於 0 的 RPO。
相較於 MREC 全域資料表,MRSC 全域資料表的寫入和高度一致性讀取延遲較高。MRSC 全域資料表支援零的復原點目標 (RPO)。
在下列情況下,您應該使用 MRSC 模式:
-
您需要跨多個區域的高度一致性讀取。
-
比起較低的寫入延遲,您更重視全域讀取一致性。
-
您的多區域高可用性策略需要 RPO 為零。
監控全域資料表
如果全域資料表已設定多區域最終一致性 (MREC),其會將 ReplicationLatency 指標發布至 CloudWatch。假設某個項目寫入複本資料表,此指標可追蹤該項目出現在全域資料表中其他複本時經過的時間。ReplicationLatency 會以毫秒表示,並會針對全域資料表中每對來源及目的地區域對發送。
典型ReplicationLatency值取決於所選 AWS 區域之間的距離,以及其他變數,例如工作負載類型和輸送量。例如,相較於非洲 (開普敦) (af-south-1) 區域,美國西部 (加利佛尼亞北部) (us-west-1) 區域的來源複本到美國西部 (奧勒岡) (us-west-2) 區域的 ReplicationLatency 較低。
ReplicationLatency 值上升可能表示,某個複本的更新未及時傳播到其他複本資料表。在此情況下,您可以暫時將應用程式的讀取和寫入活動重新導向至不同的 AWS 區域。
如果全域資料表已設定多區域強一致性 (MRSC),其不會發布 ReplicationLatency 指標。
故障注入測試
MREC 全域資料表與 AWS Fault Injection Service (AWS FIS) 整合,以在全域資料表工作負載上執行故障注入實驗。此服務可讓您透過暫停所選複本之間的複寫,來測試應用程式對模擬區域隔離的回應。如需詳細資訊,請參閱暫停全域資料表的複寫。
存留時間 (TTL)
針對已設定 MREC 的全域資料表,您可以設定存留時間 (TTL) 刪除。系統會自動同步全域資料表中所有複本的 TTL 設定。當 TTL 從區域中的複本刪除項目時,此刪除作業會複寫至全域資料表中的所有其他複本。TTL 不會消耗寫入容量,因此如果某個區域發生刪除作業,您不需要為該區域的 TTL 刪除付費。不過,若是在全域資料表中具有複本的區域間彼此複寫刪除,則需要支付費用。
針對要複寫刪除的複本,TTL 刪除複寫會耗用該複本的寫入容量。如果寫入輸送量和 TTL 刪除輸送量的組合高於佈建寫入容量,則已設定佈建容量的複本可能會對這些請求限流。
針對已設定多區域強一致性 (MRSC) 的全域資料表,您無法設定存留時間 (TTL) 刪除。
串流
如果全域資料表已設定多區域最終一致性 (MREC),其會從複本資料表的 DynamoDB Stream 讀取變更,並將變更套用至所有其他複本資料表,藉此複寫這些變更。因此,MREC 全域資料表中的所有複本預設會啟用 Streams,您無法在這些複本上將其停用。MREC 複寫程序可能會將短時間內多個變更合併為單一複寫寫入,導致每個複本的 Stream 包含略微不同的記錄。MREC 複本上的 Streams 記錄一律會依項目排序,但複本之間的項目順序可能不同。
如果全域資料表已設定多區域強一致性 (MRSC),其不會使用 DynamoDB Streams 進行複寫,因此 MRSC 複本預設不會啟用 Streams。您可以在 MRSC 複本上啟用 Streams。每個複本的 MRSC 複本 Stream 記錄都是相同的,包括 Stream 記錄排序。
如果您要撰寫應用程式來處理 Streams 記錄,藉此掌握全域資料表中特定區域而非其他區域發生的變更,您可以為每個項目新增一個屬性,以定義該項目發生變更所在的區域。您可以使用此屬性來篩選 Streams 記錄,以找出其他區域發生的變更,包括使用 Lambda 事件篩選條件,以僅調用 Lambda 函式找出特定區域的變更。
交易
若是已設定 MREC 的全域資料表,DynamoDB 交易操作 ( TransactWriteItems 和 TransactGetItems) 僅在調用操作的區域中為不可分割。交易寫入不會以一個單位形式跨區域複寫,亦即,在指定時間點,其他複本中的讀取操作可能只會傳回交易中的部分寫入。
例如,如果您有一個全域資料表,其在美國東部 (俄亥俄) 和美國西部 (奧勒岡) 區域有複本,並且在美國東部 (俄亥俄) 區域執行 TransactWriteItems 操作,在這些變更進行複寫之後,您可能會在美國西部 (奧勒岡) 區域看到部分完成的交易。只有當變更已在來源區域遞交的情況下,這些變更才會複寫至其他區域。
如果全域資料表已設定多區域強一致性 (MRSC),則不支援交易操作,且在 MRSC 複本上調用這些操作時會傳回錯誤。
讀取和寫入輸送量
複寫會耗用寫入容量。如果寫入輸送量和複寫輸送量的組合高於佈建寫入容量,則已設定佈建容量的複本可能會對這些請求限流。全域資料表中所有複本的隨需模式寫入容量都會同步。如果全域資料表已設定佈建容量,其會同步複本之間的自動擴展設定。每個複本的實際佈建寫入容量設定可能有所不同,取決於耗用的寫入輸送量而定。
您可以獨立設定全域資料表中每個複本的讀取容量設定。將複本新增至全域資料表時,若無指定覆寫值,則會以來源資料表或複本的讀取容量作為初始值。
設定同步
DynamoDB 全域資料表中的設定是組態參數,可控制各方面的資料表行為和複寫。您可以透過 DynamoDB 控制平面 API 管理這些設定,並在建立或修改全域資料表時加以設定。全域資料表會自動同步所有複本的特定設定,以維持一致性,同時確保區域特定最佳化的彈性。建議您了解哪些設定會同步及其行為方式,以有效設定全域資料表。依各複本之間的設定同步方式來看,設定分為三個主要類別。
下列設定一律會在全域資料表的各複本之間同步:
-
容量模式 (佈建容量或隨需)
-
資料表的佈建寫入容量
-
資料表的寫入自動擴展
-
全域次要索引 (GSI) 定義
-
GSI 的佈建寫入容量
-
GSI 的寫入自動擴展
-
伺服器端加密 (SSE) 類型
-
MREC 模式中的 Streams 定義
-
存留時間 (TTL)
-
暖輸送量
-
隨需最大寫入輸送量
下列設定會在各複本之間同步,但每個複本都可以覆寫:
-
資料表的佈建讀取容量
-
資料表的讀取自動擴展
-
GSI 的佈建讀取容量
-
GSI 的讀取自動擴展
-
資料表類別
-
隨需最大讀取輸送量
注意
如果任何其他複本上的設定有所修改,則會變更可覆寫的設定值。例如,您有一個 MREC 全域資料表,其中包含美國東部 (維吉尼亞北部) 和美國西部 (奧勒岡)的複本。美國東部 (維吉尼亞北部) 複本已設定 200 RCUs 的佈建讀取輸送量。美國西部 (奧勒岡) 的複本已設定 100 RCUs 的佈建讀取輸送量覆寫。如果您將美國東部 (維吉尼亞北部) 複本上的佈建讀取輸送量設定從 200 RCUs 更新為 300 RCUs,則美國西部 (奧勒岡) 複本也會套用新的佈建讀取輸送量值。如此一來,美國西部 (奧勒岡) 複本的佈建讀取輸送量設定,會從 100 RCUs 的覆寫值變更為 300 RCUs 的新值。
各複本之間絕不會同步下列設定:
-
刪除保護
-
時間點復原
-
Tags (標籤)
-
資料表的 CloudWatch Contributor Insights 啟用
-
GSI 的 CloudWatch Contributor Insights 啟用
-
Kinesis Data Streams 定義
-
資源政策
-
MRSC 模式中的 Streams 定義
各複本之間的所有其他設定均不會同步。
DynamoDB Accelerator (DAX)
全域資料表複本的寫入作業會繞過 DynamoDB Accelerator (DAX),直接更新 DynamoDB。因此,DAX 快取可能會過時,因為寫入不會更新 DAX 快取。只有在快取 TTL 過期時,系統才會重新整理全域資料表複本設定的 DAX 快取。
管理全域資料表的考量
如果新複本建立未超過 24 小時,您就無法刪除用來新增全域資料表複本的資料表。
如果您停用包含全域資料表複本 AWS 的區域,這些複本會在區域停用後 20 小時永久轉換為單一區域資料表。