章节索引 :

实际业务场景下 Hystrix 服务监控实战

1. 前言

在之前的小节中,我们已经对 Hystrix 提供的微服务监控平台做了详细的介绍,基本上已经把这个微服务监控平台的常用内容都介绍完毕了,那么在本节中,将会结合这些基本参数对我们的微服务进行一个监控和配置。

本节主要内容:

  • 实际业务场景描述;

  • 业务场景实现思路分析与实操。

2. 实际业务场景描述

业务场景描述

有这样一个真实的业务场景:在某大厂某销售业务项目中,由于某大厂销售业务板块业务的持续增加,导致之前原本设计好的项目架构出现了问题,不足以支撑持续增长的业务需要,于是,某大厂程序员对项目架构做了拆分,并最终形成了以 Spring Cloud 为基础架构的微服务分布式项目架构。

在拆分了项目架构之后,虽然可以支撑持续增长的业务需要,但是,在拆分后的项目架构中,Hystrix 无法对所有项目进行监控,即 Hystrix 服务监控平台只能监控一个分散的项目,无法对项目整体进行监控。

问题原因分析

在解决问题之前,我们首先来分析一下这种问题产生的原因。

上述场景场景中,项目的架构方式是微服务的分布式架构,而一般来说的 Hystrix 微服务监控平台默认只对一个项目实例起作用,所以,也就导致了一个微服务平台只对一个微服务实例起作用。

3. 业务场景实现思路分析与实操

实现思路分析

针对上述场景,我们需要将所有拆分出来的微服务都要集成到 Hystrix 的微服务监控平台中去,但是我们应该怎么集成呢?

Hystrix 针对不同场景下,提供了不同的微服务监控方式:针对单体架构或只需要对一个服务实例进行监控的业务场景,我们只需要像我在介绍微服务监控平台时那样,进行配置即可;针对分布式的项目结构,或同时需要监控多个微服务的场景,Hystrix 提供了一个名为 Turbine 的多服务器微服务监控组件。

我们只需要将 Turbine 引入到我们的项目中去,即可实现分布式架构下的多微服务监控了。

实操

要想在项目中引入 Turbine ,我们首先需要将 Turbine 的依赖引入到项目中:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-turbine</artifactId>
</dependency>

在引入了 Turbine 依赖之后,我们需要对 Turbine 进行一些简单的配置,在 yml 配置文件中:

turbine:
  aggregator:
    clusterConfig: default   
  appConfig: service-one,service-two,service-three
  clusterNameExpression: "'default'"

代码解释

第 3 行,我们通过 clusterConfig 属性来配置 turbine 采用的集群策略,一般我们配置 default 即可。

第 4 行,我们通过 appConfig 属性来配置需要继承到 turbine 中的微服务,即需要同时刻进行监控的微服务,多个微服务使用英文状态下的逗号隔开。

第 5 行,我们通过 clusterNameExpression 属性来配置集群的名称表达式,一般也是采用 default 配置即可。

yml 配置文件配置完成后,我们需要在项目的启动类中添加 turbine 的注解:

@SpringBootApplication
@EnableHystrix
@EnableHystrixDashboard
@EnableTurbine
public class SaleApplication {

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

代码解释

第 4 行,我们添加了 @EnableTurbine 注解,来在项目中开启 turbine 服务,以支持同时监控多个微服务。

在配置完了上述两部分后,我们的 Hystrix Turbine 组件就引入到了我们的项目中,我们就可以对多个微服务进行监控了。

配置完成后,运行我们的项目,在浏览器地址栏中输入我们的监控地址:

http://localhost:port/turbine.stream

我们即可在浏览器中看到多个微服务已经被监控了,如下图所示:

Hystrix Dashboard 多微服务同时监控

从上图可知,这里我们对两个微服务进行了监控,其图中的各项监控参数和我们在之前介绍 Hystrix 微服务监控平台中的参数一样,这里就不再赘述了。

Tips:
1. 在 appConfig 属性配置中,属性的值为每个需要监控的微服务的 serviceId 名称,同学们不要配置错了。
2. 各位在引入 Turbine 的依赖时,注意不要引错依赖了,如果大家引入了 aitifactId 为 spring-cloud-starter-turbine 的依赖,我们是无法使用 Turbine 的,因为这个依赖并不是 Spring Cloud 微服务组件中所提供的 Turbine 服务,而是单独的 Turbine 服务,我们无法在微服务项目中使用。
3. 各位同学在访问 Turbine 多微服务监控平台时,注意访问地址发生了变化,大家使用之前的微服务监控平台访问地址时访问不到的,这点需要同学们注意。

4. 小结

本节内容概览

本小节以一个真实业务场景为大家介绍了 Hystrix 的另一个组件 Turbine ,以及 Turbine 的应用方法。Hystrix 的微服务监控平台一共就包含这两部分内容,而这两种情况分别对应不同的使用场景,同学们要注意区分。