如何對 DynamoDB Accelerator (DAX) 叢集上的高延遲進行疑難排解?

1 分的閱讀內容
0

我在 Amazon DynamoDB Accelerator (DAX) 中的讀取或寫入請求具有較高的延遲。如何對此問題進行疑難排解?

解決方案

您的請求出現延遲的原因有多種。請參閱以下每個潛在問題,以針對延遲進行疑難排解。

叢集或節點負載較高

延遲通常是由 DAX 叢集負載較高的叢集或節點所致。如果您將用戶端設定為單一節點 URL 而非叢集 URL,則此延遲可能會受到進一步影響。在此情況下,如果節點在高負載期間遇到任何問題,則用戶端請求會遭受延遲或限流。

若要解決單一叢集或節點上的高負載導致的延遲和限流,請使用水平擴展垂直擴展

DAX 用戶端中的設定錯誤

如果您降低 withMinIdleConnectionSize 參數,則 DAX 叢集的延遲可能會增加。此參數設定與 DAX 叢集的閒置連線數目下限。針對每個請求,用戶端將使用可用的閒置連接。如果無法使用連線,則用戶端會建立新的連線。例如,如果參數設定為 20,則 DAX 叢集至少有 20 個閒置連線。

用戶端會維護連線集區。當應用程式對 DynamoDB 或 DAX 進行 API 呼叫時,用戶端會從連線集區租用連線。然後,用戶端會進行 API 呼叫,並將連線傳回至集區。但是,連線集區具有上限。如果您一次對 DAX 進行大量 API 呼叫,則可能會超過連線集區的限制。在此情況下,某些請求必須等待其他請求完成,才能從連線集區取得租用。這會導致請求在連線集區層級排入佇列。因此,應用程式會經歷往返延遲的增加。

因此,若要減少應用程式中的週期性流量尖峰,請調整 setMinIdleConnectionSizegetMinIdleConnectionSizewithMinIdleConnectionSize 參數。這些參數在 DAX 叢集的延遲中發揮著重要作用。針對您的 API 呼叫進行設定,以便 DAX 使用適當數量的閒置連線,而不需要重新建立新連線。

快取中遺漏的項目

如果讀取請求遺漏某個項目,則 DAX 會將請求傳送至 DynamoDB。DynamoDB 會使用最終一致讀取來處理請求,然後將項目傳回至 DAX。DAX 會將其儲存在項目快取中,然後傳回至應用程式。基礎 DynamoDB 資料表中的延遲可能會導致請求延遲。

以下兩個原因通常會導致快取遺漏的發生:

1.    **高度一致性讀取:**DAX 不會快取相同項目的高度一致性讀取。這會導致快取遺漏,因為項目會略過 DAX,並從 DynamoDB 資料表本身擷取。您可以使用最終一致讀取來解決此問題,但請注意,DynamoDB 必須先讀取資料才能快取資料。

2.    **DAX 中的移出政策:**已從快取中移出的查詢資料會導致遺漏。DAX 使用三種不同的值來判斷快取移出情況:

  • DAX 叢集使用最近最少使用 (LRU) 演算法,來確定項目的優先順序。當快取已滿時,優先順序最低的項目會被移出。
  • DAX 會在項目在快取中可用的期間內使用存留時間 (TTL) 值。超過項目的 TTL 值之後,則會移出該項目。
    **注意:**如果您使用的預設 TTL 值為五分鐘,則請檢查是否在 TTL 時間之後查詢資料。
  • DAX 會在寫入新值時使用寫入功能,以移出舊值。這有助於使用單一 API 呼叫使 DAX 項目快取與基礎資料存放區保持一致。

若要擴充項目的 TTL 值,請參閱進行 TTL 設定
**注意:**在執行中 DAX 執行個體使用時,無法修改參數群組。

將維護修補套用至 DAX 叢集時,也可能會發生快取遺漏。使用多個節點叢集來減少此停機時間。

維護時段

每週維護時段可能會發生延遲,尤其是叢集節點發生軟體升級、修補或系統變更時。在大多數情況下,請求會由其他未進行維護的可用節點成功處理。在大量維護期間,具有大量請求的叢集可能會經歷失敗。

若要減少延遲或失敗的機率,請將維護時段設定為離峰時段。這樣做可讓叢集在較輕的請求負載期間進行升級。

DynamoDB 資料表中的延遲

使用寫入作業時,資料會先寫入 DynamoDB 資料表,然後再寫入 DAX 叢集。只有在資料成功寫入資料表和 DAX 時,作業才會成功。基礎 DynamoDB 資料表中的延遲可能會導致請求延遲。若要減少此延遲,請參閱如何對 Amazon DynamoDB 資料表的高延遲進行疑難排解?

若要進一步設定 DynamoDB,以符合應用程式的延遲需求,請參閱針對延遲感知的 Amazon DynamoDB 應用程式,調整 AWS Java SDK HTTP 請求設定

請求逾時期間

setIdleConnectionTimeout 參數確定閒置連線的逾時期間,而 setConnectTimeout 則確定 DAX 叢集連線的逾時期間。這兩個參數會處理連線集區的逾時,該逾時可能會影響叢集的延遲。

透過調整 setRequestTimeout 參數,設定 DAX 叢集連線的請求逾時。如需詳細資訊,請參閱 DAX 文件中的 setRequestTimeout

使用指數退避重試也是最佳做法,這樣可減少請求錯誤和營運成本。

**注意:**DAX 不支援 CloudWatch 指標中的叢集延遲。


AWS 官方
AWS 官方已更新 1 年前