错误缓解方案
更新时间: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 |
以调用获取预置服务列表为例说明。
import os
from qianfan import resources
## 超时时间(秒)
os.environ["QIANFAN_CONSOLE_API_RETRY_TIMEOUT"] = "60"
## 重试次数
os.environ["QIANFAN_CONSOLE_API_RETRY_COUNT"] = "3"
## 退避因子
os.environ["QIANFAN_CONSOLE_API_RETRY_BACKOFF_FACTOR"] = "1"
## 抖动系数
os.environ["QIANFAN_CONSOLE_API_RETRY_JITTER"] = "1"
## 最大重试间隔
os.environ["QIANFAN_CONSOLE_API_RETRY_MAX_WAIT_INTERVAL"] = "120"
# 使用安全认证AK/SK鉴权,通过环境变量方式初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
os.environ["QIANFAN_ACCESS_KEY"] = "your_iam_ak"
os.environ["QIANFAN_SECRET_KEY"] = "your_iam_sk"
resp = resources.Service.V2.describe_preset_services(
service_ids=['svcp-xxx']
)
print(resp.body)
- 方式二:通过参数设置
参数设置仅对该请求生效。
说明 | 参数名称 | 类型 |
---|---|---|
超时时间(秒) | request_timeout | float |
重试次数 | retry_count | int |
退避因子 | backoff_factor | float |
抖动系数 | retry_jitter | float |
最大重试间隔 | max_wait_interval | float |
以调用获取预置服务列表为例说明。
import os
from qianfan import resources
# 使用安全认证AK/SK鉴权,通过环境变量方式初始化;替换下列示例中参数,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
os.environ["QIANFAN_ACCESS_KEY"] = "your_iam_ak"
os.environ["QIANFAN_SECRET_KEY"] = "your_iam_sk"
resp = resources.Service.V2.describe_preset_services(
service_ids=['svcp-xxx'],
# 重试次数
retry_count=3,
# 超时时间(秒)
request_timeout=300,
# 退避因子
backoff_factor=1,
# 抖动系数
retry_jitter=1,
# 最大重试间隔
max_wait_interval=120
)
print(resp.body)