所谓的降级设计(Degradation),本质是为了解决资源不足和访问量过大的问题。当资源和访问量出现矛盾的时候,在有限的资源内为了能够扛住大量的请求,我们就需要对我们的系统进行降级操作。也就是,暂时牺牲掉一些东西,保障整个系统的平稳运行。
一般来说,我们的降级需要牺牲掉的东西有:
- 降低一致性。从强一致性变成最终一致性。
- 停止次要功能。停止访问不重要的功能,从而释放出更多的资源。
- 简化功能。把一些功能简化掉,比如,简化业务流程,或是不再返回全量数据,只返回部分数据。
降低一致性
我们要清楚地认识到,这世界上大多数系统并不是都需要强一致性的。对于降低一致性,把强一致性变成最终一致性的做法可以有效地释放资源,并且让系统运行得更快,从而可以扛住更大的流量。一般来说,会有两种做法,一种是简化流程的一致性,一种是降低数据的一致性。
使用异步简化流程
对于一些关键的业务流程,可以将同步处理的流程,通过产品设计改为异步流程。比如电商的下单交易系统,需要结算账单,扣除库存,扣除账户上的余额(或发起支付),最后进行发货流程,这一系列的操作。我们可以改为先让用户下单,然后异步处理订单,分配库存,然后异步通知用户支付。
降低数据的一致性
降低数据的一致性一般来说会使用缓存的方式,或是直接就去掉数据。比如,在页面上不显示库存的具体数字,只显示有还是没有库存这两种状态。
对于缓存来说&