现在的web应用,基本上都会采用微服务架构,复杂的web应用系统中,会有几个甚至十几个微服务,应用系统在对外提供服务的背后,是很多个微服务相互依赖,相互协作完成的。每个微服务负责一个或多个功能的实现,通过对外暴露接口的形式,来实现自己的价值。正常情况下,多个微服务正常运行,在自己的工作岗位上,尽职尽责,对依赖自己的调用方,提供服务。但是,随着系统服务周期的增长,总会有某个,或者某几个服务出现不可用的情况,当一个服务出现了不可用,不仅自身无法对外提供服务,依赖自己的服务也会受到影响,变得不可用,一个服务的不可用,随着依赖关系的扩展,会导致更多的服务不可用,如果没有人工介入,可能会导致整个系统都会变得不可用。

在业务系统开发的过程中,要保证功能需求(这个是最基本的),非功能需求也要一定满足。否则,出现上了上面的问题,整个系统都不可用了,那么开发的功能需求,也就没有意义了。系统的可用性,是一个系统非功能需求中比较重要的指标。

在微服务系统架构中,保障系统可用性的常用手段,有以下三个:熔断,降级和限流。整体来说,这三者都是采用通过牺牲系统吞吐量,来防止问题扩大化的一种手段,通过人为让系统部分不可用的手段,来避免系统整体不可用的灾难,是一种丢卒保车,断尾求生的做法,三者都是为了完成这一目的,只不过实现过程中,侧重点不同而已。对这三者有了一个整体认识之后,我们再来看一下,三者的侧重点分别都是什么。

1)什么是熔断

熔断主要针对具体某个接口出现问题时,对这个接口采用的临时方案,它站在接口或者服务的层面来考虑问题。防止因为某个接口出现问题,导致问题蔓延,直至整个系统不可用。例如:某个接口的提供方宕机,导致接口调用方频繁超时,调用方的上游受到影响,进而也会超时,最终整个链路都会变得超时,如果超时时间很长的话,会导致客户端系统资源浪费(一些池化的资源,长时间得不到释放)。此时可以在接口的调用方进行对该接口的熔断,具体做法,可以直接返回一个默认值,防止频繁的调用超时。同时通过不断的对该接口进行可用性探测,当检测到该接口可用时,对熔断逻辑进行撤销,具体可以参考hystrix。

2)什么是降级

降级是系统应对突发流量的解决方案,它站在系统层面来考虑问题,目的是为了保证整个系统的可用性。因为受系统自身资源的限制,可以处理的流量是是有限的,不能对突发流量进行完全处理,那么此时就应该对流量进行有选择的处理,让系统只处理优先级高的流量,优先级低的流量不进行处理,直接返回默认值(或者其他处理策略),也就是对部分低优先级流量进行舍弃,例如,双十一期间,很多电商网站的评论,收藏功能变得不可用,这里就是系统为了保证网站核心功能可用,对评论和收藏功能进行了降级,将系统资源用在核心业务上,正所谓"好钢用在刀刃上"。

但是,这种方案为什么叫做"降级"呢?好像没有体现出"降级"的语义。其实降级,是站在整个系统维度来说的,举例来说:系统正常情况下,可以对外提供10个接口服务,在降级的情况下,只能对外提供5个接口服务,那么此时的系统,就是有"瑕疵"的系统,能够完整提供服务的系统,我们给系统打5星,现在系统中一部分功能不可用了,那么此时系统只能打3星,系统的"级别"有所下降了。

3)什么是限流

限流和降级所做的事情相似,也是站在系统层面来考虑问题,都是在系统遇到突发大流量所做的应急方案。为了保证系统不被大流量冲垮,降级所做的事情是对流量进行有选择的处理,让系统处理总流量中的一部分。这里的有选择,主要是按照流量的优先级进行选择的。而限流则是通过对流量进行采样,例如1000个请求,通过80%采样后,系统只处理其中的800个,剩下的200个,通过限流策略进行过滤,这里的过滤更强调无差别的过滤。

总体来说,熔断,降级和限流,是系统面对突发流量,限于自身系统资源不足的一种"无奈"的做法,是一种兜底方案,系统设计的时候一定要考虑这些兜底方案,但是最好不要用上,因为它会降低系统的可用性,所以在遇到大流量前,一定要做好容量评估。

啥?学习微服务,你竟然不知道什么是熔断,降级和限流相关推荐

  1. 熔断降级与限流在开源SpringBoot/SpringCloud微服务框架的最佳实践

    目录导读 熔断降级与限流在开源SpringBoot/SpringCloud微服务框架的最佳实践 1. 开源代码整体架构设计 2. 微服务逻辑架构设计 3. 微服务熔断降级与限流规划 3.1 微服务熔断 ...

  2. 微服务网关鉴权:gateway使用、网关限流使用、用户密码加密、JWT鉴权

    点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | ...

  3. 微服务网关鉴权:gateway使用、网关限流使用 用户密码加密 JWT鉴权

    目标 掌握微服务网关Gateway的系统搭建 掌握网关限流的实现 能够使用BCrypt实现对密码的加密与验证 了解加密算法 能够使用JWT实现微服务鉴权 1.微服务网关Gateway 1.1 微服务网 ...

  4. 初学者学习微服务 需要了解哪些知识?该如何入门微服务?有哪些优质的教程可以学习?

    前面一章节,我们学习了常用的网络通信协议,以及各自的优缺点,并做了一个较为全面的总结.这一章节,我们就来对微服务入门基础做一个准备,学习微服务,我们应该从哪些方面去学习.终于有人把tcp.http.r ...

  5. 【02】如何学习微服务

    一.学习微服务技术面临哪些问题? 也许你早就打算学习微服务技术,可是自己的公司业务规模小,接触不到先进的微服务架构技术:又或者面对五花八门的微服务开源框架,和各个大厂自研的黑科技技术,一时间不知道如何 ...

  6. 为什么说即便是新手,也应该学习微服务?

    微服务是当下非常火的话题,出门遇见同行,不会点微服务你可能都不好意思跟别人打招呼,企业的招聘信息中也越来越多地出现对于微服务架构能力的要求,不会点微服务找工作别说有优势了,先被别人落下一大截.可以说微 ...

  7. springcloud:什么是分布式微服务,如何学习微服务(一)

    0. 引言 随着网络建设的丰富和技术发展的增强,传统的单机架构已经不能满足日益递增的用户需求.学习微服务开发也成了当今java后端开发必须掌握的技术. 接下来的日子我们一起来学习微服务开发.在真正开始 ...

  8. 成小胖学习微服务架构·基础篇

    看到最近"微服务架构"这个概念这么火,作为一个积极上进的程序猿,成小胖忍不住想要学习学习.而架构师老王(不是隔壁老王)最近刚好在做公司基础服务的微服务化研究和落地,对此深有研究. ...

  9. 服务溶断、降级、限流

    服务熔断 在介绍熔断机制之前,我们需要了解微服务的雪崩效应.在微服务架构中,微服务是完成一个单一的业务功能,这样做的好处是可以做到解耦,每个微服务可以独立演进.但是,一个应用可能会有多个微服务组成,微 ...

  10. 服务溶断、降级、限流(1):概念

    服务熔断 在介绍熔断机制之前,我们需要了解微服务的雪崩效应.在微服务架构中,微服务是完成一个单一的业务功能,这样做的好处是可以做到解耦,每个微服务可以独立演进.但是,一个应用可能会有多个微服务组成,微 ...

最新文章

  1. U盘安装 CentOS 7
  2. python polygon函数_Python 人脸识别就多简单,看这个就够了!
  3. 汇编 DA A 十进制调整指令
  4. 【C语言】switch中无break的情况
  5. 服务器c盘大文件怎么查询,怎么查看c盘隐藏文件_怎么查看c盘的大文件
  6. em算法详细例子及推导_第九章-EM算法
  7. array_shift -- 将数组开头的单元移出数组
  8. 学习机软件测试,IBM P630 POWER4 AIX小型机适合软件测试及学习机
  9. 用php写圣诞祝福页面,圣诞祝福文案 抖音圣诞节一句话祝福
  10. repo打了 tag之后如何提交tag_技术开发者应该如何构建小团队的微服务方案?
  11. servlet 与 tomcat版本不匹配的问题
  12. 11.3.3 BINARY 和 VARBINARY 类型
  13. 在Qt中使用大漠插件示例(版本3.1233),包含下载、注册、使用教程
  14. 计算机 管理 mmc 注册表,win10注册表编辑器没有mmc怎么办_win10恢复注册表mmc文件夹的方法-win7之家...
  15. SpringBoot 中使用 网易邮箱 或 qq邮箱 发送信息
  16. selenium:如何模拟鼠标拖放(drag and drop)
  17. 那个丧心病狂的红蓝眼睛逻辑问题推理:第N天有N个红眼睛自杀,还是什么都不会发生?
  18. PCB板的绘制原来是这样完成的——布线
  19. 美团CAT客户端接入方式
  20. vue3 获取当前路由参数

热门文章

  1. 青玉案·元夕 【宋代】辛弃疾
  2. aria2 linux 编译,Centos 7 编译安装Aria2
  3. 14个面试中常见的概率问题
  4. Windows 环境变量工具 Evn
  5. uniapp的语音功能
  6. Python爬虫:盖楼抽奖还手动?自动的她不香吗?
  7. 汉洛塔问题(c解决)
  8. Vulcan 基于Meteor的APollO框架 , grapesjs 用于可视化生成Html 页面
  9. 字符间距加宽5磅怎么设置_word的字符间距加宽1period;2磅
  10. USB转串口芯片CH340G的使用,3.3V或5V供电电路