1、微服务故障背景

假设Tomcat线程池有100个线程, 每次有新的用户请求过来,Tomcat就会从中找出一个空闲的线程去执行, 抛开那些琐碎的小细节,这些请求其实非常简单, 无非就是这么几件事:

  1. 根据用户ID调用用户服务, 获取用户对象。
  2. 获取该用户的推荐商品
  3. 获取该用户的积分。
  4. 把这些信息组合起来,返回给浏览器。

有意思的是前三件事情全是HTTP调用,需要调用某个地方的所谓“微服务”:

比如线程A执行到“推荐服务”时,推荐服务没有立刻返回,导致推荐服务挂起,随着新用户请求的增加,线程池被耗完,那么Tomcat只能“系统繁忙、暂停营业”。虽然重启可能暂时解决问题,但问题可能还会重现。

2 隔离

怎么把一个微服务的故障给隔离起来呢?让他们互不影响呢?

Netflix的程序员们想了一个点子, 对每个微服务,都分配一个线程池,像这样:

比如说调用“推荐服务”的时候,就会从“推荐服务线程池” (假设有5个线程)中找到一个线程执行。如果这个HTTP系统调用迟迟没有返回,那这个线程就会一直等待,新的请求就需用使用池中别的线程。

如果5个“推荐服务”线程被耗光,可以人为这个服务不可用,需立即返回。

 这些新的线程池,是一种隔离的手段, 一个微服务一旦出了问题,很快就会被识别出来

3 熔断

所以Netflix的程序员又想了一个办法:使用熔断器(也叫断路器),注意:当这个熔断器关闭的时候,外面的请求可以直接调用,如果打开,就把外界的请求给阻断了。

具体的做法:系统会检测请求失败的比率(失败数/总请求数), 一旦这个比率达到一个阈值的时候,熔断器就开启, 直接拒绝执行用户请求。然后休眠一段时间,尝试放过一部分流量(比如一个请求),如果调用成功,熔断器闭合,恢复到正常状态,否则继续进行休眠周期。

熔断机制状态转移图如下:

主要在三种状态中转换:
关闭状态 :当熔断器处于关闭状态时,请求是可以被放行的; 
                   当熔断器统计的失败次数触发开关时,转为打开状态。
打开状态 :当熔断器处于打开状态时,所有请求都是不被放行的,直接返回失败; 
                   只有在经过一个设定的时间窗口周期后,熔断器才会转换到半开状态
半开状态 :当熔断器处于半开状态时,当前只能有一个请求被放行; 
                   这个被放行的请求获得远端服务的响应后,假如是成功的,熔断器转换为关闭状态,否则转换到打开状态。

微服务的隔离和熔断机制相关推荐

  1. 聊聊微服务的隔离和熔断

    今天来聊一聊微服务的隔离和熔断是怎么做的, 如果你的项目没有用微服务,不要走开,可以看看对一个问题的解决思路. 假设Tomcat线程池有100个线程, 每次有新的用户请求过来,Tomcat就会从中找出 ...

  2. 微服务架构下的熔断框架:hystrix-go

    伴随着微服务架构被宣传得如火如茶,一些概念也被推到了我们的面前.一提到微服务,就离不开这几个字:高内聚低耦合:微服务的架构设计最终目的也就是实现这几个字.在微服务架构中,微服务就是完成一个单一的业务功 ...

  3. 微服务之Hystrix降级熔断

    前言 分布式系统面临的问题-----服务雪崩 多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,这就是所谓的"扇出".如果扇出的链 ...

  4. 「微服务系列 13」熔断限流隔离降级

    我们知道微服务分布式依赖关系错综复杂,比方说前端的请求转化为后端调用的服务请求,一个前端请求会转为成很多个后端调用的服务请求,那么这个时候后台的服务出现不稳定或者延迟,如果没有好的限流熔断措施,可能会 ...

  5. c3p0 服务启动获取连接超时_微服务架构中的熔断、降级

    微服务架构中熔断和降级是保证服务高可用的一项重要功能点,微服务区别于一体化项目的最大区别也再于熔断和降级,很多微服务项目的开发人员对熔断的理解就是当服务不可用的时候,为了让整体服务可以正常运行,需要让 ...

  6. 使用 KubeSphere 轻松实现微服务灰度发布与熔断

    KubeSphere®️ 是在目前主流容器调度平台 Kubernetes 之上构建的企业级分布式多租户容器管理平台,提供简单易用的操作界面以及向导式操作方式,在降低用户使用容器调度平台学习成本的同时, ...

  7. Sentinel微服务限流、熔断、降级介绍(一)

    概述 在互联网应用中,会有很多突发性的高并发访问场景,比如双11大促.秒杀等.这些场景最大的特点就是访问量会远远超出系统所能够处理的并发数. 在没有任何保护机制的情况下,如果所有的流量都进入服务器,很 ...

  8. hystrix熔断和降级的区别_Ribbon+Hystrix断路器实现微服务的降级和熔断

    微服务宕机时,Ribbon无法实现转发请求,因此引入Hystrix. Hystrix短路器的核心功能: 降级: 当后台微服务不可用或访问超时时,则转向执行降级代码,或返回错误信息,或返回缓存数据; 熔 ...

  9. .Net Core 微服务使用Polly实现熔断、降级、超时、重试

    说明: 1.Polly官网:http://www.thepollyproject.org/ 2.Polly安装:Nuget Microsoft.Extensions.Http.Polly 熔断:熔断开 ...

最新文章

  1. Python之tushare:tushare库的简介、安装、使用方法之详细攻略
  2. sql server agent会自动关闭_车用自动灭火器(装置)国内超细干粉自动灭火装置技术对比_搜狐汽车...
  3. grep搜索子目录中包含某字符串的特定文件
  4. 导入工程后 报错 The import javax.faces cannot be resolved 解决办法
  5. dwz ajax session超时跳转登录页(struts2自定义阻碍器)
  6. Linux driver 板级文件跟踪一般方法
  7. GRIDVIEW 中当数据行数未满时,填充空白行
  8. 找电影最强攻略,最全资源站
  9. 力扣36.有效的数独
  10. 5G新方案!升级现有的基站和UE模拟器至5G毫米波频段
  11. matlab设置三维图等高线,MATLAB --三维图形等高线
  12. 德州农工大学计算机硕士申请,德州农工大学硕士申请
  13. MySQL表的四种分区类型
  14. Python数据分析案例17——电影人气预测(特征工程构建)
  15. win10蓝屏提示重新启动_神器 | 那些好用到爆的win10修复优化软件,一键解决你的麻烦(一)...
  16. Html中img自带属性有哪些,HTMLIMG标签的属性是有哪些?了解IMG标签的用法
  17. 微信支付失败中关于“签名错误”的解决方案
  18. 英语语法之搞定简单句
  19. CPU内核部件之:MMU、MPU、ITCM、DTCM、CCM、Cache
  20. 许家印的新战略 恒大的新未来

热门文章

  1. 十进制转二进制 / 八进制 / 十六进制的手算方法,及其数学原理的通俗解释
  2. Swift网络开发之NSURLSession学习笔记
  3. oracle日期函数函数,Oracle日期函数
  4. 抛物型方程向前差分matlab,(整理)微分方程数值解(学生复习题).
  5. linux php -r,了解Linux
  6. mysql strict_mysql 严格模式 Strict Mode说明(转)
  7. 求和oracle 的sql,oracle 利用 分组求和一张报表的 字段 金额 sql
  8. 【资料整理】squid安装和配置代理上网
  9. CSS兼容性解决方法!important的IE7,Firefox问题
  10. 子元素应该margin-top为何会影响父元素【转】