
- DynamoDB 教程
- DynamoDB - 首頁
- DynamoDB - 概覽
- DynamoDB - 基本概念
- DynamoDB - 環境
- DynamoDB - 操作工具
- DynamoDB - 資料型別
- DynamoDB - 建立表
- DynamoDB - 載入表
- DynamoDB - 查詢表
- DynamoDB - 刪除表
- DynamoDB - API 介面
- DynamoDB - 建立項
- DynamoDB - 獲取項
- DynamoDB - 更新項
- DynamoDB - 刪除項
- DynamoDB - 批次寫入
- DynamoDB - 批次檢索
- DynamoDB - 查詢
- DynamoDB - 掃描
- DynamoDB - 索引
- 全域性二級索引
- 本地二級索引
- DynamoDB - 聚合
- DynamoDB - 訪問控制
- DynamoDB - 許可權 API
- DynamoDB - 條件
- Web 身份聯合
- DynamoDB - 資料管道
- DynamoDB - 資料備份
- DynamoDB - 監控
- DynamoDB - CloudTrail
- DynamoDB - MapReduce
- DynamoDB - 表活動
- DynamoDB - 錯誤處理
- DynamoDB - 最佳實踐
- DynamoDB 有用資源
- DynamoDB - 快速指南
- DynamoDB - 有用資源
- DynamoDB - 討論
DynamoDB - 錯誤處理
在請求處理失敗時,DynamoDB 會丟擲一個錯誤。每個錯誤都包含以下元件:HTTP 狀態程式碼、異常名稱和訊息。錯誤管理依賴於您的 SDK,SDK 傳播錯誤,或者依賴於您自己的程式碼。
程式碼和訊息
異常屬於不同的 HTTP 頭狀態程式碼。4xx 和 5xx 包含與請求問題和 AWS 相關的錯誤。
HTTP 4xx 類別中的一些異常如下所示:
AccessDeniedException - 客戶端未能正確簽名請求。
ConditionalCheckFailedException - 條件評估為假。
IncompleteSignatureException - 請求包含不完整的簽名。
HTTP 5xx 類別中的異常如下所示:
- 內部伺服器錯誤
- 服務不可用
重試和回退演算法
錯誤來自各種來源,例如伺服器、交換機、負載均衡器以及其他結構和系統元件。常見的解決方案包括簡單的重試,這有助於提高可靠性。所有 SDK 都自動包含此邏輯,您可以設定重試引數以滿足您的應用程式需求。
例如 - Java 提供了一個 maxErrorRetry 值來停止重試。
Amazon 建議除了重試之外,還使用回退解決方案來控制流。這包括逐步增加重試之間的等待時間,並在相當短的時間後最終停止。請注意,SDK 執行自動重試,但不執行指數回退。
以下程式是重試回退的示例:
public enum Results { SUCCESS, NOT_READY, THROTTLED, SERVER_ERROR } public static void DoAndWaitExample() { try { // asynchronous operation. long token = asyncOperation(); int retries = 0; boolean retry = false; do { long waitTime = Math.min(getWaitTime(retries), MAX_WAIT_INTERVAL); System.out.print(waitTime + "\n"); // Pause for result Thread.sleep(waitTime); // Get result Results result = getAsyncOperationResult(token); if (Results.SUCCESS == result) { retry = false; } else if (Results.NOT_READY == result) { retry = true; } else if (Results.THROTTLED == result) { retry = true; } else if (Results.SERVER_ERROR == result) { retry = true; } else { // stop on other error retry = false; } } while (retry && (retries++ < MAX_RETRIES)); } catch (Exception ex) { } } public static long getWaitTime(int retryCount) { long waitTime = ((long) Math.pow(3, retryCount) * 100L); return waitTime; }
廣告