掌握重试机制与退避策略,提升云服务稳定性

前言

​ 在不稳定的网络环境中,如遭遇网络波动或丢包等偶发性网络问题时,重试机制是解决这类问题的有效手段。

架构

​ 我们的系统架构通常如下所示:

在这里插入图片描述

​ 请求在从Nginx到API Gateway、再到后端服务(Backend For Frontend, BFF)层,以及最终到达服务层(Service)的过程中,都可能触发重试。

重试次数

​ 在业务实践中,我们通常设定重试三次作为标准操作。

幂等

​ 由于重试可能导致同一请求被多次处理,因此下游服务必须保证幂等性,以避免产生重复或不一致的结果。

重试场景

​ 我们只在面对暂时性错误时采用重试策略,例如网络问题或服务限流等。对于如服务库存不足或用户权限不足等永久性错误,则应迅速失败(fast fail)。

重试传播

​ 重试操作应由最初触发错误的层级执行,避免重试请求向上层传播,从而引发所谓的重试风暴。首次触发重试的层应向上层返回特定的错误码,上层根据这些错误码决定是否继续重试。

退避重试
频繁的重试可能会加剧网络带宽的负担,导致资源争用。指数退避是一种通过延长每次重试间隔时间来减少重试频率的技术。

使用场景

​ 引入退避重试可能会延长服务请求的处理时间,这可能会触发上游服务的超时问题。因此,是否采用退避重试应根据具体业务场景来决定。例如,当触发下游服务的限流时,可以采用退避算法来控制发起端的流量。

Reference
  1. AWS 规范性指导 - 使用退避模式重试
  • 16
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值