一起养成写作习惯!这是我参与「掘金日新计划·4月更文挑战」的第15天,点击查看活动详情。
又是一个老生常谈的话题,但其实根据我的个人经验,真正有熔断降级实践落地的服务并不多。只能说概念我都懂,但是我的业务还用不到。今天简单分析一下这其中的原理。
熔断
为什么熔断没有大范围的使用,一个可能的原因还是微服务拆的还不够独立,还是在一些关键链路上有所耦合。一个地方熔断了,那根整个业务挂了也没区别。但对于一些无状态的数据服务,如果因为查询报错,导致整个链路被拖垮,就得不偿失了。那么熔断的机制是什么样呢?本质上是一个有限状态机,在打开、关闭、半打开三个状态之间动态切换。如下图所示:
打开表示断路器打开,阻断请求;反之关闭则表示请求正常;半打开表示试探性的打开,满足一定条件后再决定打开还是关闭。打开与关闭的切换取决于请求的失败与成功的次数,比如连续失败10次就切断请求。
断路器不会一直处于打开状态去切断请求,会每隔30秒去切换到半打开状态,再尝试去请求目标服务,如果再出现错误则会切换回打开状态,如果请求可以成功则会切换到关闭状态。
降级
这个实现起来非常简单,但会依赖于配置中心这样的中间件。如果再自动化一点,可以像熔断的原理一样,累计错误达到一定阈值则降级到另一个状态。比如评论列表的加载,如果主服务出现过载,那可以尝试关闭评论的加载来降低主服务的压力。如果做不到自动,则可以通过配置中心的开关配置来手动一键切换。
熔断和降级是保证服务端稳定性的重要手段,值得去实践落地。