Hystrix简介
背景
在微服务架构的分布式系统中,众多微服务有复杂的依赖关系,这些依赖在某些情况下不可避免的会出现一些请求失败。当一个依赖由于延迟高出现阻塞,调用该依赖的服务线程就会发生排队阻塞。如果这个时候出现大量的业务流量打过来,就可能会出现服务器资源被消耗殆尽导致服务宕机。
对于上图的情况,每个请求都占用了系统的CPU、内存、网络等资源,如果当前服务业务请求量较高,那么所有的服务资源会被快速消耗完毕,直至应用挂掉。
对于这种情况,就需要有一个服务的保护机制——服务隔离和熔断机制,当依赖应用出现问题,不会导致下游服务出现阻塞而导致一些列的雪崩效应。
Hystrix主要功能
服务隔离
服务隔离是给每一个服务分配一定的资源,超过这个资源范围变会直接释放资源,并不会占用其他服务的资源,以达到保护其他服务的目的。
Hystrix 提供了线程和信号量两种隔离方式,以减少不同服务之间资源竞争带来的相互影响。
服务熔断
服务熔断是在高并发下,如果达到一定的极限,流量如果超过了阈值后,直接拒绝访问,从而保护当前服务。
服务降级
高并发场景下,防止某一个用户在一直等待情况,比如当超过一直的阈值时长情况,直接 fallback 返回一个相对友好的提示。
请求缓存
请求缓存保证在一次请求中多次调用同一个服务提供者接口,在 cacheKey 不变的情况下,后续调用结果都是第一次的缓存结果,而不是多次请求服务提供者,从而降低服务提供者处理重复请求的压力。
请求合并
Hystrix 的请求合并用于应对服务器的高并发场景,通过合并多个请求,减少线程的创建和使用,降低服务器请求压力,提高在高并发场景下服务的吞吐量和并发能力。
快速开始
Maven配置
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
项目启动类添加注解 @EnableCircuitBreaker
package com.venky.hystrix;
import org.springframework