服务降级的理解
定义
服务降级是指在分布式系统中,当系统面临高并发、资源紧张、故障等情况时,为了保证核心功能的可用性和稳定性,主动降低一些非核心服务的性能或暂时关闭一些不重要的服务功能,以牺牲部分功能的完整性来换取整体系统的可用性和稳定性,避免系统出现雪崩效应而导致整体崩溃。
实施场景
- 高并发场景:在电商促销活动、大型直播等流量高峰时期,系统可能会面临远超平常的请求量。此时,为了确保核心的下单、支付等功能能够正常运行,会对一些如用户个性化推荐、评论加载等非核心功能进行降级,减少资源占用,保障关键业务流程的顺畅。
- 资源不足情况:当服务器硬件资源(如 CPU、内存、网络带宽等)出现紧张时,为防止系统因资源耗尽而崩溃,会对一些占用资源较大但相对不那么关键的服务进行降级。比如,暂时降低图片高清展示的质量,减少图片处理所占用的 CPU 和内存资源。
- 故障发生时:当某个服务依赖的下游服务出现故障或响应缓慢时,为了避免故障扩散和影响范围扩大,对依赖该下游服务的相关功能进行降级。例如,若物流查询服务出现故障,在电商系统中可以暂时隐藏物流信息查询入口,或显示默认的提示信息,告知用户物流信息查询暂时不可用,而不是让用户一直处于等待或出现系统报错的状态。
实现方式
- 开关控制:通过配置中心或分布式开关框架,在系统运行时动态地控制某些服务功能的开启或关闭。例如,在代码中设置一个开关变量,当系统压力大时,将开关设置为关闭状态,禁止访问某些非核心服务接口。
- 限流:对服务的请求流量进行限制,当请求量达到一定阈值时,拒绝多余的请求。比如,使用令牌桶算法或漏桶算法来控制请求的速率,确保系统不会因为过载而出现问题。如限制某个接口每秒只允许处理 100 个请求,超出部分的请求直接返回降级提示信息。
- 缓存策略:增加缓存的使用,对于一些不经常变化的数据或允许有一定延迟的数据,从缓存中获取而不是实时查询数据库或调用其他服务。例如,在新闻类应用中,对于热门新闻的内容,可以将其缓存起来,当大量用户请求时直接从缓存读取,减少对数据库的查询压力,即使数据库出现短暂问题,也能保证用户正常获取新闻内容。
- 熔断机制:类似于电路中的保险丝,当某个服务出现故障或响应时间过长时,自动切断对该服务的调用,一段时间后再尝试恢复调用。比如,当调用第三方支付接口多次失败后,触发熔断,在熔断时间内不再调用该接口,而是直接返回支付失败的提示信息给用户,避免大量无效的请求堆积,导致系统资源耗尽。
服务降级与服务熔断的区别
- 服务熔断:通常是在服务出现故障或异常时自动触发,是一种被动的、应急的保护机制,主要是为了防止故障的进一步扩散,避免级联故障导致整个系统崩溃,一般会在一段时间内完全切断对故障服务的调用。
- 服务降级:更多是一种主动的、有策略的行为,是在系统预计可能出现问题或为了保证核心业务的稳定性,提前对一些非核心服务进行处理,不一定是因为服务出现了故障,可能是为了应对高并发等情况而主动降低服务质量或关闭部分功能。