超时和重试机制

超时:如果不设置超时时间,慢请求累积导致连锁反应,造成应用雪崩。超时主要处理的是网络连接和读写超时

重试:重试次数不能太多,否则会把请求数放大数倍,应该和熔断、快速失败机制配合

6.2 代理层超时与重试

  6.2.1 Nginx

  提供了 客户端超时设置、DNS解析超时设置、代理超时设置、Lua相关超时设置

6.3 Web容器超时

  比如Tomcat 8.5

  1. 建立连接和接收请求之间的等待超时时间,默认60秒

  2. 从客户端读取请求数据的超时时间,默认60秒

  3. Servlet3异步请求超时时间,默认30秒

  4. 文件上传超时时间

  5. http长连接超时时间

6.4 中间件客户端超时与重试

6.5 数据库客户端超时

  数据库连接池超时设置

6.6 NoSQL客户端超时

  比如redis获取连接池连接的超时时间和读超时时间

6.7 业务超时

  1. 任务型:订单超时未支付,通过Worker定期扫描数据库更改状态。

  2. 服务调用型:远程调用超时,设置调用的等待时间

6.8 前端Ajax超时

  在请求时带上timeout参数设置超时时间

6.9 总结

  通过配置超时时间,防止因为依赖系统超时而拖垮自己的服务。

  当出现多级依赖关系,如A调用B,B调用C,那么超时时间一般应该是A>B>C,否则可能会一直重试。

  超时之后的处理策略:

    重试:等待并重试,重试其他分组/机房服务

    托底:返回历史数据/缓存数据

    等待页/错误页

  对于写服务,如果对方不支持幂等,则不应该重试。

  对于重试时间的设置,太短会造成大量失败的重复请求,太长会影响用户体验。

    

人生就像蒲公英,看似自由,其实身不由己。
原文地址:https://www.cnblogs.com/walker993/p/14698093.html