本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
DAX:運作方式
Amazon DynamoDB Accelerator (DAX) 的設計可在 Amazon Virtual Private Cloud (AmazonVPC) 環境中執行。Amazon VPC服務會定義類似傳統資料中心的虛擬網路。透過 VPC,您可以控制其 IP 地址範圍、子網路、路由表、網路閘道和安全設定。您可以在虛擬網路中啟動DAX叢集,並使用 Amazon VPC安全群組控制對叢集的存取。
注意
如果您在 2013 年 12 月 4 日之後建立 AWS 帳戶,則VPC每個 AWS 區域都已有一個預設值。VPC 已準備好供您立即使用,而無需執行任何其他組態步驟。
如需詳細資訊,請參閱 Amazon VPC使用者指南 中的預設VPC和預設子網路。
下圖顯示 的高階概觀DAX。
若要建立DAX叢集,您可以使用 AWS Management Console。除非您另有指定,否則DAX叢集會在預設 內執行VPC。若要執行應用程式,您可以在 Amazon 中啟動 Amazon EC2執行個體VPC。然後,在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。他們只會傳回應用程式。
寫入操作
下列DAXAPI操作會被視為「寫入」:
-
BatchWriteItem
-
UpdateItem
-
DeleteItem
-
PutItem
透過這些操作,資料會先寫入 DynamoDB 資料表,然後寫入DAX叢集。只有在資料成功寫入資料表和 時,操作才會成功DAX。
其他操作
DAX 無法識別任何用於管理資料表的 DynamoDB 操作 (例如 CreateTable
、 UpdateTable
等)。如果您的應用程式需要執行這些操作,則必須直接存取 DynamoDB,而不是使用 DAX。
如需 DAX和 DynamoDB 一致性的詳細資訊,請參閱 DAX 和 DynamoDB 一致性模型。
如需交易在 中運作方式的相關資訊DAX,請參閱 在 DynamoDB Accelerator (DAX) APIs中使用交易。
請求率限制
如果傳送至 的請求數量DAX超過節點的容量, 會透過傳回 來DAX限制接受其他請求的速率ThrottlingException。DAX 會持續評估您的CPU使用率,以判斷其可處理的請求量,同時維持良好的叢集狀態。
您可以監控發佈至 Amazon DAX 的ThrottledRequestCount 指標 CloudWatch。如果您每隔一段時間就會看到這些例外狀況,請考慮擴展您的叢集。
項目快取
DAX 會維護項目快取,以存放來自 GetItem
和 BatchGetItem
操作的結果。快取中的項目代表來自 DynamoDB 的最終一致資料,並依其主索引鍵值存放。
當應用程式傳送 GetItem
或 BatchGetItem
請求時, DAX 會嘗試使用指定的金鑰值直接從項目快取讀取項目。如果找到項目 (快取命中), 會立即將其DAX傳回應用程式。如果找不到項目 (快取遺失), 會將請求DAX傳送至 DynamoDB 。DynamoDB 會使用最終一致的讀取來處理請求,並將項目傳回 DAX。DAX 會將它們存放在項目快取中,然後將它們傳回給應用程式。
項目快取具有存留時間 (TTL) 設定,預設為 5 分鐘。DAX 會為其寫入項目快取的每個項目指派時間戳記。如果項目保留在快取中的時間超過TTL設定,則會過期。如果您對過期項目發出GetItem
請求,這將被視為快取遺失,並將GetItem
請求DAX傳送至 DynamoDB 。
注意
您可以在建立新DAX叢集時指定項目快取TTL的設定。如需詳細資訊,請參閱管理DAX叢集 。
DAX 也會為項目快取保留至少一個最近使用的 (LRU) 清單。LRU 清單會追蹤項目第一次寫入快取的時間,以及項目上次從快取讀取的時間。如果項目快取已滿, DAX 會逸出舊項目 (即使尚未過期) 來為新項目騰出空間。LRU 演算法一律會針對項目快取啟用,且無法由使用者設定。
如果您將零指定為項目快取TTL設定,則項目快取中的項目只會因為LRU被驅逐或「寫入」操作而重新整理。
如需 中項目快取一致性的詳細資訊DAX,請參閱 DAX 項目快取行為。
查詢快取
DAX 也會維護查詢快取,以存放來自 Query
和 Scan
操作的結果。此快取中的項目代表來自對 DynamoDB 資料表之查詢與掃描的結果集。這些結果集會依其參數值存放。
當應用程式傳送 Query
或 Scan
請求時, DAX 會嘗試使用指定的參數值,從查詢快取讀取相符的結果集。如果找到結果集 (快取命中), 會立即DAX將其傳回應用程式。如果找不到結果集 (快取遺失), 會將請求DAX傳送至 DynamoDB 。DynamoDB 會使用最終一致讀取來處理請求,並將結果集傳回 DAX。DAX 會將其存放在查詢快取中,然後傳回給應用程式。
注意
您可以在建立新DAX叢集時指定查詢快取TTL的設定。如需詳細資訊,請參閱管理DAX叢集 。
DAX 也會維護查詢快取的LRU清單。清單會追蹤結果集第一次寫入快取的時間,以及上一次從快取讀取結果的時間。如果查詢快取已滿, DAX 會逸出較舊的結果集 (即使尚未過期),以騰出空間來取得新的結果集。查詢快取一律會啟用LRU演算法,而且無法由使用者設定。
如果您將零指定為查詢快取TTL設定,則不會快取查詢回應。
如需 中查詢快取一致性的詳細資訊DAX,請參閱 DAX 查詢快取行為。