DynamoDB 全域資料表設計的最佳實務 - Amazon DynamoDB

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

DynamoDB 全域資料表設計的最佳實務

全域資料表建立於 Amazon DynamoDB 全域佈局的基礎之上,提供您全受管、多區域以及多個作用中的資料庫,為大幅度擴展的全域應用程式提供快速、本機、讀取與寫的效能。透過全域資料表,您的資料會自動在您選擇的 AWS 區域中複製。由於全域資料表使用現有的 DynamoDB API,因此您的應用程式無須變更。使用全域資料表沒有前期成本或承諾,您僅需為使用的資源付費。

DynamoDB 全域資料表設計的方案指引

有效使用全域資料表需要仔細考慮因素,如偏好的寫入模式、路由模型和疏散程序。您必須在每個區域檢測您的應用程式,並準備好調整路由或執行疏散以維護全域狀況。獲得的好處是擁有全球分佈式的資料集,具有低延遲讀取和寫入,以及 99.999% 的服務等級協議。

有關 DynamoDB 全域資料表設計的關鍵事實

  • 全域資料表有兩個版本:目前版本的全域表 2019.11.21 (目前版本) (有時稱為「V2」),以及 全域表格版本 (舊版) (有時稱為「V1」)。本指南僅著重於目前版本 V2。

  • 如果不使用全域資料表,則 DynamoDB 就是一種區域服務。具有高可用性,並且在本質上對區域基礎架構故障具有彈性,包括整個可用區域 (AZ) 的故障。單一區域 DynamoDB 資料表具有 99.99% 的可用性https://aws.amazon.com/dynamodb/sla/服務水準協議 (SLA)。

  • 使用全域資料表,DynamoDB 讓資料表可以在兩個或多個區域之間複寫其資料。多區域 DynamoDB 資料表具有 99.999% 的可用性 SLA。通過適當的計畫,全域資料表有助於建立一個具有彈性並抵抗區域故障的架構。

  • 全域資料表採用主動-主動式複寫模型。從 DynamoDB 的角度來看,每個區域中的資料表具有相同地位,可以接受讀取和寫入請求。收到寫入請求後,本機複本資料表會在背景作業將複本寫入其他參與的區域。

  • 單獨複製項目。單一交易中更新的項目可能無法一起複製。

  • 來源區域中的每個資料表分割區都會與其他分割區同步寫入複本。遠端區域內的寫入順序可能與來源區域內發生的寫入順序不相符。如需有關資料表分割區的詳細資訊,請參閱部落格文章擴展 DynamoDB:分割區、快捷鍵和熱分割會如何影響效能

  • 新寫入的項目通常會在一秒內傳播到所有複本列表。靠近區域的傳播速度往往更快。

  • Amazon CloudWatch 為每個區域對提供一個ReplicationLatency指標。指標會根據查看項目到達時間,並將其到達時間與初始寫入時間進行比較並計算平均值。計時會儲存 CloudWatch 在來源區域內。檢視平均和最大計時有助於判斷平均和最差情況的複寫延遲。此延遲沒有 SLA。

  • 如果相同項目在兩個不同的區域幾乎同時 (在此 ReplicationLatency 視窗內) 更新,並且第二次寫入發生在第一次寫入複製之前,則可能會發生寫入衝突。全域資料表會根據寫入的時間戳記,解決最後一個寫入獲勝機制之間的衝突。第一次寫入會「輸」給第二次寫入。這些衝突不會記錄在 CloudWatch 或中 AWS CloudTrail。

  • 每個項目都有一個作為私有系統屬性保留的最後寫入時間戳記。最後一個寫入獲勝方法是通過使用條件寫入來實現,要求傳入項目的時間戳記大於現有項目的時間戳記。

  • 全域資料表會將所有項目複寫到所有參與的區域。如果您想要有不同的複寫範圍,您可以建立不同的資料表,並為每個資料表提供不同的參與區域。

  • 即使複本區域離線或 ReplicationLatency 增長,本機區域也會接受寫入。本機資料表會繼續嘗試將項目複製到遠端資料表,直到每個項目成功為止。

  • 雖然不太可能,但是萬一區域完全離線,當稍後重新上線時,所有擱置的輸出和輸入複寫都會重新嘗試。不需要特殊動作即可使資料表恢復同步。最後一個寫入獲勝機制可確保資料最終一致。

  • 您可以隨時將新區域新增至 DynamoDB 資料表。DynamoDB 將處理初始同步和進行中的複寫。如果區域遭到移除,即使是原始區域,也只會刪除該區域的資料表。

  • DynamoDB 沒有全域端點。所有請求都會傳送至區域端點,然後存取該區域本機的全域資料表執行個體。

  • 不應對 DynamoDB 跨區域呼叫。最佳實務是讓一個區域中的運算層直接存取該區域的本機 DynamoDB 端點。如果在區域內偵測到問題,無論這些問題是位於 DynamoDB 層或周圍堆疊中,則應將最終使用者流量路由至託管在不同區域的不同計算層。由於全域資料表複本,不同區域將具有相同資料的本地複本供其本機使用。某些情況下,某個區域中的運算層可能會將請求傳遞至另一個區域的運算層進行處理,但這不應該直接存取遠端 DynamoDB 端點。如需此特定使用案例的詳細資訊,請參閱 運算層請求路由

使用案例

全域表提供以下常見優點:

  • 較低的讀取延遲。您可以將資料複本置於靠近終端使用者的位置,以減少讀取期間的網路延遲。快取保持與 ReplicationLatency 值一樣新。

  • 較低的寫入延遲。您可以寫入附近的區域,以減少網路延遲和寫入所花費的時間。必須小心路由寫入流量,以確保沒有衝突。路由技術在 使用全域資料表的請求路由 中有更詳細的討論。

  • 提高彈性和災難復原。使用復原點目標 (RPO) 和復原時間點目標 (RTO),當區域效能降低或完全中斷時,您可以疏散該區域 (移除部分或全部傳送至該區域的請求)。使用全域資料表也會將 DynamoDB SLA 從 99.99% 提高到 99.999%。

  • 無縫區域遷移。您可以新增一個新區域,然後刪除舊區域,將部署從一個區域遷移到另一個區域,所有動作都不會導致資料層停機。例如,您可以針對訂單管理系統使用 DynamoDB 全域資料表,實現可靠的大規模低延遲處理,同時還能保持 AZ 和區域故障的彈性。