dubbo了解什么是服务雪崩
warning:
这篇文章距离上次修改已过540天,其中的内容可能已经有所变动。
雪崩问题:
服务雪崩指:服务提供者不可用导致服务调用者也跟着不可用,以此类推引起整个链路中的所有微服务都不可用
释:服务提供者A因为某种原因出现故障,那么服务调用者服务B依赖于服务A的请求便无法成功调用其提供的接口,假以时日依赖于服务A的请求越来越多导致服务B的Tomcat资源耗尽,造成服务B线程阻塞,导致服务B也出现故障。那么假如服务C依赖于服务B由于服务B也出现了故障导致服务C出现故障。以此类推引起整个链路中的所有微服务都不可用。
解决雪崩问题的常用方式:
超时处理:设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待
线程隔离:限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离。
熔断降级:由断路器统计业务执行的异常比例,如果超出阈值则会熔断该业务,拦截访问该业务的一切请求。
流量控制:限制业务访问的QPS,避免服务因流量的突增而故障。
超时处理:
释:服务A依赖于服务B(故障),服务A向服务B发起请求时超过设定的超时时间,它会立即结束等待,并向返回提示信息。
这种方式就不会一直占用服务资源,缓解了雪崩问题
线程隔离:
释:服务A依赖于服务B和服务C(故障),例:服务A会把Tomcat线程划分为许多的独立线程池,每个业务分配一个线程池,那么服务C故障了最多只影响服务A的部分线程。避免了服务A整个tomcat资源耗尽的情况
熔断降级:
释:服务A依赖于服务B(故障),它会去统计服务A访问服务B的请求,当异常的比例超过了设定值时便会立即熔断该业务,当再次有请求需要访问服务B时它会拦截该请求并快速返回失败
流量控制:
释:当有大量的服务涌入服务A时,使用中间件拦截这些请求,让这些请求以服务能承受的频率去释放请求