降级特技

当服务出现问题,要保证服务起码可用,即使服务是有损的,这时候就需要使用降级策略,返回“不那么完善”的服务。另一层含义是,当系统资源紧张时,对非核心业务进行降级,保证核心业务的稳定

5.1 降级预案

  梳理出哪些服务需要保护,哪些可降级。

  按照是否自动化分为:自动开关降级和人工开关降级

  按照功能分为:读服务降级和写服务降级

  按照处于系统层次分为:多级降级

5.2 自动开关降级

  5.2.1 超时降级 

  访问非核心接口超时或响应慢,可以在超时后自动降级

  5.2.2 统计失败次数降级

  当访问某些接口经常异常,达到一定阈值后自动降级(熔断器)。然后通过异步线程去探测服务是否恢复,恢复则取消降级

  5.2.3 故障降级

  调用的服务挂掉了,可以直接降级。降级后的处理方案有:默认值,兜底数据,缓存

  5.2.4 限流降级

  被限流机制阻挡的请求,返回错误中或排队页面

5.3 人工开关降级

  区别主要是由人工来干预,手动降级。比如新开发的功能有问题,手动切换到旧服务。

5.4 读服务降级

  暂时切换读(降级到读缓存、降级到走静态化)、暂时屏蔽读(屏蔽读入口、屏蔽某个读服务)

5.5 写服务降级

  主要为了保护数据库,将同步写转成异步写,或者写缓存,再异步写数据库

5.6 多级降级

  降级离用户越近越对系统保护的好。因为越接近用户,流量越大,此时降级能拦住大部分流量。

  页面JS降级开关,主要控制页面功能的降级

  接入层降级开关,后端服务前的一道防线

  应用层降级开关,控制业务降级

5.7 配置中心

  手动降级的实现方式,将开关配置放到配置中心,比如apollo,做到不重启即可动态配置开关。

5.8 使用Hystrix实现降级

  

 

  当正常方法超时或异常时,如果启用了降级处理,调用getFallback进行降级

5.9 使用Hystrix实现熔断

  

 

  通过allowRequest判断是否熔断了,如果没有走正常处理,否则调用getFallback进行降级。

  allowRequest方法,判断熔断开关是否打开(isOpen),如果关闭根据统计信息判断是否需要打开,否则走正常方法。如果打开,其快速恢复机制,允许一个时间窗口内,进行一次测试,看看是否已经恢复,如果恢复则将熔断开关关闭,否则都走降级方法。

  这个方法中调用了isOpen方法,其作用是根据采样次数,判断是否需要打开熔断开关,如果失败率超过阈值,那么打开熔断开关,并返回true。

  熔断器开关的状态:

  闭合:当熔断开关闭合时,不启动熔断机制,不降级

  打开:当熔断开关打开时,启用熔断机制,调用降级方法

  半打开:当熔断处于打开状态,在一个时间窗口内有一次重试机会,此时称为半打开。如果重试成功,则恢复闭合,重试失败则变成打开状态。

  5.9.3 采样统计

  Hystrix在内存中存储采样数据,支持三种采样

  1. 计数统计:统计一个时间窗口内的失败、超时、线程池拒绝、信号量拒绝数量,记录N组,统计使用前N-1组。比如一个窗口时间10秒,每秒记录一组。

  2. 最大并发数统计

  3. 延迟百分比统计

 

posted @ 2021-04-24 20:16  walker993  阅读(94)  评论(0)    收藏  举报