19系统中的降级熔断设计

青年是学习智慧的时期,中年是付诸实践的时期。

—— 卢梭

引言

稳定性设计第一篇:在分布式系统下,线上的某一个功能按钮背后会有很多个服务共同完成,这些服务之间有依赖关系,且有一定的顺序调用。那么这些服务如果其中有一个环节出现问题,会带来一些连锁反应。

比如,突如其来的流量,部分服务突然宕机,你能想到的故障都算故障,是不是整个服务都不可用了吗?作为开发者肯定不希望这样的事情发生,那么有哪些解决问题?思路就是尽量给每个服务找一个“备胎” ,这个“备胎”不是集群概念里一个备用机器 ,而是一种备用方案

1.面试官:你对你负责的系统做了哪些提高可用性的设计?

问题分析:

稳定性设计三把斧:降级、熔断和限流。即使你没用过,也可以完全根据我描述的场景再结合自己的项目编造一个。

我:

这个问题很好理解,举个例子:比如外卖订单服务,假设美团外卖订单系统,系统日常QPS 在 1000 左右(这里我拍脑袋假设,实际远高于1000),可能受天气影响或者是否工作日,QPS 会上下浮动,为1000 - 2000之间。

假设线上系统设计时最多能承受2000 QPS,正常会发生的突发情况单量增多都能承受,突然有那么一天,你的竞争对手饿了么宕机了,用户无法使用都蜂拥而至来美团下单,这个时候QPS 变成了 3000,系统扛不住 3000 的QPS怎么办?用户都卡在提交订单的页面,谁也下不了单。那么如何有效解决这个问题?这个时候就要想到“备胎”方案,尝试以下优化思路。

  1. 流量控制:也就是限流,限流包括单机限流和集群限流,订单系统某一环节加一个开关,好比地铁进站口,人多要排队,保证流量持续进入,而不是撑破服务器大家都无法使用,比如将系统QPS控制在最高2000,后面的 1000 用户告诉他“系统繁忙,请稍后再试”,这样一来无非就是多点几下或者等几分钟,你还能吃上饭。
  2. 降级备案:比如商品列表查询,默认查询的是 Redis 集群,各种故障赶在一起,Redis 所有集群都挂了不能用了,这个时候怎么办,设计一个备胎 Elasticsearch,查询速度可能没 Redis 快,但好歹备胎还能用。
  3. 熔断: 这个可以理解成家庭电路中的保险丝,电流有异常后自动开启熔断保护,系统流量也同样原理。

举例: 我对公司内部订单查询系统做的优化,订单查询是运营人员每天都要使用的功能,一定要保证服务可用,还要迅速响应,为了解决这个问题,我使用了ES作为查询主库,如ES故障,系统会自动降级到MySQL查询,完美解决了性能和可用性的问题。

(有了上面这个例子,面试官对我在系统可用性方面的设计能力放心多了。)

Tip: 说了这么多不如直接看看图形界面,限流到底是怎么用的,举个例子,我负责的一个接口,限流参数设置是这样的。


这是限流功能做成页面可视化系统以后,看看红色框备注和提示如何设置限流,是不是so easy,使用开源的 Hystrix 也能解决此类问题。

总结

这一节的内容不多,最重要的是要知道系统稳定性设计还有三把斧:降级、熔断和限流,内容并不难,重要的是你要有这个意识,你能做到让系统全年不故障持续提供服务,领导把这事儿交给你放心,offer不是你的是谁的?

更多关于限流、降级、重试的设计与使用,推荐张开涛的《亿级流量网站架构核心技术》。

参考资料

https://github.com/Netflix/Hystrix/wiki

https://github.com/resilience4j/resilience4j

https://github.com/alibaba/Sentinel

面试精讲之面试考点及大厂真题 - 分布式专栏 19 系统中的降级熔断设计相关推荐

  1. 面试精讲之面试考点及大厂真题 - 分布式专栏 13项目中为什么要使用消息队列

    13项目中为什么要使用消息队列 学习从来无捷径,循序渐进登高峰. -- 高永祚 引言 上个章节把Redis夺命连环问掰扯完,面试还没有结束,消息队列同样是面试中必问的,分布式构建三把斧:缓存+异步+数 ...

  2. 面试精讲之面试考点及大厂真题 - 分布式专栏 21 限流不能乱用-系统限流最佳实践

    21 限流不能乱用-系统限流最佳实践 没有引发任何行动的思想都不是思想,而是梦想. -- 马丁 引言 19.20小节讲了系统中的降级熔断设计和对 Hystrix 组件的功能了解,关于限流降级还有一个比 ...

  3. 面试精讲之面试考点及大厂真题 - 分布式专栏 23 分布式系统下分布式锁的实现

    23 分布式系统下分布式锁的实现 困难只能吓倒懦夫懒汉,而胜利永远属于敢于等科学高峰的人. --茅以升 引言 锁是开发过程中十分常见的工具,你一定不陌生,悲观锁,乐观锁,排它锁,公平锁,非公平锁等等, ...

  4. 面试精讲之面试考点及大厂真题 - 分布式专栏 01 开篇词:我是怎样带你通过大厂面试

    01 开篇词:我是怎样带你通过大厂面试 自信和希望是青年的特权. --大仲马 学习编程是一场修行,要经历从 0 到 1,普通人从自己的错误中学习,聪明人从别人的错误中学习. 授人以鱼不如授人以鱼杆儿, ...

  5. 面试精讲之面试考点及大厂真题 - 分布式专栏 18 谈谈怎么理解幂等,接口如何保证幂等

    18谈谈怎么理解幂等,接口如何保证幂等 时间像海绵里的水,只要你愿意挤,总还是有的. --鲁迅 引言 稳定性设计第一篇:这一小节开始讲设计系统稳定性保证的相关设计,谁都不想自己负责的系统三天两头就出故 ...

  6. 面试精讲之面试考点及大厂真题 - 分布式专栏 07 说一说什么是正向代理,反向代理

    07 说一说什么是正向代理,反向代理 世界上最快乐的事,莫过于为理想而奋斗. --苏格拉底 引言 05小节面完了RPC相关的一系列问题,面试官确定我对分布式架构的理论知识和服务间通讯框架(RPC) 确 ...

  7. 面试精讲之面试考点及大厂真题 - 分布式专栏 06 详细说下CAP分别代表什么含义吗

    06详细说下CAP分别代表什么含义吗 合理安排时间,就等于节约时间. --培根 引言 上一节讲面试中被问到分布式系统概念相关的,讲完了分布式系统的概念,优点缺点和 RPC 后,我以为这个问题就到此结束 ...

  8. 面试精讲之面试考点及大厂真题 - 分布式专栏 02 了解大厂面试基本套路及每一轮的重点

    02 了解大厂面试基本套路及每一轮的重点 自信和希望是青年的特权. --大仲马 引言 无论是刚刚毕业的学生,还是刚刚工作一两年面试经验比较少的同学,往往会比较困惑该如何准备面试.面对至少三轮面试(或更 ...

  9. 面试精讲之面试考点及大厂真题 - 分布式专栏 17 ElasticSearch解决大数据量检索难题

    17 ElasticSearch解决大数据量检索难题 理想的书籍是智慧的钥匙. --列夫·托尔斯泰 引言 如果你的项目里有超过千万上亿级别的数据,且数据日增量较大需要高性能检索时,如订单数据,你该怎么 ...

最新文章

  1. java 校验姓名只能包含中英文_java代码验证用户名,支持中英文(包括全角字符)、数字、下划线和减号 (全角及汉字算两位),长度为4-20位,中文按二位计数...
  2. 集合拷贝通用方法、list<A> 转换成 list<B> (属性相同)
  3. TensorFlow2.0(五)--Keras构建Wide Deep模型
  4. ruhe anzjhuang mysql_Mysql配置安装过程
  5. 动态规划基础——爬楼梯(Leetcode 70)
  6. 12.混淆——采样低频信号,采样高频信号_3
  7. Android组件系列-----Activity保存状态
  8. 《玩转Python轻松过二级》配套视频免费观看地址
  9. 数字后端基本概念介绍——Routing Blockage
  10. 电机与拖动课程最全思维导图笔记
  11. 74HC595 的使用
  12. 记一次搜狐畅游后台开发笔试
  13. Python时间包datetime的使用
  14. Microsoft office 2013找不到igx.dll解决方案
  15. Linux下运行robot,Robot Framework-Unix和Linux安装
  16. 群辉中使用私有Docker Registry
  17. 山西省高中计算机考试要点,(山西省普通高中信息技术学业水平考试标准.doc
  18. 开放银行中国实践探索
  19. 希沃集控系统流媒体服务器未开启,希沃集控 | 轻松掌控区域信息化情况
  20. 【经验】安全岗实习生应聘

热门文章

  1. Spring Boot集成Redis缓存之注解方式
  2. google ads 黑名单目录
  3. 必须掌握的八个cmd命令行
  4. 通过IHttpHandlerFactory,过滤TextBox、Input和Textarea中的特殊字符
  5. jquery mobile : 外链接失效 a href not working
  6. Javascript中暂停功能的实现
  7. php thumb 生成缩略图
  8. Python_模拟登录(爬取教务系统信息并制作查询界面)
  9. python——Tkinter图形化界面及threading多线程
  10. Linux——分区时出现This partition should be marked for use as an EFI boot partition