微服务容错限流Hystrix入门

  

为什么需要容错限流

  
      <李>复杂分布式系统通常有很多依赖,如果一个应用不能对来自依赖故障进行隔离,那么应用本身就处在被拖垮的风险中。在一个高流量的网站中,某个单一后端一旦发生延迟,将会在数秒内导致所有应用资源被耗尽(一个臭鸡蛋影响一篮筐)。   <李>如秒杀,抢购,双十一等场景,在某一时间点会有爆发式的网络流量涌入,如果没有好的网络流量限制,任由流量压到后台服务实例,很有可能造成资源耗尽,服务无法响应,甚至严重的导致应用崩溃。   
  

Hystrix是什么

  

Hystrix能使你的系统在出现依赖服务失效的时候,通过隔离系统所依赖的服务,防止服务级联失败,同时提供失败回退机制,更优雅地应对失效,并使你的系统能更快地从异常中恢复。

  

Hystrix能做什么

  
      <李>在通过第三方客户端访问(通常是通过网络)依赖服务出现高延迟或者失败时,为系统提供保护和控制李   <李>在分布式系统中防止级联失败李   <李>快速失败(快速失败)同时能快速恢复李   <李>提供失败回退(后备)和优雅的服务降级机制李   <李>提供近似实时的监控,报警和运维控制手段李   
  

Hystrix设计原则

  
      <李>防止单个依赖耗尽容器(例如Tomcat)内所有用户线程李   <李>降低系统负载,对无法及时处理的请求快速失败(快速失败)而不是排队李   <李>提供失败回退,以在必要时让失效对用户透明化李   <李>使用隔离机制(例如“舱壁”/坝尽钡滥J?熔断器模式等)降低依赖服务对整个系统的影响李   <李>针对系统服务的度量,监控和报警,提供优化以满足近似实时性的要求李   <李>在Hystrix绝大部分需要动态调整配置并快速部署到所有应用方面,提供优化以满足快速恢复的要求李   <李>能保护应用不受依赖服务的整个执行过程中失败的影响,而不仅仅是网络请求李   
  

Hystrix设计思想来源

  

舱壁隔离模式

  

货船为了进行防止漏水和火灾的扩散,会将货仓分隔为多个,当发生灾害时,将所在货仓进行隔离就可以降低整艘船的风险。

  

微服务容错限流Hystrix入门

  

断路器模式

  

熔断器就像家里的保险丝,当电流过载了就会跳闸,不过Hystrix的熔断机制相对复杂一些。

  

微服务容错限流Hystrix入门

  

熔断器开关由关闭到打开的状态转换是通过当前服务健康状况和设定阈值比较决定的。

  
      <李>当熔断器开关关闭时,请求被允许通过熔断器。如果当前健康状况高于设定阈值、开关继续保持关闭。如果当前健康状况低于设定阈值、开关则切换为打开状态。   <李>当熔断器开关打开时,请求被禁止通过。   <李>当熔断器开关处于打开状态,经过一段时间后,熔断器会自动进入半开状态,这时熔断器只允许一个请求通过。当该请求调用成功时,熔断器恢复到关闭状态。若该请求失败,熔断器继续保持打开状态,接下来的请求被禁止通过。   
  

Hystrix工作流程

  

官网原图

  

微服务容错限流Hystrix入门

  

中文版

  

微服务容错限流Hystrix入门

  

流程说明

  
      <李>每次调用创建一个新的HystrixCommand,把依赖调用封装在运行()方法中。   <李>执行execute()/队列做同步或异步调用。   <李>当前调用是否已被缓存,是则直接返回结果,否则进入步骤4李   <李>判断熔断器(断路器)是否打开,如果打开跳到步骤,进行降级策略,如果关闭进入步骤5   <李>判断线程池/队列/信号量是否跑满,如果跑满进入降级步骤,否则继续后续步骤6   <李>调用HystrixCommand的运行方法。运行依赖逻辑   
        <李> 6.1。调用是否出现异常,否:继续,是进入步骤,李   <李> 6.2。调用是否超时否:返回调用结果,是进入步骤8   李
      <李>搜集5、6步骤所有的运行状态(成功,失败,拒绝,超时)上报给熔断器,用于统计从而判断熔断器状态李

    微服务容错限流Hystrix入门