当系统遇到大的流量,为了能让系统健康的运行,我们会采取一些措施,上节课讲到的限流是一种方式,拒绝掉一些流量,今天讲另一种方式,降级,它的本质是在有限的资源下,处理尽量多的事情。
为了实现这个目的,需要在某些方面做牺牲。主要包含以下三个方面
1 降低一致性
流程的一致性,从原来的强一致性变为最终一致性,如电商下单的过程,先生成订单,扣减库存的操作做成异步,最后再通知用户下单是否成功。
数据的一致性,原先数据从数据库中读取,降级开始后,从缓存中读数据。
2 停止没必要的功能,在大流量的冲击下,可以暂时把不太重要的功能停掉,比如商品的评论功能,待流程恢复正常后再开启停止的功能。
3 简化功能,对一些功能进行裁剪,提供一个精简版的实现,例如商品展示页面,不展示商品的评论数据,与该商品关联的推荐商品的展示先去掉等等。在不影响最重要的最核心的业务流程情况下,适当的去除一些附加的业务。
以上是降级的思路。下面总结下在设计降级时的几个要点。
1 梳理业务,分清业务的重要程度
2 定义好降级的触发条件,如响应时间过长,失败请求过多等等。
3 降级的开关可以设置手动开启,或者可由上游系统控制,比如在协议头部加入降级标志。