最新要闻
- 韩总统府称网传美监听韩政府文件部分系伪造
- 多地现沙尘暴!中央气象台首席预报员:沙尘天气无需根治
- 英特尔锐炫A750最新驱动游戏实测:进步巨大
- 刷新认知!男子站临海近乎垂直石壁上钓鱼:网友直呼请勿模仿
- 环球新动态:世界首个“九尾狐甲鱼”化石被发现:长相奇特怪异
- 每日时讯!鑫顺看市:4.11黄金守住1980关键位,多头或再次卷土重来
- 每日热讯!男子被鱼刺卡喉硬吞饭团:结果扎穿食管
- 天天速看:力压宝马X5 理想L7交付首月狂卖8009台:稳居国内中大型SUV销量第一
- 世界热门:米其林中国回应顾客用餐后上吐下泻:非常重视消费者健康安全
- 焦点!紫光展锐首款车规级5G座舱芯片平台A7870公布:6nm加持、NPU算力媲美骁龙8155
- 全球热推荐:蓝牌要成历史?新款奔腾T90官图:全新车牌引遐想
- 世界新消息丨又萌又飒!池州一高校女生穿公主裙一“跑”走红
- 环球微资讯!充电仅需18秒!中科大研发出新型水系锌离子电池
- 或为问界M9 赛力斯大型SUV专利图曝光:有点“震撼”
- 天天头条:车评人表扬华为问界:看不见的底盘件 大面积用铝合金材料
- 环球信息:林州“网红试胆石”出现裂缝仍有游客打卡 官方回应
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
重试,让程序更健壮
任何通过网络与其它应用通讯地的程序,都应该有足够的灵活性,来应对短暂的临时性故障。因为这些故障很多时候是可以自恢复的。
例如,为了避免服务过载,很多应用会采取某些限流措施,在并发请求达到一定数量时,暂时性的拒绝新的请求加入。这种情况下,尝试使用该应用的程序,一开始可能会被拒绝连接,但下一刻就好了。
因此,在设计系统时,应该考虑到此种故障。并且在条件允许时,加入重试机制,自动再次发起相应的请求。在某些情况下,可能会显著的改善应用程序的用户体验。
(资料图片)
能否发起重试,最重要的前提之一是,对同一资源的发起多次相同的请求,能否得到相同的结果。即资源接口是否具有幂等性。
标准 REST API 中,GET/HEAD/OPTIONS通常是不会更改服务器上的资源的,因此大多是可重试的。
换个说法就是,如果能够确定,下次请求有可能成功,那就可以尝试重试。否则的话,就不必浪费时间、精力以及系统资源了。
例如,在请求 HTTP 服务时,收到 503 或 408 这样的状态码,则重试可能会有效;但是如果收到了 401 或 403 之类的状态码,则简单的重试肯定不起作用。
确定了什么情况下发起重试后,还有另外一个问题值得考虑。即在什么时间、以什么样的频率发起重试。尽管可以,但通常并不会是请求失败后,立即发起重试,而是需要根据具体的场景,选择合适的重试时机。
假如说我们请求失败的原因,是服务端请求过载。则立即发起重试,除了给服务端添乱外,不会有其它结果。严重情况下,可能会加剧服务器的负担,直到耗尽服务器资源。
为了避免上述问题,常见的做法是在重试之前增加一些延迟。但是如何增加这些延迟,又有多种策略,比较多使用的有两种:
- 固定间隔。即每次请求失败后,都等待固定的时间后,再次发起下次重试请求;
- 指数递增。即多次请求之间的延时,成倍增加;
如果失败是由服务端过载引起的,则后一种策略可能会更好。假如它的初始请求在 0ms 发出,则第二次请求在失败 200ms 后发出,第三次请求在失败 400ms 后发出,第四次在 800ms... 以此类推。这种分散的请求和重试机制,可能有助于减缓客户端及服务器的负载,提高我们最终获取到成功结果的机会。
但是假如所有的请求都从同一时刻发起,并按照同样的机制延时重试,则两种策略是一样的,并不会有所改进。这种情况下,可能需要加入一些随机因素。
扯的有点多,接下来搞些实际的,上一点儿代码。简单起见,这里演示一下在 JavaScript 中的实现,使用诸位都了解的 axios。Axios 提供了拦截器机制,用来处理通用的重试逻辑正合适。
const SLEEP_TIME = 200;const RETRY_TIMES = 3;const RETRY_STATUS = [408, 503, 504];function getSleepTime(i = 0) { const wTime = Math.min(SLEEP_TIME * 2 ** i); return Math.random() * wTime;}async function fakeSleep(ms) { await new Promise((resolve) => { setTimeout(() => { resolve(); }, ms); });}async function onError(error) { const { status } = error.response; let { retryCount = 0 } = error.response.config; if (RETRY_STATUS.includes(status) && retryCount < RETRY_TIMES) { retryCount += 1; sleep_ms = getSleepTime(retryCount); await fakeSleep(sleep_ms); error.config.retryCount = retryCount; return await axios(error.config); }}axios.interceptors.response.use(onError);
代码不多,应该不需要额外的解释。其它编程语言,实现思路大致也差不多。相信您肯定可以写出更好的。
欢迎批评指正。
作者:袁首京原创文章,转载时请保留此声明,并给出原文连接。
关键词:
重试,让程序更健壮
aix系统如何查看网卡配置
模型训练与推理中为什么需要使用GPU?基本概念梳理
全球球精选!2023年最新iOS打包发布流程汇总
韩总统府称网传美监听韩政府文件部分系伪造
多地现沙尘暴!中央气象台首席预报员:沙尘天气无需根治
英特尔锐炫A750最新驱动游戏实测:进步巨大
刷新认知!男子站临海近乎垂直石壁上钓鱼:网友直呼请勿模仿
环球新动态:世界首个“九尾狐甲鱼”化石被发现:长相奇特怪异
全球第一批25个GPT模型开始自由生活
当前资讯!应用火山引擎 DataTester“避坑”,抖音实现用 A/B 实验快速试错
路由跳转及传参
每日消息!堆叠面积图的优点和缺点有哪些?
跟ChatGPT聊天、需求润色优化,禅道OpenAI 插件发布!
三星9082怎么恢复出厂设置?三星9082手机参数
索尼w570现在值多少钱?索尼w570参数
台式机怎么设置无线上网?台式机怎么调节屏幕亮度?
巧克力键盘是什么意思?巧克力键盘和机械键盘的区别是什么?
诺基亚n82上市价格是多少?诺基亚n82手机参数
每日时讯!鑫顺看市:4.11黄金守住1980关键位,多头或再次卷土重来
当前资讯![网络]应用层协议:HTTP / HTTPS
用ChatGPT问.NET的相关问题,.NET工程师的前景不错
每日热讯!男子被鱼刺卡喉硬吞饭团:结果扎穿食管
天天速看:力压宝马X5 理想L7交付首月狂卖8009台:稳居国内中大型SUV销量第一
世界热门:米其林中国回应顾客用餐后上吐下泻:非常重视消费者健康安全
焦点!紫光展锐首款车规级5G座舱芯片平台A7870公布:6nm加持、NPU算力媲美骁龙8155
全球热推荐:蓝牌要成历史?新款奔腾T90官图:全新车牌引遐想
世界新消息丨又萌又飒!池州一高校女生穿公主裙一“跑”走红
在寻找 LastPass 的更好替代品吗?
当前简讯:金融系统NTP时钟同步(网络校时服务器)架设工作详情
[网络]TCP的三次握手与四次挥手[转载]
每日焦点!Python程序笔记20230301
云图说|图解云消息服务KooMessage
环球微资讯!充电仅需18秒!中科大研发出新型水系锌离子电池
或为问界M9 赛力斯大型SUV专利图曝光:有点“震撼”
天天头条:车评人表扬华为问界:看不见的底盘件 大面积用铝合金材料
环球信息:林州“网红试胆石”出现裂缝仍有游客打卡 官方回应
天天速讯:299元 小米小爱音箱儿童版开卖:童声专项识别优化
世界银行上调2023年全球经济增长预期至2%
关于算法开源乱七八糟事
【报资讯】RDIF.vNext全新低代码快速开发框架平台发布
环球聚焦:基于pdfbox实现的pdf添加文字水印工具
【全球新要闻】老爸老妈浪漫史第五季(老爸老妈的浪漫史第五季结局是什么?)
爷青回!《灌篮高手》中国首映礼官宣:4月15日见
世界信息:快科技App 5.2.1新版发布:新增沉浸式阅读、排行榜一键分享长图
环球通讯!特斯拉下代电机不用稀土 国内专家:屁股决定脑袋 马斯克是迫不得已
今日聚焦!"全聚德连亏三年"登热搜:今年净亏损2.78亿元
时讯:iPhone 15 Pro相机凸起3.78毫米:约2枚1元硬币厚度
通讯!GGII:2022年中国锂电池回收处理废旧锂电池量41万吨,同比增37%
环球速讯:如何用Golang处理每分钟100万个请求
天天热点评!全网最详细中英文ChatGPT-GPT-4示例文档-步骤指示智能生成从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js
【高端访谈】“与时俱进”|绿债担保品管理驱动绿色金融体系建设升级——专访中央结算公司担保品业务负责人
每日看点!电动牙刷别乱买 买错代价太大了
全球即时:小鹏P7迎整车OTA:6项新增功能 360全景影像正式上线
世界热消息:挑战不可能!阿维塔11在“8D山城”重庆开启城区NCA智驾导航辅助体验
汽车促销潮蔓延 车险会降价吗?业内人士:没有直接影响
环球时讯:成都双流现飞机“横穿马路” 网友:真“飞”机动车道
钦州白癜风专科医院哪个好-白癜风患者如何缓解压力
通过Nginx定义Header头信息
全国18省份都有扬沙浮尘天气!沙尘暴趁夜入京:口罩挡不住行人吃土
今日要闻!乘联会:汽车价格没崩盘 降价潮不存在
天天简讯:别回家充电!电动车爆炸致死楼上邻居 全国又有多起发生:实测起火后可怕
热推荐:中科大研发镧系新型固态电解质 全固态锂金属电池新突破
每日消息!聚焦京津冀协同发展|培育农业品牌 让河北新鲜蔬菜装进北京“菜篮子”
【读财报】两年持有期基金回撤透视:广发、上投摩根基金等产品亏损幅度居前
四大证券报精华摘要:4月11日
机械鼠标看了心动?智商税别再交了!
特斯拉将取消强制单踏板模式 选择权终于交还用户
环球实时:江苏封杀“老头乐” 国内多省或效仿:倒逼大爷买新能源车、考驾照现实吗
每日热门:《GTA6》想超越“三男一狗”很难 三主角影响力太强
每日速看!学系统集成项目管理工程师(中项)系列04a_项目管理一般知识(上)
快看:大家可以来介绍家里杨过的过程,供大家参考吗?
环球热消息:国产战机大片《长空之王》新预告公布:看完热血
天天热推荐:重学c#系列—— 简单编写一个guid [娱乐篇]
环球热议:乘联会:新能源车绿牌2年内或消失 但不是因为它难看
全球热议:男子网购耐克鞋挂李宁吊牌?平台回应:员工绑错了
精选!工匠精神又崩了 日本知名寿司店常年用过期食材:肉眼看不出变色就能用
环球热点!迪士尼《小美人鱼》新剧照出炉:人鱼对比高颜值反派公主 你选谁?
特斯拉在韩推出Model S/X 比国内便宜 约64.85万元起
名记:法国足球可能给梅西颁发超级金球奖 历史仅1人获此荣誉
【世界快播报】台州多地发布事业单位招聘公告
每日快报!小程序开发,uni-app,XBuilder 学习资源
天天新动态:前端工程化实战:React 模块化开发、性能优化和组件化实践
每日时讯!ADMM——交替方向乘子法
全球速递!中小型项目请求限流设计
天天新消息丨电动车价格有得降!“白色石油”碳酸锂价格雪崩:有公司濒临破产
世界快资讯丨局地阵风10级!北京发布大风沙尘暴双黄色预警:空气质量严重污染
全球消息!解释一下布隆过滤器原理
世界通讯!mit 6.824 lab1分析
每日热点:AQS源码学习
环球播报:日本拉面店禁止边吃边看手机!店长给出的理由看醉了:有损厨师尊严
4个月了!AMD RX 7900 XTX旗舰卡终于降价:一度杀到6399元 降幅20%
世界快播:Nimo全球盛典圆满举行 提速布局全球化业务
最新:screenfetch报错 /usr/bin/screenfetch: 行 1851: -: 语法错误:需要操作数(错误记号是 "-") 的一种解决方法
天天精选!直线光栅化-Bresenham算法
当前观点:客车司机开车途中嗦粉吓坏乘客 双手离开方向盘:官方回应
HTC发布Wildfire入门级4G手机:国产展锐处理器、3G内存
焦点速看:中国人自己的智能车身控制系统!比亚迪云辇实现0-1突破:填补国内技术空白
全球时讯:比亚迪云辇发布 王传福:传统豪华看车标、新能源豪华看技术
全球车身控制技术最高水平:比亚迪U9搭云辇X“跳舞”登台