微服务容灾组件:Hystrix 介绍

举报
溜溜丽 发表于 2021/08/04 22:59:45 2021/08/04
【摘要】 在分布式系统下,微服务之间不可避免地会发生相互调用,但是没有一个系统能够保证自身运行的绝对正确性,微服务在调用过程中,很可能会面临被依赖服务失效的问题,这些问题的发生有诸多情况,有可能是因为微服务之间的网络通信出现较大的延迟、又或者是被依赖的微服务抛出了调用异常、还有可能是因为被依赖的微服务负载过大无法及时响应请求等等原因。本系列文章将会介绍 Hystrix 的相关使用与原理。Hystrix...

在分布式系统下,微服务之间不可避免地会发生相互调用,但是没有一个系统能够保证自身运行的绝对正确性,微服务在调用过程中,很可能会面临被依赖服务失效的问题,这些问题的发生有诸多情况,有可能是因为微服务之间的网络通信出现较大的延迟、又或者是被依赖的微服务抛出了调用异常、还有可能是因为被依赖的微服务负载过大无法及时响应请求等等原因。本系列文章将会介绍 Hystrix 的相关使用与原理。

Hystrix 作为Netflix的一个开源项目,能够使系统在出现依赖服务失效的情况下,通过隔离系统依赖服务的方式,防止服务级联失败,同时提供失败回滚机制,使系统能够更快地从异常中恢复。

spring-cloud-netflix-hystrix对Hystrix进行封装和适配,使Hystrix能够更好地运行于spring-cloud环境中,为微服务之间调用提供强有力的容错机制,防止服务雪崩效应的发生。

Hystrix被设计用来

  1. 在通过第三方客户端访问(通常是通过网络)依赖服务出现高延迟或者失败时,为系统提供保护和控制
  2. 在复杂的分布式系统中防止级联失败(服务雪崩效应)
  3. 快速失败(Fail fast)同时能快速恢复
  4. 如果可能的话,提供失败回滚(Fallback)和优雅的服务降级机制
  5. 提供近实时的监控、报警和运维控制手段

spring-cloud-netflix-hystrix对Hystrix进行封装和适配,使Hystrix能够更好地运行于spring-cloud环境中,为微服务之间调用提供强有力的容错机制,防止服务雪崩效应的发生。
我们来看下如何使用spring-cloud-netflix-hystrix。

RestTemplate与Hystrix

可以通过IDEA快速搭建包含Hystrix依赖的SpringBoot项目。

添加eureka-clienthystrix的相关依赖:

<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 组件能够对通过第三方客户端(通常是通过网络)访问其他微服务时,对延迟和失败提供强大的容错能力,为系统提供保护和控制。接下来的文章将会介绍如何编写相关的服务。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。