错误缓解方案
更新时间:2024-09-23
重试机制介绍
为最大限度地减少服务出现问题后带来的影响,平台提供了重试机制,在调用错误时进行重试等,避免出现频率极高的错误,以保障服务稳定性和为开发者提供最佳性能和较优的开发体验。
SDK 提供了多种方式,在遇到错误时自动进行重试,以及在重试间进行退避避免触发流控。
基于指数回避重试机制,重试的等待时间会以某种策略化的计算,以规避请求风暴等问题,更多详细介绍请参考退避回避算法。简单可以总结为:
重试等待时间=min(backoff_factor×(2^重试次数)+random(0, jitter), max_wait_interval)
- retry_count:重试次数。
- backoff_factor:退避因子。
- jitter:抖动系数,对退避时间做一个“抖动”,以具有一定的随机性。
- max_wait_interval:最大重试间隔,以避免无限长的等待时间。
- timeout:本次请求超时时间(秒)。
如何实现重试
目前支持2种方式,分别通过环境变量设置、通过参数进行设置。不同方式实现效果相同,设置方式及参数名不同,具体使用参考示例,开发者可以选择任一方式。
- 方式一:通过环境变量设置
环境变量设置对整个程序生效。
说明 | 设置环境变量项 |
---|---|
超时时间(秒) | QIANFAN_CONSOLE_API_RETRY_TIMEOUT |
重试次数 | QIANFAN_CONSOLE_API_RETRY_COUNT |
退避因子 | QIANFAN_CONSOLE_API_RETRY_BACKOFF_FACTOR |
抖动系数 | QIANFAN_CONSOLE_API_RETRY_JITTER |
最大重试间隔 | QIANFAN_CONSOLE_API_RETRY_MAX_WAIT_INTERVAL |
以调用获取预置服务列表为例说明。
Python
1import os
2from qianfan import resources
3
4## 超时时间(秒)
5os.environ["QIANFAN_CONSOLE_API_RETRY_TIMEOUT"] = "60"
6## 重试次数
7os.environ["QIANFAN_CONSOLE_API_RETRY_COUNT"] = "3"
8## 退避因子
9os.environ["QIANFAN_CONSOLE_API_RETRY_BACKOFF_FACTOR"] = "1"
10## 抖动系数
11os.environ["QIANFAN_CONSOLE_API_RETRY_JITTER"] = "1"
12## 最大重试间隔
13os.environ["QIANFAN_CONSOLE_API_RETRY_MAX_WAIT_INTERVAL"] = "120"
14
15# 使用安全认证AK/SK鉴权,通过环境变量方式初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
16os.environ["QIANFAN_ACCESS_KEY"] = "your_iam_ak"
17os.environ["QIANFAN_SECRET_KEY"] = "your_iam_sk"
18
19resp = resources.Service.V2.describe_preset_services(
20 service_ids=['svcp-xxx']
21)
22
23print(resp.body)
- 方式二:通过参数设置
参数设置仅对该请求生效。
说明 | 参数名称 | 类型 |
---|---|---|
超时时间(秒) | request_timeout | float |
重试次数 | retry_count | int |
退避因子 | backoff_factor | float |
抖动系数 | retry_jitter | float |
最大重试间隔 | max_wait_interval | float |
以调用获取预置服务列表为例说明。
Python
1import os
2from qianfan import resources
3
4# 使用安全认证AK/SK鉴权,通过环境变量方式初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
5os.environ["QIANFAN_ACCESS_KEY"] = "your_iam_ak"
6os.environ["QIANFAN_SECRET_KEY"] = "your_iam_sk"
7
8resp = resources.Service.V2.describe_preset_services(
9 service_ids=['svcp-xxx'],
10 # 重试次数
11 retry_count=3,
12 # 超时时间(秒)
13 request_timeout=300,
14 # 退避因子
15 backoff_factor=1,
16 # 抖动系数
17 retry_jitter=1,
18 # 最大重试间隔
19 max_wait_interval=120
20)
21
22print(resp.body)