基本概念
熔断的作用类似于我们家里用的保险丝,在用电量大的时候,会自动断开,保护我们整体的电路。
服务熔断也被称为服务过载保护。
问题的产生—服务雪崩
在我们平时的业务场景中,分布式之后,可能会存在 服务A 调用 服务B ,服务B调用服务C。
如果服务器C现在不可用了,会导致服务器B一直调用服务器C,从而导致服务B也不可以用。
服务A和B的关系也是类似,也会因为服务B导致服务A不可用。
出现这种情况之后,因为一个服务倒置整个系统都不可用,我们称之为 服务雪崩。
解决雪崩
服务降级 和 服务熔断 则可以解决服务雪崩的问题。
服务熔断
当服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用
后续问题解决
1、服务熔断之后,服务就不能够再继续使用了,最好是在程序加上诊断,测试下游服务是否已经正常,如果服务不能请求,过段时间继续测试,如果服务可以用,慢慢加大请求量。
2、不是重要模块(电商的评论等),可以在上游服务添加内容到队列,把内容写入队列中,后续异步去处理。
服务降级
服务降级,当服务器压力剧增的情况下,根据当前业务把一些不重要到服务停掉,释放服务器资源以保证核心任务的正常运行。(双11到时候淘宝就会把一些不重要到服务器停掉,释放出到资源用来保证重要到服务,保证可以正常到购物)
服务限流
通过对并发访问进行限速。限制服务的访问流量,防止出现服务压力过大的问题。
限流范式
拒绝服务
最简单的方式,把多余的请求直接拒绝掉,给出提示信息
延时处理
可以利用队列把数据缓存起来,异步处理。整个系统从强一致性变为弱一致性。