DAX 的運作方式 - Amazon DynamoDB

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

DAX 的運作方式

Amazon DynamoDB Accelerator (DAX) 旨在於 Amazon Virtual Private Cloud (Amazon VPC) 環境內執行。Amazon VPC 服務會定義虛擬網路,與傳統資料中心幾乎一模一樣。使用 VPC,您可以控制其 IP 地址範圍、子網路、路由表、網路閘道及安全設定。您可以在虛擬網路中啟動 DAX 叢集,然後使用 Amazon VPC 安全群組來控制對該叢集的存取。

注意

如果您是在 2013 年 12 月 4 日之後建立 AWS 帳戶,則您在每個 AWS 區域中都會有預設的 VPC。VPC 已立即可供您使用,無須進行任何其他設定步驟。

如需詳細資訊,請參閱《Amazon VPC 使用者指南》中的預設 VPC 和預設子網路

下圖顯示 DAX 的高層級概觀。

工作流程圖,顯示應用程式、DAX 用戶端和 VPC 中 DAX 叢集之間的互動。

若要建立 DAX 叢集,您可以使用 AWS Management Console。除非另有指定,否則您的 DAX 叢集會在您的預設 VPC 中執行。若要執行應用程式,請在 Amazon VPC 內啟動 Amazon EC2 執行個體。接著在 EC2 執行個體上部署應用程式 (使用 DAX 用戶端)。

DAX 用戶端會在執行時間,將應用程式的所有 DynamoDB API 請求導向該 DAX 叢集。若 DAX 可直接處理其中一個 API 請求,它便會執行該作業。否則,它會將請求傳遞給 DynamoDB。

DAX 叢集最後會將結果傳回您的應用程式。

DAX 如何處理請求

DAX 叢集會包含一或多個節點。而每個節點都會執行自己的 DAX 快取軟體執行個體。其中一個節點會作為叢集的主要節點。其他節點 (如其存在) 則為讀取複本。如需詳細資訊,請參閱 節點

您的應用程式可以透過指定 DAX 叢集的端點,存取 DAX。DAX 用戶端軟體可使用叢集端點,執行智慧型負載平衡和路由。

讀取操作

DAX 可以回應下列 API 呼叫:

  • GetItem

  • BatchGetItem

  • Query

  • Scan

若請求指定最終一致讀取 (預設行為),它會嘗試從 DAX 讀取該項目:

  • DAX 如有該項目 (快取命中),DAX 不需存取 DynamoDB 就能將該項目傳回應用程式。

  • DAX 若沒有該項目 (快取未中),DAX 會將請求傳遞給 DynamoDB。當它從 DynamoDB 收到回應後,DAX 便會將結果傳回應用程式。但它也會將結果寫入主要節點上的快取。

注意

叢集中如有任何僅供讀取複本,DAX 會自動將該複本與主節點保持同步。如需詳細資訊,請參閱 叢集

若請求指定強烈一致讀取,DAX 會將請求傳遞給 DynamoDB。DynamoDB 的結果將不會在 DAX 中進行快取。他們只會傳回應用程式。

寫入操作

下列 DAX API 操作會視為「全部寫入」:

  • BatchWriteItem

  • UpdateItem

  • DeleteItem

  • PutItem

這些操作會先將資料寫入 DynamoDB 資料表,然後再寫入 DAX 叢集。資料必須同時成功寫入資料表與 DAX,操作才算成功。

其他操作

DAX 無法識別任何管理資料表的 DynamoDB 操作 (例如 CreateTableUpdateTable)。您的應用程式如需執行這些操作,它必須直接存取 DynamoDB 而非使用 DAX。

如需有關 DAX 和 DynamoDB 一致性的詳細資訊,請參閱 DAX 與 DynamoDB 一致性模式

如需有關 DAX 中交易的運作方式資訊,請參閱 使用 DynamoDB Accelerator (DAX) 中的交易 API

請求率限制

如果傳送至 DAX 的請求數超過節點的容量,DAX 會傳回 ThrottlingException,將速率限制為其接受其他請求的程度。DAX 會持續評估您的 CPU 使用率,以判斷其可以處理的請求量,同時維持良好的叢集狀態。

您可以監控 DAX 發佈至 Amazon CloudWatch 的 ThrottledRequestCount 指標。如果您每隔一段時間就會看到這些例外狀況,請考慮擴展您的叢集

項目快取

DAX 會維護項目快取,存放來自 GetItemBatchGetItem 操作的結果。快取中的項目代表來自 DynamoDB 的最終一致資料,並依其主索引鍵值存放。

應用程式傳送 GetItemBatchGetItem 請求時,DAX 會嘗試使用指定的索引鍵值,直接從項目快取讀取項目。若找到項目 (快取命中),DAX 會立即將其傳回應用程式。如果找不到項目 (快取未中),DAX 會將請求傳送至 DynamoDB。DynamoDB 使用最終一致讀取來處理請求,並將項目傳回 DAX。DAX 會將它們存放在項目快取中,然後傳回至應用程式。

項目快取有存留時間 (TTL) 設定,預設為 5 分鐘。DAX 會指派時間戳記給其寫入項目快取的每個快取。若項目存留在快取中的時間長於 TTL 設定,項目便會過期。若是對過期的項目發出 GetItem 請求,會將其視為快取未中。DAX 會因此而傳送 GetItem 請求給 DynamoDB。

注意

您可以在建立新的 DAX 叢集時,為項目快取指定 TTL 設定。如需詳細資訊,請參閱 管理 DAX 叢集

DAX 也會為項目快取維護一份最近最少使用 (LRU) 的清單。LRU 清單會追蹤項目第一次寫入快取的時間,以及上一次從快取中讀取項目的時間。當項目快取變滿時,DAX 會移出較舊的項目 (無論項目過期與否),以清出空間存放新的項目。LRU 演算法一律會為項目快取啟用,使用者無法加以設定。

如果您將項目快取 TTL 設定指定為零,項目快取中的項目僅會因 LRU 移出或全部寫入操作而重新整理。

如需 DAX 中項目快取的一致性詳細資訊,請參閱 DAX 項目快取行為

查詢快取

DAX 也會維護查詢快取,存放來自 QueryScan 操作的結果。此快取中的項目代表來自對 DynamoDB 資料表之查詢與掃描的結果集。這些結果集會依其參數值存放。

當應用程式傳送 QueryScan 請求時,DAX 會嘗試使用指定的參數值,從查詢快取讀取相符的結果集。若有找到結果集 (快取命中),DAX 會立即將其傳回應用程式。如果找不到結果集 (快取未中),DAX 會將請求傳送至 DynamoDB。DynamoDB 使用最終一致讀取來處理請求,並將結果集傳回 DAX。DAX 會將它存放在查詢快取中,然後傳回至應用程式。

注意

您可以在建立新的 DAX 叢集時,為查詢快取指定 TTL 設定。如需詳細資訊,請參閱 管理 DAX 叢集

DAX 也會為查詢快取維護一份 LRU 清單。清單會追蹤結果集第一次寫入快取的時間,以及上一次從快取讀取結果的時間。當查詢快取變滿時,DAX 會移出較舊的結果集 (無論結果集過期與否),以清出空間存放新的結果集。LRU 演算法一律會為查詢快取啟用,使用者無法加以設定。

如果您將查詢快取 TTL 設定指定為零,查詢回應將不會快取。

如需 DAX 中查詢快取的一致性詳細資訊,請參閱 DAX 查詢快取行為