微服务超时治理

设置超时时间的意义,是在极端情况下,采⽤主动的快速失败策略,使得资源消耗与释放资源之间达到平衡,避免调⽤双⽅因资源耗尽⽽宕机。

超时时间的设置,和熔断、限流⼀样,是异常状况下系统的⼀种⾃我保护机制,熔断、限流都已经从业务解耦⾄框架层,如利⽤API ⽹关可以统⼀处理微服务之间调⽤的熔断、限流。

服务调用超时设置多大

几个系统参数:

  1. 40ms:延迟确认和nagle同时打开时,延迟确认超时默认最大40ms,nagle最大200ms
  2. 200ms: rtt比较小的网络环境下,超时重传时间
  3. 1s:新版内核建立连接syn超时时间

用户角度:越快体验越好,决定了上限,比如2s

系统角度:决定了下限

  1. 系统参数,超时在200ms以上比较合适(能够允许一次超时重传或者nagle的超时)
  2. 资源角度,资源一定并且每个请求消耗的平均资源一定的架设下,QPS和超时时间成反比,超时越大能够支持的并发越小,通过具体压测寻找

参考2建议配置300ms到2s之间。

动态设置

自动配置:

  1. 采集调用耗时和超时率
  2. 分析决定得到最佳的超时参数
  3. 通过配置下发方式配置给应用

这里如何决定最佳值是一个优化目标,制定业务目标,搞清楚约束条件,动态实时反馈寻找最优解的过程。简单的决定方法例如P99.9,动态反馈+最优化方法等。

调用链递减: 例如A->B->C的调用链,A的超时是200ms,分配给B和C的和要不超过200ms。具体实现需要依赖底层的服务调用框架。

其他

参考1中提到了TCP的Linger选项:

  1. jedis默认开启这个选项,在服务端发送fin后,会返回服务端RESET,以快速关闭连接。

参考

  1. 处理网络超时问题的最佳实践
  2. 微服务之间调用超时的设置治理
  3. 微服务引擎MSE > 微服务治理 > Dubbo服务治理 > 动态配置超时
2021-04-13 18:14:17 +0800 yajw Update 2021-04-13 微服务超时治理.md M
2021-04-13 18:13:40 +0800 yajw Create 2021-04-13 微服务超时治理.md A