目录
-
定义
当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作。
即丢车保帅。
-
目的
为了保证重要或基本的服务能正常运行
-
实现原理
分布式开关(配置中心 + 处理策略)
-
-
分布式开关
-
-
-
配置中心
-
配置中心为分布式系统中的服务器端和客户端提供外部化配置支持,在一个地方集中对所有环境中的应用程序的外部化配置进行管理
-
-
-
主要特性
- 启动主动拉取配置:用于初始化配置(减少第一次定时拉取周期)
- 发布订阅配置:用于实现配置及时变更(可以解决90%左右的配置变更)
- 定时拉取配置:用于解决发布订阅失效或消失丢失的情况(可以解决9%左右的发布订阅失效的消息变更)
- 离线文件缓存配置:用于临时解决重启后连接不上配置中心的问题
- 可编辑式配置文档:用于直接编辑文档的方式来实现配置的定义
- 提供Telnet命令变更配置:用于解决配置中心失效而不能变更配置的常见
-
常见技术选型
- Disconf:百度开源的配置管理中心,目前已经不维护了
- Spring Cloud Config: Spring Cloud 生态组件,可以和Spring Cloud体系无缝整合,默认采用git来存储配置文件。
- Apollo: 携程开源的配置管理中心,具备规范的权限、流程治理等特性。
- Nacos: 阿里开源的配置中心,也可以做DNS和RPC的服务发现。
-
-
处理策略
-
常用的降级处理方案
-
按是否自动分为:
- 人工开关降级:可视化界面人为调整
- 自动开关降级:
- 超时降级:主要配置好超时时间和超时重试次数和机制,并使用异步机制探测恢复情况
- 失败次数降级:主要是一些不稳定的API,当失败调用次数达到一定阀值自动降级,同样要使用异步机制探测回复情况
- 故障降级:如要调用的远程服务挂掉了(网络故障、DNS故障、HTTP服务返回错误的状态码和RPC服务抛出异常),则可以直接降级
- 限流降级:当触发了限流超额时,可以使用暂时屏蔽的方式来进行短暂的屏蔽
-
按功能分为:
- 页面降级:可视化界面禁用点击按钮、调整静态页面
- 延迟服务:如定时任务延迟处理、消息入MQ后延迟处理
- 写降级:直接禁止相关写操作的服务请求
- 读降级:直接禁止相关度的服务请求
- 缓存降级:使用缓存方式来降级部分读频繁的服务接口
- ···
-
-
后端常用的处理措施
- 抛异常
- 返回NULL
- 调用Mock数据
- 调用Fallback处理逻辑
-
-
-
使用场景
当整个微服务架构整体的负载超出了预设的上限阈值或即将到来的流量预计将会超过预设的阈值时,为了保证重要或基本的服务能正常运行,我们可以将一些 不重要 或 不紧急 的服务或任务进行服务的 延迟使用 或 暂停使用。
-
-
实例
- 【页面降级,关闭次要功能】例如,电商平台基本都支持物流查询功能,而物流查询往往要依赖第三方物流公司的系统接口。物流公司的系统性能往往不会太好。所以我们经常会在双11这种大型促销活动期间把物流接口屏蔽掉,在页面上也关掉物流查询功能。这样就避免了我们自己的服务被拖垮,也保证了重要功能的正常运行。
- 【读降级、缓存降级】例如,我们会把商品评论评价信息缓存在Redis中。在服务和数据库压力过大时,只读缓存中的评论评价数据,不在缓存中的数据不展示给用户。当然评论评价这种不是很重要的数据可以考虑用NOSQL数据库存储,不过我们曾经确实用Mysql数据库存储过评论评价数据。
- 【写降级】例如,秒杀场景瞬间生成订单量很高。我们可以采取异步批量写数据库的方式,来减少数据库访问频次,进而降低数据库的写入压力。
- 【页面降级,关闭次要功能,写降级】例如,商品的评论评价功能。为了减小压力,大促前可以关闭评论评价功能,关闭写接口,用户只能查看评论评价。而大部分查询请求走查询缓存,从而大幅减小数据库和服务的访问压力。
-
-
Reference
- 微服务架构—服务降级
https://blog.csdn.net/ityouknow/article/details/81230412
- 微服务配置中心选型比较——Nacos、Apollo、Config
https://baijiahao.baidu.com/s?id=1662923343412122321
- 揭开服务降级的面纱!!!
https://blog.csdn.net/o9109003234/article/details/104958305/