复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败。
服务雪崩:多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,这就是所谓的“扇出”。如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的“雪崩效应”。
对于高流量的应用来说,比如秒杀系统,大量的请求涌入很有可能对单一的服务造成极大的压力,可能会导致该服务所在的服务器的所有资源在几秒钟内饱和。更糟糕的是,这些应用程序还可能导致服务之间的延迟增加,备份队列,线程和其他系统资源紧张,导致整个系统发生更多的级联故障。
对于“服务雪崩”,通常有几种处理方法:①服务熔断②服务降级③限流
服务熔断
熔断机制是应对雪崩效应的一种微服务链路保护机制。
简单地说就是如果某个目标服务调用慢或者有大量超时,此时,熔断该服务的调用,对于后续调用请求,不在继续调用目标服务,直接返回,快速释放资源。如果目标服务情况好转则恢复调用。在SpringCloud框架里熔断机制通过Hystrix实现。Hystrix会监控微服务间调用的状况,当失败的调用到一定阈值,缺省是5秒内20次调用失败就会启动熔断机制。
例如你的A服务里面的一个功能依赖B服务,这时候B服务出问题了,返回的很慢。这种情况可能会因为这么一个功能而拖慢了A服务里面的所有功能,因此我们这时候就需要熔断!即当发现A要调用这B时我们就直接返回错误(或者返回其他默认值),这样就不会去请求B服务了。我这还是举了两个服务的调用,有些那真的是一环扣一环,出问题不熔断,那真的是会雪崩。
服务降级
服务降级,当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。简单地说就是服务器整体的资源不够了,忍痛将一些服务关掉,待渡过难关,再开启回来。服务降级处理是在客户端实现完成的,与服务端没有关系
限流
限流模式主要是提前对各个类型的请求设置最高的QPS阈值,若高于设置的阈值则对该请求直接返回,不再调用后续资源。也就是系统规定了多少承受能力,只允许这么些请求能过来,其他的请求就说再见了。
比如:秒杀系统里,我们规定3份商品可以秒杀,那么我们可以对这个秒杀的接口进行限制,只允许50个请求来访问之类,当请求量超过这个限制时,超过的请求全部被限制,被拒绝访问这个接口。
参考博客:https://juejin.im/post/5cced96e6fb9a032514bbf94
https://blog.csdn.net/qq_33394088/article/details/80210679