分享方式:


防止 Azure Cosmos DB for Apache Cassandra 作業發生速率限制錯誤

適用於: Cassandra

所有資料庫作業的成本會由 Azure Cosmos DB 進行正規化,並以要求單位 (RU) 表示。 要求單位是一種效能貨幣,其會將執行 Azure Cosmos DB 所支援之資料庫作業所需的系統資源 (例如 CPU、IOPS 和記憶體) 抽象化。

如果 Azure Cosmos DB for Apache Cassandra 作業超過資料表的輸送量限制 (RU),則可能會失敗,並出現速率限制 (OverloadedException/429) 錯誤。 這可由用戶端處理,如此處所說明。 如果因為速率限制錯誤而無法實作用戶端重試原則來處理失敗,我們可以使用伺服器端重試 (SSR) 功能,讓超過資料表輸送量限制的作業在短暫的延遲後自動重試。 這是帳戶層級設定,適用於帳戶中的所有索引鍵空間和資料表。

使用 Azure 入口網站

  1. 登入 Azure 入口網站

  2. 導覽至您的 Azure Cosmos DB for Apache Cassandra 帳戶。

  3. 移至 [設定] 區段底下的 [功能] 窗格。

  4. 選取 [伺服器端重試]

  5. 按一下 [啟用],為帳戶中的所有集合啟用這項功能。

適用於 Apache Cassandra 的 Azure Cosmos DB 伺服器端重試功能的螢幕快照

使用 Azure CLI

  1. 檢查帳戶是否已啟用 SSR:

    az cosmosdb show --name accountname --resource-group resourcegroupname
    
  2. 為資料庫帳戶中的所有資料表啟用 SSR。 可能需要 15 分鐘的時間,這項變更才會生效。

    az cosmosdb update --name accountname --resource-group resourcegroupname --capabilities EnableCassandra DisableRateLimitingResponses
    
  3. 下列命令會從 [功能] 清單中移除 DisableRateLimitingResponses,為資料庫帳戶中的所有資料表停用伺服器端重試。 可能需要 15 分鐘的時間,這項變更才會生效。

    az cosmosdb update --name accountname --resource-group resourcegroupname --capabilities EnableCassandra
    

常見問題集

如何重試要求?

要求會持續不斷地重試,直到達到 60 秒的逾時為止。 如果達到逾時,用戶端將會收到對應的讀取或寫入逾時錯誤

SSR 在何種情況下最有幫助?

出現持續不到 1 分鐘的突發尖峰時,伺服器端重試 (SSR) 最有效用,可以避免發生節流錯誤。 如果工作負載增加,且會持續維持在指定的 RU 以上,則 SSR 不會有太大的幫助。 建議您適當增加 RU。

建議的用戶端設定為何?

SSR 啟用後,用戶端應用程式應增加讀取逾時,使其超過伺服器重試 60 秒的設定。 為了安全起見,建議採用 90 秒。

程式碼範例 Driver3

SocketOptions socketOptions = new SocketOptions()
	.setReadTimeoutMillis(90000); 

程式碼範例 Driver4

ProgrammaticDriverConfigLoaderBuilder configBuilder = DriverConfigLoader.programmaticBuilder()
	.withDuration(DefaultDriverOption.REQUEST_TIMEOUT, Duration.ofSeconds(90)); 

如何監視伺服器端重試的影響?

您可以在 [Azure Cosmos DB 計量] 窗格中,檢視伺服器端的重試速率限制錯誤 (429)。 當 SSR 啟用時,因為處理和重試作業是在伺服器端進行,因此這些錯誤不會傳至用戶端。

您可以在 Azure Cosmos DB 資源記錄中搜尋包含 estimatedDelayFromRateLimitingInMilliseconds 的記錄項目。

伺服器端重試會對一致性層級造成影響嗎?

伺服器端重試不會影響到一致性層級。 如果要求的速率受限 (錯誤 429),則會由伺服器端重試要求。

伺服器端重試是否會對用戶端可能收到的任何類型錯誤造成影響?

否,伺服器端重試是由伺服器端進行重試,因此只會影響速率限制錯誤 (429)。 這項功能可讓您不需要處理用戶端應用程式中的速率限制錯誤。 所有其他錯誤都會歸屬至用戶端。

下一步

若要深入了解如何針對常見的錯誤進行疑難排解,請參閱這篇文章:

請參閱下列文章,以了解 Azure Cosmos DB 中的輸送量佈建: