大家好,我是砸锅。一个摸鱼八年的后端开发。熟悉 Go、Lua。今天和大家一起学习分布式技术😊
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 20 天,点击查看活动详情
降级
降级的原因
在分布式系统中,熔断、限流和降级是保障系统稳定性的三个重要手段,它们之间相互配合和补充
降级机制可以从全局角度对资源进行调配,通过牺牲非核心服务来保障核心服务的稳定性。降级可以提高系统的用户体验性和可用性,有点类似 Plan B,当接口正常调用的情况下出现非业务层错误之后,某些情况下可以不返回错误,而是将一个降级后的执行结果返回,这样用户的体验会更好一些
如何实现降级
手动降级
手动降级是指在分布式系统中提前设置好降级开关,然后通过类似配置中心的集中式降级平台,来管理降级开关的配置信息,在系统需要降级的时候通过降级平台手动启动降级开关,对系统进行降级处理
手动降级由人工操作,优点是可控性强。但是在分布式系统里,会有很多服务和实例,如果出现故障时需要一个个手动启动降级是非常低效的
有一个可行的方案,通过对降级分级,利用服务的等级信息和业务信息进行批量降级,例如:
按照从高到低的重要程度分为 P0 - P3 这四个级别,然后根据服务的等级信息、业务信息和调用链路的依赖关系,对非核心服务建立分级降级机制,例如分为三个等级:
- 一级降级:会对 P1、P2、P3 的服务同时进行降级
- 二级降级:会对 P2、P3 的服务同时进行降级
- 三级降级:会对 P3 的服务同时进行降级
然后在需要降级的时候,就可以根据系统当时的情况,按照接口、服务、降级级别进行手动降级。不过要注意谨慎对待,不然容易出现人为的故障发生
自动降级
自动降级是指在分布式系统中,当系统的某些指标或者接口调用出现错误时,直接启动降级逻辑
首先,因为熔断机制是系统稳定性保障的最后一道防线,并且它是自适应的,所以我们应该在系统全局默认启用;其次,限流是用来保障被限流服务稳定性的,所以我们建议,一般在系统的核心链路和核心服务上,默认启用限流机制;最后,降级是通过牺牲被降级的接口或者服务,来保障其他的接口和服务正常运行的,所以我们可以通过降级直接停用非核心服务,然后对于核心接口和服务,在必要的时候,可以提供一个“ B 计划”。其实,从整个系统的角度来看,不论是熔断还是限流,一旦触发了规则,都是通过抛弃一些请求,来保障系统的稳定性的,所以,如果更广泛地定义降级的话,可以说熔断和限流都是降级的一种特殊情况。
此文章为2月Day16学习笔记,内容来源于极客时间《深入浅出分布式技术原理》