这是高并发系统三大利器的最后一篇文章了,前面两篇如果没看的话可以先去看下前面的文章《高并发系统三大利器之限流》《高并发系统三大利器之缓存》。说到服务降级,大多数人可能会认为熔断和降级是一样的。我曾经也一度是这样认为的,直到有一天一个面试官问我熔断和降级有啥区别吗?我直接回答没啥区别,然后就让我回去等通知了,我才知道它们还是有区别的。我们先看下服务降级的定义:
❝服务降级是当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。 ❞
来源于百度百科。这些话看起来是不是不是很好理解,那么我们可以举个栗子:双十一的时候,我们买东西是不是都不允许修改购物地址,不允许发起退货,不允许退款还有很多服务都不可以用,只允许用户选择商品加入购物车付钱。那天只有一个目的就是让一些不是很重要的服务所占用的cpu
资源都让出来,给购物,付款这样的核心服务。这样的话,用户付款的速度就会越来越快,毕竟前多少名支付的用户是有免单机会的(大家都会挤在0点那一刻去付款)。「服务降级主要用于当整个微服务架构整体的负载超出了预设的上限阈值或即将到来的流量预计将会超过预设的阈值时,为了保证重要或基本的服务能正常运行,将一些 不重要 或 不紧急 的服务或任务进行服务的 延迟使用 或 暂停使用」。降级就是为了解决资源不足和访问量增加的矛盾。
mq
延时处理。比如新用户注册送多少优惠券可以提示用户优惠券会24小时到达用户账号中,我们可以选择再在凌晨流量较小的时候,批量去执行送券。Cache
的更新返回,然后通过mq异步扣减库存到DB
,保证最终一致性即可,此时可以将DB
降级为Cache
。说到服务熔断我们就得先了解下什么是「服务雪崩」。雪崩效应好比就是蝴蝶效应,说的都是一个小因素的变化,却往往有着无比强大的力量,以至于最后改变整体结构、产生意想不到的结果。多个微服务之间调用的时候,比如A
服务调用了B
服务,B
服务调用了C
服务,然后C
服务由于机器宕机或者网略故障, 然后就会导致B
服务调用C
服务的时候超时,然后A
服务调用B服务也会超时,最终整个链路都不可用了,导致整个系统不可用就跟雪蹦一样。