左耳听风
陈皓
网名“左耳朵耗子”,资深技术专家
180928 人已学习
新⼈⾸单¥98
登录后,你可以任选6讲全文学习
课程目录
已完结/共 119 讲
左耳听风
15
15
1.0x
00:00/00:00
登录|注册

50 | 弹力设计:降级设计

降低数据的一致性
使用异步简化流程
简化功能
停止次要的功能
降低一致性
缓存设计
熔断设计
限流设计
降级设计
性能设计篇
管理设计篇
弹力设计篇

该思维导图由 AI 生成,仅供参考

你好,我是陈皓,网名左耳朵耗子。
所谓的降级设计(Degradation),本质是为了解决资源不足和访问量过大的问题。当资源和访问量出现矛盾的时候,在有限的资源下,为了能够扛住大量的请求,我们就需要对系统进行降级操作。也就是说,暂时牺牲掉一些东西,以保障整个系统的平稳运行。
我记得我在伦敦参与诺丁山狂欢节的时候,以及看阿森纳英超足球比赛的时候,散场时因为人太多,所有的公交系统(公交车,地铁)完全免费,就是为了让人通行得更快。而且早在散场前,场外就备着一堆公交车和地铁了,这样就是为了在最短时间内把人疏散掉。
虽然亏掉了一些钱,但是相比因为人员拥塞造成道路交通拥塞以及还可能出现的一些意外情况所造成的社会成本的损失,公交免费策略真是很明智的做法。与此类似,我们的系统在应对一些突发情况的时候也需要这样的降级流程。
一般来说,我们的降级需要牺牲掉的东西有:
降低一致性。从强一致性变成最终一致性。
停止次要功能。停止访问不重要的功能,从而释放出更多的资源。
简化功能。把一些功能简化掉,比如,简化业务流程,或是不再返回全量数据,只返回部分数据。

降低一致性

我们要清楚地认识到,这世界上大多数系统并不是都需要强一致性的。对于降低一致性,把强一致性变成最终一致性的做法可以有效地释放资源,并且让系统运行得更快,从而可以扛住更大的流量。一般来说,会有两种做法,一种是简化流程的一致性,一种是降低数据的一致性。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

分布式系统设计模式中的弹性设计是确保系统在资源不足和访问量过大的情况下依然能够平稳运行的关键策略。其中,降级设计是重要的一环,通过牺牲一致性、停止次要功能和简化功能来应对突发情况。降低一致性可以通过异步简化流程和降低数据一致性来释放资源,例如将支付方式降级为用户到付。停止次要功能和简化功能也是有效策略,可以通过限制流量或退化功能来减轻系统压力。在降级设计中,需要明确定义关键条件和应急预案,并在事前设计好简化的业务流程。降级功能的开关可以通过系统配置或API区分来实现,同时需要进行演练以确保降级功能的稳定性。文章提供了丰富的实例和策略,为读者深入了解分布式系统设计模式中的弹性设计提供了有益的参考。 总的来说,本文强调了弹性设计在分布式系统中的重要性,特别是降级设计在保障系统稳定性方面的关键作用。通过牺牲一致性、停止次要功能和简化功能来应对突发情况,可以有效减轻系统压力,确保系统平稳运行。读者可以从本文中学习到丰富的实例和策略,为自己的系统设计提供有益的参考。 文章还提到了降级设计的要点,包括明确定义关键条件和应急预案,事前设计好简化的业务流程,以及通过系统配置或API区分来实现降级功能的开关,并进行演练以确保降级功能的稳定性。这些要点为读者提供了实际操作的指导,帮助他们在实际系统设计中更好地应用弹性设计的理念。 总的来说,本文内容丰富,涵盖了弹性设计中的关键概念和实际操作要点,对于想要深入了解分布式系统设计模式中的弹性设计的读者来说,是一篇非常有价值的文章。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《左耳听风》
新⼈⾸单¥98
立即购买
登录 后留言

全部留言(23)

  • 最新
  • 精选
  • 丁英才
    耗子叔的文章给人行云流水之感,每篇文章从核心介绍,应用场景,分例介绍,架构补图到篇末小节,不仅详略得当,而且读起来感觉畅快。最近响应耗子叔号召,重温基础 tcp/ip 详解,书是好书但没有畅快的感觉。耗子叔要不按你风格写本基础的书,会帮助更多的人

    作者回复: 谢谢。TCP/IP的,我写在CoolShell上了

    2018-03-23
    13
  • 徐卫
    从代码层面,是不是要写两套,分别针对正常情况和降级后?

    作者回复: 一般来说不需要两套,用开关控制就好。

    2018-03-22
    2
  • 我们现在的降级分为功能降级和服务降级。我们目前将降级开关放到配置中心。 一、功能降级 1、通过降级开关控制功能可用不可用,一般为页面和按钮 2、简化业务操作流程,当降级后简化业务操作步骤,快速完成业务操作 二、服务降级 1、读降级,降级前会读缓存,缓存中不存在的话读数据库,降级后读缓存,缓存中不存在的话,返回默认值,不再读数据库 2、写降级,将之前的同步写数据库降级为先写缓存,然后异步写库 3、服务调用降级,之前两个系统模块通过mq来交互,当mq消息积压或mq宕机出问题后,降级为服务直接调用
    2018-06-09
    3
    33
  • 关于降级突然想到了生活中一个类似降级的场景: 现在小饭馆都支持网上订餐,当餐厅内客人不多的时候,餐厅老板或者服务员会去出去送餐,而当餐厅内客户突然增多,服务员忙不过来的时候,一般会进行降级,降级的策略是将外卖配送交给第三方来配送,或者在某个时间段内暂不支持网上订餐,这种情况类似于功能降级。还有一个场景就是关于餐厅炒菜,当餐厅内食客少的时候,大厨一般会现点现炒,而当食客多忙不过来的时候,一般会提前将菜炒好,客人点完就可以吃到,将热菜降级为快餐,这种情况类似于服务降级。纯属个人理解,如有不妥,还请见谅。
    2018-06-09
    4
    21
  • 小布
    抖音的一些降级策略: - 敏感日期时,推荐列表只从固定视频池中生成,而不会从全量数据池中生成,以降低风险 - 春晚活动时,会在短时间内有大量视频发出,审核是肯定接不过来的,不过考虑到很多视频用户发完后会短时间内删除,所以一个采取的降级策略是,视频发完后进入审核队列,但该队列延迟审核,等到10min后,再过审。这样可以剔除一批已软删的视频。
    2023-06-12归属地:上海
    3
  • 你为啥那么牛
    我在想,现在很多人写代码,并没有很好的对业务功能隔离。就是那种面条式的写法,如果一旦业务量大增。即使做功能降级,都不好处理。因为里面有数不清的依赖。
    2020-10-28
    3
  • Sdylan
    降级设计 1.为什么要降级设计 面对突发流量递增,系统压力过大,在有限资源下,为了防止系统崩溃,保证系统的可用性。牺牲掉一些不次要功能。 2.如何要做降级设计 从三个角度来设计,减弱一致性(保证数据最终一致性)、停止次要功能(保证核心功能可用)、简化功能(减少数据量显示)。降级代码或者配置最好能够自动化。
    2020-01-07
    3
  • 文刂 氵共 超
    坚持学习,学习笔记 https://mubu.com/colla/46SaxSvAwbM
    2019-12-26
    2
  • escray
    降级设计,解决资源不足和访问量过大的问题。 降级的策略 1. 降低一致性:使用异步简化流程,降低数据一致性 2. 停止次要功能:限制流量,退化功能,停止功能 3. 简化功能: 降级和限流都需要事前对业务做出梳理,确定那些是 must-have,需要事前设计好,而且最好都有可配置的开关。 看到留言里面,可以把降级分为功能降级和服务降级,受教了。 有一点好奇,如果在最开始设计的时候,感觉系统不会出现资源不足或者访问量过大的时候,比如内部系统,是否还需要考虑降级设计? 顺路去看了一下《缓存更新的套路》,发现是 2016 年的文章,但是现在看起来也毫不过时。 * Cache Aside * Read/Write Through * Write Behind Caching 多一些套路,少一些轮子 其实主要的问题还是眼界。
    2023-03-20归属地:北京
    1
  • Geek_fb3db2
    能够多一些实战以及具体的落地方式就更好了 感觉理论比较重
    2018-11-19
    1
    1
收起评论
显示
设置
留言
23
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部