美文网首页
亚马逊云的错误重试策略

亚马逊云的错误重试策略

作者: 陀氏 | 来源:发表于2022-01-02 10:58 被阅读0次

什么是错误重试策略

在网络请求中会遇到各式各样的错误,比如DNS服务、负载均衡等都有可能导致一次请求的失败,这些都是不可控的,因此常见的解决方案就是在客户端上做重试,来增加应用的可靠性,将少开发者的开销。
每个亚马逊云服务的SDK都做了原子的重试策略,并且自动配了重试策略,感兴趣可以看AWS配置类ClientConfiguration。(在配置中只要把ClientConfiguration.maxErrorRetry设为0即可关掉重试策略)
如果你没有使用官方SDK,可以自己在客户端包装一些对5xx或Throtting类的错误做重试,但对4xx类的客户端错误则不应重试。(要先改掉出错的请求)

指数回退算法

AWS SDK用了指数回退算法(Exponential backoff algorithm)来控制重试,这个算法的思路是在每次重试之间的等待时间越来越长,来应对持续不断的错误。 要实现一个重试,需要一个可以配置的最大重试请求间隔和最大重试次数,这些值要基于请求的性能,也要考虑到网络延迟等。

大部分指数回退算法使用jitter(随机的延迟)来避免连续的冲突。如果你不是要避免这类冲突,你也不需要使用这个随机。然而,如果你有并发的client请求,jitter可以帮助你的请求更容易成功。需要更多信息请参见这个博客Exponential Backoff and Jitter

以下是一个伪代码来说明AWS的重试做法:

Do some asynchronous operation.
retries = 0
DO
    wait for (2^retries * 100) milliseconds
    status = Get the result of the asynchronous operation.
    IF status = SUCCESS
        retry = false
    ELSE IF status = NOT_READY
        retry = true
    ELSE IF status = THROTTLED
        retry = true
    ELSE
        Some other error occurred, so stop calling the API.
        retry = false
    END IF
    retries = retries + 1
WHILE (retry AND (retries < MAX_RETRIES))

相关文章

网友评论

      本文标题:亚马逊云的错误重试策略

      本文链接:https://www.haomeiwen.com/subject/oyegqrtx.html