防止 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 入口網站
登入 Azure 入口網站。
導覽至您的 Azure Cosmos DB for Apache Cassandra 帳戶。
移至 [設定] 區段底下的 [功能] 窗格。
選取 [伺服器端重試]。
按一下 [啟用],為帳戶中的所有集合啟用這項功能。
使用 Azure CLI
檢查帳戶是否已啟用 SSR:
az cosmosdb show --name accountname --resource-group resourcegroupname
為資料庫帳戶中的所有資料表啟用 SSR。 可能需要 15 分鐘的時間,這項變更才會生效。
az cosmosdb update --name accountname --resource-group resourcegroupname --capabilities EnableCassandra DisableRateLimitingResponses
下列命令會從 [功能] 清單中移除
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 中的輸送量佈建: