章节索引 :

Hystrix 服务容错与服务降级概念讲解与实操

1. 前言

在之前的几篇小节中,我们对 Hystrix 的集成和常用的配置项做了详细的讲解,这些内容是学习 Hystrix 基础中的基础,在介绍完这些基础内容之后,接着我们需要来对 Hystrix 所提供的各种特性进行介绍,这也是为什么在 Spring Cloud 微服务框架中使用 Hystrix 的原因。

本节会对 Hystrix 中首当其冲的特性 - 服务容错与服务降级,进行详细的介绍,包括基本概念的解释以及在 Spring Cloud 中实现服务容错与服务降级。

本节主要内容:

  • Hystrix 服务容错与服务降级概念剖析;

  • Hystrix 服务容错与降级实操。

2. Hystrix 服务容错与服务降级概念剖析

在介绍 Hystrix 服务容错与服务降级概念之前,我们先抛开 Hystrix 来了解一下传统意义上所说的容错指的是什么意思。

针对容错这一名词,对不同的行业领域有不同的意思,针对于计算机科学与技术等计算机相关专业而言,容错指的是:当系统在运行时,有错误被激活的情况下,仍能保证不间断提供服务的方法和技术。 通过这段话可以看出,对计算机相关专业而言,容错指的是一种方法或技术。

Tips: 这里强调一点,容错指的是一种方法或技术,而不是指一个方法或技术,具体含义我们继续往下看。

在明白了什么是传统意义上的容错之后,我们回到 Hystrix 中,对于服务容错而言,我们可以这样定义,即:在我们的系统正常运行时,当系统中出现了可以直接影响系统正常运行的错误时,仍能够保证服务不间断的正常运行的一种技术,我们把这种技术称为服务容错。

我们都知道,服务容错是 Hystrix 主要提供的特性,那么,如果我们想实现这一特性,我们需要通过什么方法来实现呢,或者说通过采用哪种方法可以实现服务容错呢?

在 Hystrix 中,我们需要通过 Hystrix 提供的服务降级策略来实现服务容错,这是 Hystrix 默认提供的实现方法,同时也只有通过这种方法可以来实现 Hystrix 的服务容错机制。

在理解了什么是服务容错之后,接着我们来看一下什么是服务降级。

Tips:
1. 在微服务中,服务容错指的就是当一个服务发生故障时,通过一定的手段或者技术,来保证该故障不会影响系统正常的运行。而这种技术,在 Hystrix 中指的就是服务降级,即通过服务降级来实现服务容错。
2. 我们可以这样理解,服务容错是一种技术实现目标,而服务降级则是实现服务容错的一种方法或技术手段。

在 Hystrix 中,从某种意义上讲,服务降级其实就是服务容错,只不过换了一种叫法而已,其本质是一成不变的,我们理解了什么是服务容错,也就理解了什么是服务降级了。

从上述内容中,我们可以知道,服务降级是实现服务容错的一种方法或技术手段,那么,在 Hystrix 中实现服务容错都有哪些方法或技术手段呢,接下来让我们结合具体的代码实操一起来看一下。

3. Hystrix 服务容错与降级实操

3.1 通过配置 Hystrix 注解实现

要想在我们的项目中使用 Hystrix 所提供的服务容错与服务降级特性,需要我们首先在我们的项目中启用 Hystrix 功能,具体代码如下:

@SpringBootApplication
@EnableHystrix
public class DemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}

}

代码解释:

第 2 行,我们在项目的启动类的上方,添加了 EnableHystrix 注解,表示我们的项目需要使用 Hystrix 功能服务。

在将 Hystrix 功能服务启用之后,我们需要在应用服务容错与服务降级的具体类中,去声明相应的注解,具体代码如下:

@RequestMapping(value = "hello", method = RequestMethod.GET)
@ResponseBody
@HystrixCommand(fallbackMethod = "helloFail")
public String hello() throws InterruptedException {
    Thread.sleep(1000);
    return "helloWorld";
}

public String helloFail() {
    return "helloFailed";
}

代码解释:

第 3 行,我们在具体方法的上方,添加了 HystrixCommand 注解,表示该方法应用了 Hystrix 的配置参数,接着,我们在该注解中,引入了 fallbackMethod 属性,其值是用来指定当 hello 方法不能正确响应时所返回的错误处理方法,这里指向了 helloFail 方法。

Tips:
1. 当我们配置完 HystrixCommand 注解的 fallbackMethod 属性之后,就表明我们已经成功配置好了 Hystrix 中的服务容错与服务降级特性,就可以正常往下开展我们的业务开发工作了;
2. fallbackMethod 属性就是用来配置 Hystrix 服务容错与服务降级的属性,它没有其他额外的用途,在实际工作中,我们经常会用到该属性。

3.2 通过引入 Open Feign ,配合 Hystrix 实现

此种实现方式,需要在项目中引入 Open Feign 远程服务调用中间件,并且要将该中间件集成到 Hystrix 中才能实现服务容错与降级,由于我们的课程是针对与 Hystrix 的,所以,在这里我只是简单提出一下,让各位同学知道,还有一种这样的实现方案,后续我们在介绍 Open Feign 再做详细的介绍。

4. 视频演示

5. 小结

本节内容概览

本小节为大家介绍了什么是服务容错、什么是服务降级,以及对服务容错和服务降级的代码实操,希望各位同学通过学习本节的内容,可以对服务容错与服务降级有自己的理解和看法,这样,在实际的工作中,我们在管理微服务项目时,才能得心应手,在遇到问题时,才能从容应对。