其他分享
首页 > 其他分享> > Spring Cloud构建微服务架构:Hystrix监控数据聚合【Dalston版】

Spring Cloud构建微服务架构:Hystrix监控数据聚合【Dalston版】

作者:互联网



前言

上一篇我们介绍了使用Hystrix Dashboard来展示Hystrix用于熔断的各项度量指标。通过Hystrix Dashboard,我们可以方便的查看服务实例的综合情况,比如:服务调用次数、服务调用延迟等。但是仅通过Hystrix Dashboard我们只能实现对服务当个实例的数据展现,在生产环境我们的服务是肯定需要做高可用的,那么对于多实例的情况,我们就需要将这些度量指标数据进行聚合。下面,在本篇中,我们就来介绍一下另外一个工具:Turbine。

准备工作            

在开始使用Turbine之前,我们先回顾一下上一篇中实现的架构,如下图所示:

图片

其中,我们构建的内容包括:



动手试一试            

下面,我们将在上述架构基础上,引入Turbine来对服务的Hystrix数据进行聚合展示。这里我们将分别介绍两种聚合方式。

通过HTTP收集聚合

具体实现步骤如下:


<parent>	<groupId>org.springframework.cloud</groupId>	<artifactId>spring-cloud-starter-parent</artifactId>	<version>Dalston.SR1</version>	<relativePath /> <!-- lookup parent from repository --></parent><dependencies>	<dependency>		<groupId>org.springframework.cloud</groupId>		<artifactId>spring-cloud-starter-turbine</artifactId>	</dependency>	<dependency>		<groupId>org.springframework.boot</groupId>		<artifactId>spring-boot-starter-actuator</artifactId>	</dependency></dependencies>

@Configuration@EnableAutoConfiguration@EnableTurbine@EnableDiscoveryClientpublic class TurbineApplication{	public static void main(String[] args) {		SpringApplication.run(TurbineApplication.class, args);	}}

spring.application.name=turbineserver.port=8989management.port=8990eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/turbine.app-config=RIBBON-CONSUMER,RIBBON-CONSUMER-2turbine.cluster-name-expression="default"turbine.combine-host-port=true

参数说明

在完成了上面的内容构建之后,我们来体验一下Turbine对集群的监控能力。分别启动eureka-servereureka-clienteureka-consumer-ribbon-hystrixturbine以及hystrix-dashboard。访问Hystrix Dashboard,并开启对http://localhost:8989/turbine.stream`的监控,这时候,我们将看到针对服务`eureka-consumer-ribbon-hystrix`的聚合监控数据。

而此时的架构如下图所示:

图片

通过消息代理收集聚合

Spring Cloud在封装Turbine的时候,还实现了基于消息代理的收集实现。所以,我们可以将所有需要收集的监控信息都输出到消息代理中,然后Turbine服务再从消息代理中异步的获取这些监控信息,最后将这些监控信息聚合并输出到Hystrix Dashboard中。通过引入消息代理,我们的Turbine和Hystrix Dashoard实现的监控架构可以改成如下图所示的结构:

图片

从图中我们可以看到,这里多了一个重要元素:RabbitMQ。对于RabbitMQ的安装与基本时候我们可以查看之前的《Spring Boot中使用RabbitMQ》一文,这里不做过多的说明。下面,我们可以来构建一个新的应用来实现基于消息代理的Turbine聚合服务,具体步骤如下:


<parent>	<groupId>org.springframework.cloud</groupId>	<artifactId>spring-cloud-starter-parent</artifactId>	<version>Dalston.SR1</version>	<relativePath /> <!-- lookup parent from repository --></parent><dependencies>	<dependency>		<groupId>org.springframework.cloud</groupId>		<artifactId>spring-cloud-starter-turbine-amqp</artifactId>	</dependency>	<dependency>		<groupId>org.springframework.boot</groupId>		<artifactId>spring-boot-starter-actuator</artifactId>	</dependency></dependencies>

可以看到这里主要引入了spring-cloud-starter-turbine-amqp依赖,它实际上就是包装了spring-cloud-starter-turbine-streampring-cloud-starter-stream-rabbit

注意:这里我们需要使用Java 8来运行


@Configuration@EnableAutoConfiguration@EnableTurbineStream@EnableDiscoveryClientpublic class TurbineApplication{	public static void main(String[] args) {		SpringApplication.run(TurbineApplication.class, args);	}}

spring.application.name=turbine-amqpserver.port=8989management.port=8990eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/

对于Turbine的配置已经完成了,下面我们需要对服务消费者eureka-consumer-ribbon-hystrix做一些修改,使其监控信息能够输出到RabbitMQ上。这个修改也非常简单,只需要在pom.xml中增加对spring-cloud-netflix-hystrix-amqp依赖,具体如下:


<dependencies>	...	<dependency>		<groupId>org.springframework.cloud</groupId>		<artifactId>spring-cloud-netflix-hystrix-amqp</artifactId>	</dependency></dependencies>

在完成了上面的配置之后,我们可以继续之前的所有项目(除turbine以外),并通过Hystrix Dashboard开启对http://localhost:8989/turbine.stream的监控,我们可以获得如之前实现的同样效果,只是这里我们的监控信息收集时是通过了消息代理异步实现的。



标签:Hystrix,spring,eureka,Dalston,Spring,turbine,Turbine,cloud
来源: https://blog.51cto.com/u_15127675/2825352