超时:如果不设置超时时间,慢请求累积导致连锁反应,造成应用雪崩。超时主要处理的是网络连接和读写超时
重试:重试次数不能太多,否则会把请求数放大数倍,应该和熔断、快速失败机制配合
6.2.1 Nginx
提供了 客户端超时设置、DNS解析超时设置、代理超时设置、Lua相关超时设置
比如Tomcat 8.5
1. 建立连接和接收请求之间的等待超时时间,默认60秒
2. 从客户端读取请求数据的超时时间,默认60秒
3. Servlet3异步请求超时时间,默认30秒
4. 文件上传超时时间
5. http长连接超时时间
数据库连接池超时设置
比如redis获取连接池连接的超时时间和读超时时间
1. 任务型:订单超时未支付,通过Worker定期扫描数据库更改状态。
2. 服务调用型:远程调用超时,设置调用的等待时间
在请求时带上timeout参数设置超时时间
通过配置超时时间,防止因为依赖系统超时而拖垮自己的服务。
当出现多级依赖关系,如A调用B,B调用C,那么超时时间一般应该是A>B>C,否则可能会一直重试。
超时之后的处理策略:
重试:等待并重试,重试其他分组/机房服务
托底:返回历史数据/缓存数据
等待页/错误页
对于写服务,如果对方不支持幂等,则不应该重试。
对于重试时间的设置,太短会造成大量失败的重复请求,太长会影响用户体验。
原文:https://www.cnblogs.com/walker993/p/14698093.html