专栏首页编程一生设置默认的超时和重试是一个基础设施的基本素养

设置默认的超时和重试是一个基础设施的基本素养

What

本篇应该是稳定性「三十六计」系列的一篇:超时重试。但是「设置默认的超时和重试是一个基础设施的基本素养」这句话我在我们组内三次开会的时候都说了。表达了我的一个理念。

Why

为什么一个基础设施要设置默认的超时和重试?想象下面一个场景。

TCP协议里有一些基本的概念:MSL、TTL、RTT。

MSL(Maximum Segment Lifetime)

报文最大生存时间,它是任何报文在网络上存在的最长时间。超时报文就被丢弃。

TTL(Time To Live)

生存时间,是由源主机设置初始值,经常存的是ip数据包可以经过的最大路由数,每经过一个处理路由数减1,当值为0则报文被丢弃。

RTT(Round-trip time)

客户端到服务器往返所花时间。

嗯?不是很明白?这就对了。想象这些东西都没有默认值,需要我们自己去设置,是不是很头大?

作为基础设施,自己应该是做过数据统计的、做过压测的。自己的性能是什么样的,怎么使用更为合理,基础设施的开发团队最为清楚,不应该将这种设置的责任交给调用方或者客户端来做,加大对基础设施的学习成本。

再来讨论一个问题:为什么要超时和重试?

长尾问题

如上图,随便找了一个调用的耗时。从上面可以看到平均耗时13.9ms,百分之99的耗时在30ms内,最大耗时有488ms。那对于超过100ms的请求来说,是不是在30ms内还不返回就直接丢弃这个请求重新发起一个,新请求有99%的概率在30ms内返回结果,从时间上更划算?

而之所以对同一个请求性能差距很大,原因很多,常见的有服务过载和队列过长。

死锁问题

想象一个分布式锁,没有超时时间。万一释放锁时失败了,其他人永远不能获取这个锁。而如果有超时时间,锁过期后,其他的请求通过重试是可以获取到锁的。

How

怎么设置超时和重试。guava-trying是个不错的java实现。其实不管什么语言都不是难事,难的是超时和重试条件是什么,设置多少合理。

超时和重试条件根据业务不同有差异。

一般的超时条件可设置为TP95(95%的请求)的2倍。或者智能一点,根据大数据统计一下,用个机器学习算法看看怎么设置总体耗时最小。

重试的一个比较好的实践是每次重试的时间间隔成指数级增长,并且根据集群情况设置合理上限。这样就避免本来服务已经过载了,短时间内大量重试造成多米诺骨牌效应(雪崩)。

合理的上限相当重要,因为有些请求不应该再重试了。比如服务器过载时限流策略收到请求不会将请求交给执行层而是直接返回一个响应。而如果客户端判断:“我去,这么快就给我结果啦!太好了,下个请求继续给力哦~~”这种错误的正反馈循坏可能会成为资源耗尽的最后一根稻草。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 稳定性三十六计-超时处理

    在传统的单机系统中,调用一个函数,要么返回成功,要么返回失败。这就是两态系统(2-state system)。

    静儿
  • 关于kubernetes我们还有什么可做的?

    kubernetes在容器编排大战中由于应用的可移植性以及支持混合云/多云部署方式上的灵活性。加上开放可扩展的理念,使得周边社区非常活跃。从既有调研结果看,ku...

    静儿
  • 年纪大了,是否该往管理方向转型?

    很多人心里是想一直做技术的,但是担心随着年纪增加,会造成在技术方面的竞争力不足。加上迫于经验人士的压力,就在纠结要不要转管理岗。不是什么权威意见,仅仅谈谈个人看...

    静儿
  • DTO返回JSON时,不展示某字段;DTO返回JSON时,更改某展示字段的key

    qubianzhong
  • 博客园主题修改中用到的css属性

    样式覆盖 id选择器大于class选择器。 对于原主题中想要覆盖的id选择器,使用!import覆盖。 对于原主题中想要取消的css属性,使用inherit. ...

    Ryan-Miao
  • Javascript:模仿淘宝的信用评价

    老板昨天开会说:要给公司的购物平台增加信用评价功能,用户体验参考淘宝。 于是今天研究了一下,用jQuery模似一个类似的效果:  ? 代码如下: <!D...

    菩提树下的杨过
  • 大数据搜索与挖掘:知著-见微-晓意【大数据100分】

    大数据文摘
  • ​刘强东很高兴!亲自烧菜请网友吃鸡,只因京东做成这件事

    在今年首次当选政协委员后,刘强东带来三个提案,其中一个就是电商扶贫。刘强东要促进农产品规模化生产,提升农产品竞争力;实施“扶贫品牌”培育行动;出台鼓励政策,加快...

    罗超频道
  • BatchBench比较scRNA批次矫正方法

    当你的才华还撑不起你的野心时,请潜下心来,脚踏实地,跟着我们慢慢进步。不知不觉在单细胞转录组领域做知识分析也快两年了,通过文献速递这个栏目很幸运聚集了一些小伙伴...

    生信技能树jimmy
  • 常见面试算法:支持向量机

    1、SVM - Support Vector Machine ,俗称支持向量机,是一种 supervised learning (监督学习)算法,属于 clas...

    机器学习AI算法工程

扫码关注云+社区

领取腾讯云代金券