雪崩效应:微服务架构的应用系统通常包含多个服务层。微服务之间通过网络进行通信,从而支撑起整个应用系统,因此,微服务之间难免存在依赖关系。任何微服务都并非100%可用,网络往往也很脆弱,因此有些请求会失败。我们常把”基础服务故障“导致”级联故障“的现象称为雪崩效应,雪崩效应描述的是提供者不可用导致消费者不可用,并将不可用逐渐放大的过程。
雪崩效应形成过程如上图所示,服务A作为服务提供者(基础服务),B作为A的消费者,C和D是B的消费者,服务A的不可用引起了b的不可用,并将不可用像雪球放大到C和D,雪崩效应就形成了。
防止雪崩效应的方法:容错机制,该容错机制需要实现以下两点
- 为网络请求设置超时:为每个网络请求设置超时,让资源尽快释放
- 使用断路器模式:断路器可以理解为对容易导致错误的操作的代理,这种代理能够统计一段时间内调用失败的次数,并决定是正常请求依赖的服务还是直接返回。断路器的状态转换如下图所示
Hystrix简介
Hystrix是一个实现了超时机制和断路器模式的工具类库,用于隔离访问远程系统、服务或者第三方库,防止级联失败,从而提供系统的可用性和容错性,Hystrix主要通过以下几点市场延迟和容错。
- 包裹请求:使用hystrixCommand包裹对依赖的调用逻辑,每个命令在独立线程中执行,这使用到了设计模式中的命令模式
- 跳闸机制:当某个服务的错误率超过一定阈值时,Hystrix可以自动或者手动跳闸,停止请求该服务一段时间
- 资源隔离:Hystrix为每个里来都维护了一个小型的线程池(或者信号量),如果该线程池已经满了,发送往该依赖的请求被立即拒绝,而不是排队等候,从而加速失败判定。
- 回退机制:当请求失败、超时、被拒绝,或当断路器打开时,执行回退逻辑。
- 自我修复:断路器打开一段时间后,会自动进入半开状态。
Hystrix整合,项目为microservice-consumer-movie-ribbon-hystrix