课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
我们在上文中给大家简单介绍了关于系统架构的时候为什么使用降级功能以及部分常见的降级操作方法,今天我们就针对这些操作方法做一个补充,学习一下的其他降级方法。
1. 读服务降级
从读取数据 的角度考虑降级,例如商品详情页,其中有非常多的内容,比如商家信息、推荐信息、配送至信息、相关分类、热销榜等等,这些都不是核心数据,所以在出现异常时可以进行降级处理。
还以商品详情页为例,在促销活动之前,可以将整个页面切换为静态化,大程度的降级读服务。
2. 写服务降级
写服务都是很关键的,降级思路基本就是同步写转异步写。
例如扣减库存的操作,正常情况下的设计一般是:
方案1:数据库中扣减,成功后更新 Redis 缓存。
方案2:先扣减 Redis 缓存,同步扣减数据库,如果失败则回滚 Redis 缓存。
当数据库性能跟不上时,就需要采用异步方式了:
先扣减 Redis 缓存,同时向队列中发送一条扣减数据库库存的消息,异步进行数据库扣减,实现终一致性。
再比如用户评价,如果量太大,就可以把评价从同步写转为异步写,还有评价后会给一些奖励,也可以异步。
3. 多级降级
从距离用户远近的角度,可以分为以下3个层面:
页面JS降级开关
主要控制页面功能的降级,在页面中通过JS脚本部署来控制在适当时机开启/关闭开关。
接入层降级开关
在请求入口进行控制,请求进入后,会先进入接入层,例如 Nginx,在其中根据实际情况进行自动/人工降级。
接入层的控制功能是很强大的,可以实现秒级切换、增量式切换(按照机器组开启)、细粒度服务开关、超时自动降级。
应用层降级开关
在应用中配置相应的功能开关,根据实际情况进行自动/人工降级。
作者:杜亦舒
节选:公众号:性能与架构
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。