Version: Next
Hystrix 概述
分布式系统面临的问题
- 复杂分布式体系结构中,应用程序之间有数十个上百个依赖关系,每个依赖关系都会在某些时刻不可避免的出现失败
- 扇出效应:多个微服务之间调用时,
A
调用了B
和C
,B
和C
又调用了其他微服务,以此类推- 服务雪崩:扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务
A
的调用就会占用越来越多的系统资源,进而引起系统崩溃
- 对于高流量的引用而言,单一后端依赖可能导致所有服务器上的所有资源都在几分钟内饱和
- 比失败更糟糕的是,这些应用程序还可能导致服务之间的延迟增加,备份队列,线程和其他系统资源紧张,导致整个系统发生更多级联故障
- 需要对故障和延迟做隔离和管理,以防单个依赖关系的失败,导致整个系统崩溃
- 通常会发生某个模块下的某个实例失败后,模块依然在接收流量,并且还在调用其他模块,产生级联故障,称为雪崩
Hystrix
- 是一个用于处理分布式系统
延迟
和容错
的开源库- 在分布式系统中,许多依赖不可避免的会调用失败,比如超时、异常等
Hystrix
可以保证在一个依赖出现问题的情况下,不会导致整个服务失败,避免级联故障,以提高分布式系统的弹性断路器
:本身是一种开关装置,当某个服务单元发生故障后,通过断路器的故障监控(类似保险丝),向调用方返回一个符合预期的、可处理的备选响应(Fallback)
,而不是长时间的等待或抛出调用方无法处理的异常
- 保证了服务调用方的线程不会被长时间、不必要的占用
- 避免了故障在分布式系统中蔓延,甚至引发雪崩
重要概念
服务降级 Fallback
- “服务器忙,请稍后再试”,不让客户端等待并立刻返回一个友好提示
哪些情况会触发服务降级
- 程序运行异常
- 超时
- 服务熔断触发服务降级
- 线程池 / 信号量打满也会导致服务降级
服务熔断 Break
- 类比保险丝达到最大服务访问后,直接拒绝访问,拉闸限电,然后调用 服务降级 的方法返回友好提示
服务限流 Flowlimit
- 秒杀、高并发等操作,严禁一窝蜂拥挤,采用排队的方式,一秒钟进 N 个,有序进行,削峰