网站建设朋友圈广告语,南开天津网站建设,最新推广平台,账号seo是什么Hystrix作为一个容错组件#xff0c;本文从它的作用、熔断设计、工作流程和应用方面一一道来#xff0c;帮助大家了解如何使用。 1、什么是灾难性雪崩效应
要讲Hystrix#xff0c;我们就要讲一种场景#xff0c;在微服务架构中#xff0c;如果底层服务出现故障#xff0…
Hystrix作为一个容错组件本文从它的作用、熔断设计、工作流程和应用方面一一道来帮助大家了解如何使用。 1、什么是灾难性雪崩效应
要讲Hystrix我们就要讲一种场景在微服务架构中如果底层服务出现故障服务无法响应或者响应延迟其调用者等待时间会变长整个系统的性能就会下降此时如果有大量的请求涌入容器的资源就会被消耗掉从而导致所有服务瘫痪这就是灾难性雪崩效应本文主要讲使用Hystrix进行服务熔断来解决雪崩问题。 2、什么是Hystrix
Hystrix 是由 Netflix 开源的一个延迟和容错库用于隔离访问远程系统、服务和第三方库防止级联失败从而提升系统的可用性与容错性。 3、Hystrix的作用
1降级
当服务负载过高或出现故障、程序运行异常、超时、服务熔断触发服务降级、线程池/信号量打满等情况时可以对服务进行降级返回指定的托底数据提高用户体验。 2熔断
当请求失败率达到指定阈值服务会自动进行降级在指定的时间内调用方就不会访问提供方直接返回兜底数据从而避免程序不断的尝试可能失败的操作浪费资源。Hystrix提供快速失败和快速恢复的支持。 3隔离
隔离分为线程池隔离和信号量隔离。线程池隔离把请求分配给不同的资源的线程池让线程池创建线程去调用服务执行任务具体的线程数由线程池做限制而使用信号量真实的工作线程就是由我们自己创建的执行任务时通过信号量做一个数量的限制。 4限流
限流机制主要是提前对各个类型的请求设置最高的QPS阈值若高于设置的阈值则对该请求直接返回不再调用后续资源。 5运维监控
Hystrix 可以近乎实时地监控运行指标和配置的变化以便快速发现问题。 4、Hystrix的熔断设计
1熔断请求判断机制算法使用无锁循环队列计数每个熔断器默认维护10个bucket每1秒一个bucket每个blucket记录请求的成功、失败、超时、拒绝的状态默认错误超过50%且10秒内超过20个请求进行中断拦截。
2熔断恢复对于被熔断的请求每隔5s允许部分请求通过若请求都是健康的RT250ms则对请求健康恢复。
3熔断报警对于熔断的请求打日志异常请求超过某些设定则报警。 5、Hystrix工作流程
当调用出现错误时开启一个时间窗(默认 10秒)统计调用次数是否达到最小请求数 否即使请求全部失败也会重置统计信息重新开启一个时间窗是则统计失败的请求数占所有请求数的百分比判断是否达到阈值 如果达到则短路此时会开启一个活动窗口(默认5秒)每隔5秒Hystrix 会让一个请求通过如果调用成功重置断路器重新开始否则继续短路如果没有达到则重置断路器重新开始
流程图如下 6、Hystrix的应用
6.1 服务消费者
1添加pom依赖
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-hystrix/artifactId
/dependency
(2)启动类上加EnableHystrix注解
EnableHystrix
SpringBootApplication
public class TestConsumerApplication {public static void main(String[] args) {SpringApplication.run(TestConsumerApplication.class, args);}}
(3)添加HystrixCommand
RestController
public class HelloController {Reference(version1.0.0)private HelloService helloService;RequestMapping(/hello)HystrixCommand(fallbackMethod helloFallback, commandProperties {HystrixProperty(name HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_TIMEOUT_IN_MILLISECONDS, value 3000),HystrixProperty(name HystrixPropertiesManager.CIRCUIT_BREAKER_REQUEST_VOLUME_THRESHOLD, value 5),HystrixProperty(name HystrixPropertiesManager.CIRCUIT_BREAKER_SLEEP_WINDOW_IN_MILLISECONDS, value 6),HystrixProperty(name HystrixPropertiesManager.CIRCUIT_BREAKER_ERROR_THRESHOLD_PERCENTAGE, value 45)})public String hello() {return helloService.getHello();}public String helloFallback() {return fallback,hello;}
}
注fallbackMethod方法对应的入参和返回值和原方法一致。 4 注解HystrixProperty的name取值
circuitBreaker.enabled是否打开熔断 默认开启circuitBreaker.requestVolumeThreshold当在配置时间窗口内失败请求数达到设定的值会触发熔断策略。默认是10s中20个失败请求触发熔断。execution.isolation.thread.timeoutInMilliseconds时间窗口长度默认10s即circuitBreaker.requestVolumeThreshold的时间单位circuitBreaker.sleepWindowInMilliseconds熔断多久后开始尝试是否恢复默认5s在这5s内直接调用fallback方法不会请求远程服务。circuitBreaker.errorThresholdPercentage一定时间窗口内出错请求达到设置的百分比值触发熔断策略默认为50%。 6.2 服务提供者
1添加pom依赖
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-hystrix/artifactId
/dependency
(2)启动类上加EnableHystrix注解
EnableHystrix
SpringBootApplication
public class TestApplication {public static void main(String[] args) {SpringApplication.run(TestApplication.class, args);}}
(3)方法上加HystrixCommand
Service(version 1.0.0, interfaceClass HelloService.class)
public class HelloServiceImpl implements HelloService{HystrixCommandOverridepublic String getHello() {return provider, hello;}
}