Version: Next

Hystrix 概述

分布式系统面临的问题

  • 复杂分布式体系结构中,应用程序之间有数十个上百个依赖关系,每个依赖关系都会在某些时刻不可避免的出现失败
  • 扇出效应:多个微服务之间调用时,A 调用了 BCBC 又调用了其他微服务,以此类推
  • 服务雪崩:扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务 A 的调用就会占用越来越多的系统资源,进而引起系统崩溃
    • 对于高流量的引用而言,单一后端依赖可能导致所有服务器上的所有资源都在几分钟内饱和
    • 比失败更糟糕的是,这些应用程序还可能导致服务之间的延迟增加,备份队列,线程和其他系统资源紧张,导致整个系统发生更多级联故障
    • 需要对故障和延迟做隔离和管理,以防单个依赖关系的失败,导致整个系统崩溃
    • 通常会发生某个模块下的某个实例失败后,模块依然在接收流量,并且还在调用其他模块,产生级联故障,称为雪崩

Hystrix

  • 是一个用于处理分布式系统 延迟容错 的开源库
  • 在分布式系统中,许多依赖不可避免的会调用失败,比如超时、异常等
  • Hystrix 可以保证在一个依赖出现问题的情况下,不会导致整个服务失败,避免级联故障,以提高分布式系统的弹性
  • 断路器:本身是一种开关装置,当某个服务单元发生故障后,通过断路器的故障监控(类似保险丝),向调用方返回一个符合预期的、可处理的 备选响应(Fallback),而不是长时间的等待或抛出调用方无法处理的异常
    • 保证了服务调用方的线程不会被长时间、不必要的占用
    • 避免了故障在分布式系统中蔓延,甚至引发雪崩

重要概念

服务降级 Fallback

  • “服务器忙,请稍后再试”,不让客户端等待并立刻返回一个友好提示

哪些情况会触发服务降级

  • 程序运行异常
  • 超时
  • 服务熔断触发服务降级
  • 线程池 / 信号量打满也会导致服务降级

服务熔断 Break

  • 类比保险丝达到最大服务访问后,直接拒绝访问,拉闸限电,然后调用 服务降级 的方法返回友好提示

服务限流 Flowlimit

  • 秒杀、高并发等操作,严禁一窝蜂拥挤,采用排队的方式,一秒钟进 N 个,有序进行,削峰