来源:性能与架构
一般来说,大部分的软件开发架构都是要尽可能的满足用户的不同需求,所以我们才会发现一些软件的体积会越来越大,而有时候我们为了维护系统的正常运行也需要去掉一些架构内容,这就是我们今天要给大家介绍的关于降级的一些使用方法。
降级是系统保护的重要手段,保证系统的高可用,简单理解,降级就是丢车保帅,在系统压力极大时,暂时不做非必要动作,以保证系统核心功能的正常。
例如电商系统中,购物车、结算这类的核心功能就是保护对象,是绝对不能降级的,而像个性化自动商品推荐服务就可以暂时不提供。
降级策略有很多种,可以从下面3个维度分为5种策略:
自动化维度
包括:自动开关降级、人工开关降级。
功能维度
包括:读服务降级、写服务降级。
系统层次维度
包括:多级降级。
1. 自动开关降级
系统在运行时根据运行状态自动触发降级,例如:
超时
调用远程非核心服务时,响应过慢后自动降级,先不调了。
需要配置好超时时间和超时重试次数。
统计失败次数
有的服务可能不太稳定,例如外部的机票服务,当调用失败次数超过容忍度后就自动降级。可以通过异步线程去探测服务是否恢复了,可用后自动取消降级。
故障
比如远程服务挂掉了,就自动降级,可以使用默认值、提前准备的内容、之前的缓存数据。
限流
例如秒杀系统,通常会使用限流机制进行保护,当达到限流阈值时,后续请求就自动被降级,例如将用户导流到排队页面过会儿重试、直接告诉用户没货了。
2. 手动开关降级
自动降级是根据系统出现的一些问题进行响应,但在系统还没有出现问题时,我就想降级某些服务,比如促销马上开始了,可以预知访问量很大,我们提前就把推荐服务关掉;再比如新功能想上线进行灰度测试,当新功能不符合预期时我想马上切换回老服务。
这类需求就需要使用可以人工控制的开关来实现。
开关可以存放到配置文件、数据库、Redis/Zookeeper等位置,定期同步开关数据。
分布式系统中通常会创建一个配置中心,对整个系统中的配置开关进行集中管理,提供 Web UI 界面进行便捷操作。目前有一些开源方案可以选择,例如 ZooKeeper、Diamond、Etcd 3、Consul。
作者:杜亦舒
节选:公众号:性能与架构
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。
网友评论