使用 DynamoDB Accelerator (DAX) 的記憶體內加速 - Amazon DynamoDB

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

使用 DynamoDB Accelerator (DAX) 的記憶體內加速

Amazon DynamoDB 是專為擴展與效能所設計。在大多數情況下,DynamoDB 回應時間可以測量到個位數毫秒。但是,有些使用案例需要以微秒為單位的回應時間。針對這些使用案例,DynamoDB Accelerator (DAX) 在存取最終一致資料時可提供快速的回應時間。

DAX 是與 DynamoDB 相容的快取服務,可讓您利用快速的記憶體內效能,滿足高需求的應用程式。DAX 可解決三種核心案例:

  1. 作為記憶體內快取,DAX 會以十倍為單位 (從個位數毫秒到微秒) 來縮短最終一致讀取工作負載的回應時間。

  2. DAX 可提供與 DynamoDB API 相容的受管服務,減少操作和應用程式的複雜度。因此,它只需要極少的功能變更,便能搭配現有應用程式使用。

  3. 針對需要大量讀取或爆量的工作負載,DAX 會降低過度佈建讀取容量單位的需求,以此增加輸送量以及節省可能的操作成本。這對需要重複讀取個別索引鍵的應用程式特別有利。

DAX 支援伺服器端加密。使用靜態加密功能時,DAX 在磁碟上保留的資料會受到加密。DAX 將資料寫入磁碟,做為自主要節點到僅供讀取複本的變更環節之一。如需更多詳細資訊,請參閱 DAX 靜態加密

DAX 也支援傳輸中加密功能,確保應用程式與叢集之間的所有請求和回應都經由 Transport Layer Security (TLS) 加密,並透過驗證叢集 x509 憑證對叢集的連線進行身分驗證。如需更多詳細資訊,請參閱 DAX 傳輸中加密

DAX 使用案例

DAX 可讓您以微秒延遲,存取 DynamoDB 資料表的最終一致資料。多可用區域 DAX 叢集每秒可處理數百萬個請求。

DAX 適合下列應用程式類型:

  • 需要盡可能最快讀取回應時間的應用程式。部分範例包括即時競標、社群遊戲與交易應用程式。DAX 為這些使用案例提供快速的記憶體內讀取效能。

  • 比其他應用程式更常讀取少量項目的應用程式。例如,假設有一部電子商務系統,正對某項熱門產品展開一日促銷。在促銷期間,與其他所有產品相比,針對該產品 (及其在 DynamoDB 中的資料) 的需求會驟增。若要減輕「熱」鍵與不一致流量分佈的影響,您可以將讀取活動卸載至 DAX 快取,直到一日促銷結束為止。

  • 需要大量讀取但對成本也很敏感的應用程式。透過 DynamoDB,您可以佈建應用程式所需的每秒讀取數目。如果讀取活動增加,您可以增加資料表的佈建讀取輸送量 (需額外付費)。或者,您可以將活動從應用程式卸載至 DAX 叢集,並減少需要額外購買的讀取容量單位數。

  • 需要對大型資料集重複讀取的應用程式。這類應用程式可能會從其他應用程式重新分配資料庫資源。例如,長時間執行的區域天氣資料分析可能會暫時使用 DynamoDB 資料表中的所有讀取容量。這種情況會對其他需要存取相同資料的應用程式造成負面影響。透過 DAX,可改為對快取資料執行天氣分析。

DAX 適合下列應用程式類型:

  • 需要強烈一致讀取 (或無法容忍最終一致讀取) 的應用程式。

  • 讀取回應時間不需要到微秒,或不需從基礎資料表卸載重複讀取活動的應用程式。

  • 寫入密集型的應用程式。大量寫入會導致叢集中 DAX 節點之間的複寫增加。這會導致資源消耗量增加,並導致可用性問題的風險。

  • 沒有多次重複讀取的應用程式 當快取命中率超過 90% 時,DAX 表現最佳。較低的快取命中率會增加快取遺漏,進而耗用 DAX 叢集的資源越多。

DAX 使用須知

  • 如需提供 DAX 的 AWS 區域清單,請參閱 Amazon DynamoDB 定價。

  • DAX 支援使用這些程式設計語言 AWS所提供的用戶端,以圍棋、Java、Node.js、Python 和 .NET 撰寫的應用程式。

  • DAX 僅適用於 EC2-VPC 平台。

  • DAX 叢集服務角色政策必須允許 dynamodb:DescribeTable 動作,才能維護有關 DynamoDB 資料表的中繼資料。

  • DAX 叢集會維護其存放項目屬性名稱的中繼資料。它會無限期地維護該中繼資料 (即使項目過期或從快取中移出也一樣)。長期下來,使用屬性名稱未限制數量的應用程式可能會在 DAX 叢集中造成記憶體用盡。此限制僅適用於頂層屬性名稱,而非巢狀屬性名稱。有問題的頂層屬性名稱包括時間戳記、UUID 和工作階段 ID。

    此限制僅適用於屬性名稱,而非其值。與以下相似的項目則不是問題。

    { "Id": 123, "Title": "Bicycle 123", "CreationDate": "2017-10-24T01:02:03+00:00" }

    但與以下相似的項目,若數量夠多且每個都具有不同的時間戳記,則可能會造成問題。

    { "Id": 123, "Title": "Bicycle 123", "2017-10-24T01:02:03+00:00": "created" }