如何降低服务失败率,提高服务稳定性 -- 双发策略[重试机制]
Posted 魏小言
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何降低服务失败率,提高服务稳定性 -- 双发策略[重试机制]相关的知识,希望对你有一定的参考价值。
如何降低服务失败率,提高服务稳定性 – 双发策略[重试机制]
谈论评估一个服务的性能时,核心指标有 QPS、耗时、失败率…等等,其中 “失败率” 体现了服务的稳定性能,更意味着全年可服务时长…
如何能够降低服务失败率,提高服务稳定性呢?
谈论失败率的前提
在现分布式的架构中,产品功能往往分解为多个边界清晰的服务模块,各模块独立部署,共同提供功能支撑。
服务之间相互通信时,由于读写耗时、网络、机器IO…等各种因素,会导致服务某时刻无响应,也就是通信失败。正是因为失败的因素多样,所以谈及失败率多少,比带着一些前提条件进行约束因素。
举个例子:
在整个服务中,体系结构为上游服务 A 调用 下游服务 B 。由于接口平响业务规范,对 B 服务的读写约束在 20ms 内,超过约束时间,则视为通信失败。于是就有了下面的描述:
对于 服务 A 来说,
- 读写时间设置为 20ms 时,服务 B 的失败率是 0.3%,千分之三;
- 读写时间设置为 50ms 时,服务 B 的失败率是 0.1%,千分之一;
所以就产生了一个问题,如何在约束条件下降低服务通信的失败率?
如何在读写时间设置为 20ms 时,把服务 B 的失败率将到 0.1%,千分之一呢?
重试
其实采取的措施有多种,重试是大家平时用到的最普遍的措施之一。
为什么重试可以有效降低失败率呢?
这要归结一下通信失败的原因。大数据显示,服务通信失败 90%+ 的因素为网络问题,也就意味着通信次数和成功率成正比。故就有了这一重试机制。
重试机制的策略有多种,具体详细可见 你真的会重试吗?——重试机制之二进制指数退避机制。
这里介绍一种双发机制。
双发
所谓双发,顾名思义,就是一次通信进行两次交互。两次交互相差一定的时差,避免阶段性网络抖动,以其中一次的通信结果为基准。
Weibo 跨平台服务治理服务 Motan 支持此双发机制,具体流程如图:
在通信时,第一次请求发送到 服务 B 的 P90 时间内,仍未收到相应,则进行第二次发送,最终以先到的响应为准。
注: P90/99/999,可配置,数据表明通用场景P90效果最佳
附录
忙碌与早起
以上是关于如何降低服务失败率,提高服务稳定性 -- 双发策略[重试机制]的主要内容,如果未能解决你的问题,请参考以下文章