什么是服务降级

降级的目的是为了保证核心服务可用。

降级可以有几个层面的分类: 自动降级和人工降级; 按照功能可以分为:读服务降级和写服务降级

  1. 对一些非核心服务进行人工降级,在大促之前通过降级开关关闭哪些推荐内容、评价等对主流程没有影响的功能
  2. 故障降级,比如调用的远程服务挂了,网络故障、或者RPC服务返回异常。 那么可以直接降级,降级的方案比如设置默认值、采用兜底数据(系统推荐的行为广告挂了,可以提前准备静态页面做返回)等等
  3. 限流降级,在秒杀这种流量比较集中并且流量特别大的情况下,因为突发访问量特别大可能会导致系统支撑不了。这个时候可以采用限流来限制访问量。当达到阀值时,后续的请求被降级,比如进入排队页面,比如跳转到错误页(活动太火爆,稍后重试等)


Dubbo降级的方式Mock

Mock是相对消费端而言的。

在dubboclient中新建一个实现类TestMock实现服务接口IHello:

Dubbo使用之服务降级_访问量

在配置文件中进行相应的配置:

<dubbo:reference interface="dongguabai.dubbo.IHello" id="helloService" protocol="dubbo" check="false"
mock="dongguabai.dubbo.TestMock"/>

启动dubboserver后,在客户端进行调用:

Dubbo使用之服务降级_限流_02

Dubbo使用之服务降级_访问量_03

正常调用dubboserver成功。

修改dubboclient配置文件,增加一个timeout="1",也就是说1毫秒以上就属于超时:

<dubbo:reference interface="dongguabai.dubbo.IHello" id="helloService" protocol="dubbo" check="false"
mock="dongguabai.dubbo.TestMock" timeout="1"/>

再次用dubboserver调用:

Dubbo使用之服务降级_限流_04

这时候走到了Mock:

Dubbo使用之服务降级_配置文件_05

要注意的是如果这里配置了容错机制,会优先执行容错机制:

<dubbo:reference interface="dongguabai.dubbo.IHello" id="helloService" protocol="dubbo" check="false"
mock="dongguabai.dubbo.TestMock" timeout="1"
cluster="failsafe"/>

Dubbo使用之服务降级_配置文件_06