实际业务场景下 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 微服务监控平台中的参数一样,这里就不再赘述了。
Tips:
1. 在 appConfig 属性配置中,属性的值为每个需要监控的微服务的 serviceId 名称,同学们不要配置错了。
2. 各位在引入 Turbine 的依赖时,注意不要引错依赖了,如果大家引入了 aitifactId 为 spring-cloud-starter-turbine 的依赖,我们是无法使用 Turbine 的,因为这个依赖并不是 Spring Cloud 微服务组件中所提供的 Turbine 服务,而是单独的 Turbine 服务,我们无法在微服务项目中使用。
3. 各位同学在访问 Turbine 多微服务监控平台时,注意访问地址发生了变化,大家使用之前的微服务监控平台访问地址时访问不到的,这点需要同学们注意。
4. 小结
本小节以一个真实业务场景为大家介绍了 Hystrix 的另一个组件 Turbine ,以及 Turbine 的应用方法。Hystrix 的微服务监控平台一共就包含这两部分内容,而这两种情况分别对应不同的使用场景,同学们要注意区分。