课程名称:海量数据高并发场景,构建Go+ES8企业级搜索微服务
课程章节:5-7
课程讲师:少林码僧
课程内容:
什么是降级
通过降低回复调用方的质量来减少系统的工作量
比如,当推荐系统出问题,可以直接返回预设的一些默认商品展示
比如,可以预先设置一些缓存,在服务降级后,返回这些缓存,尽管质量不高,但是能用
暂时关闭一些功能也是降级的一种服务,比如,在双十一的时候,会暂时关闭退款退货窗口
通过熔断避免服务雪崩
有损的降级
局部故障引发全局故障,我们称之为 雪崩
比如,在电商项目中,登录,订单都是核心服务,而消息队列可能不是核心服务,核心服务调用其他的非核心服务资源不足导致核心服务被阻塞,比如订单系统调用消息队列,但是消息队列阻塞或者崩了,订单无法完成
比较常见的降级就是断路器模式。当失败累计到一定次数,断路器打开,在断路器关闭服务到一定时间,进入半开状态,放行部分请求,如果请求再次出现失败,并且累计一定次数,断路器进入全开模式,禁止任何请求。如果半开状态下,成功达到一定次数,则断路器关闭,放行所有流量。
通常那些情况需要触发降级
依赖服务不可用
响应的时间过长
吞吐量过大(IO/流量)
降级的实现方式
对服务进行顶级,尽可能让非核心服务先降级,可以通过一个全局的配置来约定服务级别,服务降级的条件,服务降级的恢复条件,
降低返回结果的准确度
请求短路,不走DB,直接给缓存
简化流程,放弃部分操作,比如下单后不立即通知
延迟执行
关闭某些功能或者定时脚本
降级需要考虑的问题
定期小规模演练和测试,保证功能正常
降级条件不应该过于苛刻,不应该经常被处罚
降级应该有通知,下游调用方应该能感知并被告知服务降级
课程收获