- 服务雪崩,名字挺形像,A-->B-->C,如果c服务有大量的请求超时积压,导致B服务一直没有返回结果,也积压着请求,最后A就积压,整个链路就崩了。特别在有大量重试的时候,这种情况更严重,本来服务就处理不过了,client请求发现超时,又重试一次;还有一种请求就是集群中,如果某几台机器 不可用,下线了,流量全部到了其他机器上,这一下次大流量到了其他机器上,就直接崩了服务
- 为了处理这种系统不堪重负的情况,保护系统能正常运行,有几个措施
- 限流,在服务启动之初,就知道最大承载的压力,如果请求超过这个上限负载,就从最前面入口打回了请求。
- 熔断,A-->B,如果A发现B有一定数量的异常,为了不影响A自己本身的服务,当A调用B的时候,直接返回个默认值,不走B服务了。这样减少A的超时和B服务的压力,直到B服务正常,再把熔断关闭
- 降级,A服务中,如果发现在系统压力过大,直接关闭或者限制某些非核心的接口,让机器资源集中处理核心业务,保证公司业务正常。
- 熔断和降级的共同点: 都是为了保护系统,防止崩溃,都会让用户体验到某种服务不可用
- 熔断和降级的不同点: 熔断是当下游系统有异常,有故障的时候触发的;降级是主动发现了系统压力大,关闭某些服务的,降级系统负载。
网友评论