微服务容灾组件:Hystrix 介绍
在分布式系统下,微服务之间不可避免地会发生相互调用,但是没有一个系统能够保证自身运行的绝对正确性,微服务在调用过程中,很可能会面临被依赖服务失效的问题,这些问题的发生有诸多情况,有可能是因为微服务之间的网络通信出现较大的延迟、又或者是被依赖的微服务抛出了调用异常、还有可能是因为被依赖的微服务负载过大无法及时响应请求等等原因。本系列文章将会介绍 Hystrix 的相关使用与原理。
Hystrix 作为Netflix
的一个开源项目,能够使系统在出现依赖服务失效的情况下,通过隔离系统依赖服务的方式,防止服务级联失败,同时提供失败回滚机制,使系统能够更快地从异常中恢复。
spring-cloud-netflix-hystrix对Hystrix进行封装和适配,使Hystrix能够更好地运行于spring-cloud环境中,为微服务之间调用提供强有力的容错机制,防止服务雪崩效应的发生。
Hystrix被设计用来
- 在通过第三方客户端访问(通常是通过网络)依赖服务出现高延迟或者失败时,为系统提供保护和控制
- 在复杂的分布式系统中防止级联失败(服务雪崩效应)
- 快速失败(Fail fast)同时能快速恢复
- 如果可能的话,提供失败回滚(Fallback)和优雅的服务降级机制
- 提供近实时的监控、报警和运维控制手段
spring-cloud-netflix-hystrix对Hystrix进行封装和适配,使Hystrix能够更好地运行于spring-cloud环境中,为微服务之间调用提供强有力的容错机制,防止服务雪崩效应的发生。
我们来看下如何使用spring-cloud-netflix-hystrix。
RestTemplate与Hystrix
可以通过IDEA快速搭建包含Hystrix依赖的SpringBoot项目。
添加eureka-client
、hystrix
的相关依赖:
<dependency> // eureka-client相关依赖
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>// hystrix相关依赖
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
在application.yaml
中为eureka-client
配置注册中心地址:
# application.yml
eureka:
instance:
instance-id: ${spring.application.name}:${vcap.application.instance_id:${spring.application.instance_id:${random.value}}}
client:
service-url:
default-zone: http://localhost:8761/eureka/
spring:
application:
name: hystrix-service
server:
port: 8876
这里的Eureka Server将使用Eureka中构建的Eureka Server项目。
通过@EnableCircuitBreaker
开启Hystrix,同时注入一个可以进行负载均衡的RestTemplate
:
@SpringBootApplication
@EnableCircuitBreaker // 开启Hystrix
@EnableDiscoveryClient
public class Chapter6HystrixApplication {
public static void main(String[] args) {
SpringApplication.run(Chapter6HystrixApplication.class, args);
}
// 注入可以进行负载均衡的RestTemplate
@Bean
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}
}
小结
本文主要介绍了 Hystrix 的基本功能。Hystrix 组件能够对通过第三方客户端(通常是通过网络)访问其他微服务时,对延迟和失败提供强大的容错能力,为系统提供保护和控制。接下来的文章将会介绍如何编写相关的服务。
- 点赞
- 收藏
- 关注作者
评论(0)