开发者学堂课程【阿里巴巴分布式服务框架 Dubbo 快速入门:服务降级】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/624/detail/9474
服务降级
内容介绍:
一、什么是服务降级
二、Dubbo 支持的两种服务降级
三、如何设置服务降级
四、进行测试
服务降级,也是在分布式系统中来提升系统高可用性的手段之一。
一、什么是服务降级?
当服务压力器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作。
比如 A 服务器里有用户类服务 user service、订单相关服务 orderservice、广告类相关服务 Advertiment service,A 服务器现在流量很大,有3000多并且同时在处理,服务器处理极具缓慢,需要牺牲某些人利益,仅广告服务就有1000多个并发,如果把广告服务屏蔽掉,剩下2000个留给用户类服务和订单相关服务,就会非常迅速,想屏蔽广告服务就可以通过服务降级这种方式。
二、Dubbo支持两种服务降级
1、强制返回为空:mock=force:return+null
表示消费方对该服务的方法调用都直接返回 null 值,不发起远程调用。用来屏蔽不重要服务不可用时对调用方的影响。
2、mock=fail:return+null
表示消费方对该服务的方法调用在失败后,再返回 null 值,不抛异常,用来容忍不重要服务不稳定时对调用方的影响。
例:当广告服务大量并发后,每一个服务都处理的很缓慢,到达一定的超时时间还没有处理完即可用这种。
三、如何进行设置服务降级
直接进入控制台,在消费者层面,当 order-service 调用其他方面服务时,可直接进行屏蔽如下图
屏蔽的作用是不发起远程调用,直接在客户端返回空对象,相当于 dubbo 的第一种服务降级,mock=force:return+null,不调用远程服务,直接返回为空。
其次我们还可以写容错,相当于 dubbo 的第二种服务降级,当调用失败后,返回为空,例如超时,网络波动等等。
四、进行测试
假如10011服务器,里面跑掉很多服务,不止 user-service 一个,并且当前服务器资源占满,内存百分之百,CPU 百分之百。
这时可以把服务器的某些服务屏蔽掉,屏蔽后让这些服务释放资源,服务器有其他闲时间和空余的资源处理更多核心业务,屏蔽是在消费者这里做的,order-service 是用调 user-service 的,来告诉 order-service 远程调用时把远程服务屏蔽掉,那么 oeder-service 在调用期间就可以选择每次远程调用时不调了,直接返回为空;要么远程调用时调一下,调失败后返回为空。
这两种策略分别对应 mock=force:return+null 和 mock=fail:return+null 。
1、设置第一种 mock=force:return+null 进行测试:
首先把 order-service 屏蔽掉,清掉控制台,进行刷新发现整个页面时空白的,发现 user-service 也没有调用,说明把整个远程服务屏蔽了不去调用。
恢复调用后再进行刷新,控制台又打印了。因此在线上我们可以实时根据服务器性能来屏蔽掉某些服务。恢复调用后,有一个性能是容错,作用是当远程调用失败时,返回空对象。
2、设置第二种 mock=fail:return+null 进行测试:
点击容错,这个调用是成功的,在 user-service,调用时代码写为@Reference(loadbalance=“random”,timeout=1000)//dubbo
直连,而远程服务时间会久一点,代码为Thread.sleep(2000)
;重新启动放在注册中心,user-service 会超时,进行调用,重新启动,并且我们对这个服务进行了容错处理,即 mock=fail:return+null,控制台进行刷新,点击消费者,消费者已经容错
再进行调用刷新,返回为空。
将容错关闭重新刷新,会发现控制台页面报错。因此我们可以快速返回为空,来屏蔽一个服务,达到动态调配服务器资源的功能。