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

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

准备工作

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

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

  • eureka-server:服务注册中心
  • eureka-client:服务提供者
  • eureka-consumer-ribbon-hystrix:使用ribbon和hystrix实现的服务消费者
  • hystrix-dashboard:用于展示eureka-consumer-ribbon-hystrix服务的Hystrix数据

动手试一试

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

通过HTTP收集聚合

具体实现步骤如下:

  • 创建一个标准的Spring Boot工程,命名为:turbine。
  • 编辑pom.xml,具体依赖内容如下:
<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>
  • 创建应用主类TurbineApplication,并使用@EnableTurbine注解开启Turbine。
@Configuration
@EnableAutoConfiguration
@EnableTurbine
@EnableDiscoveryClient
public class TurbineApplication {

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

}
  • application.properties加入eureka和turbine的相关配置,具体如下:
spring.application.name=turbine

server.port=8989
management.port=8990

eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/

turbine.app-config=eureka-consumer-ribbon-hystrix
turbine.cluster-name-expression="default"
turbine.combine-host-port=true

参数说明

  • turbine.app-config参数指定了需要收集监控信息的服务名;
  • turbine.cluster-name-expression 参数指定了集群名称为default,当我们服务数量非常多的时候,可以启动多个Turbine服务来构建不同的聚合集群,而该参数可以用来区分这些不同的聚合集群,同时该参数值可以在Hystrix仪表盘中用来定位不同的聚合集群,只需要在Hystrix Stream的URL中通过cluster参数来指定;
  • turbine.combine-host-port参数设置为true,可以让同一主机上的服务通过主机名与端口号的组合来进行区分,默认情况下会以host来区分不同的服务,这会使得在本地调试的时候,本机上的不同服务聚合成一个服务来统计。

在完成了上面的内容构建之后,我们来体验一下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聚合服务,具体步骤如下:

  • 创建一个标准的Spring Boot工程,命名为:turbine-amqp
  • 编辑pom.xml,具体依赖内容如下:
<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来运行

  • 在应用主类中使用@EnableTurbineStream注解来启用Turbine Stream的配置。
@Configuration
@EnableAutoConfiguration
@EnableTurbineStream
@EnableDiscoveryClient
public class TurbineApplication {

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

}
  • 配置application.properties文件:
spring.application.name=turbine-amqp

server.port=8989
management.port=8990

eureka.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的监控,我们可以获得如之前实现的同样效果,只是这里我们的监控信息收集时是通过了消息代理异步实现的。

更多Spring Cloud内容请持续关注我的博客更新或在《Spring Cloud微服务实战》中获取。

代码示例

样例工程将沿用之前在码云和GitHub上创建的SpringCloud-Learning项目,重新做了一下整理。通过不同目录来区分Brixton和Dalston的示例。

  • 码云:点击查看
  • GitHub:点击查看

相关阅读

  • Spring Cloud构建微服务架构:服务注册与发现(Eureka、Consul)
  • Spring Cloud构建微服务架构:服务消费者(基础)
  • Spring Cloud构建微服务架构:服务消费者(Ribbon)
  • Spring Cloud构建微服务架构:服务消费者(Feign)
  • Spring Cloud构建微服务架构:分布式配置中心
  • Spring Cloud构建微服务架构:服务容错保护(hystrix服务降级)
  • Spring Cloud构建微服务架构:服务容错保护(hystrix依赖隔离)
  • Spring Cloud构建微服务架构:服务容错保护(hystrix断路器)
  • Spring Cloud构建微服务架构:Hystrix监控面板
  • Spring Cloud构建微服务架构:Hystrix监控数据聚合
  • 更多Spring Cloud内容…

money.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/477518.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图谱实战 | 丁香园医疗领域图谱的构建与应用

分享嘉宾&#xff1a;付子玉 观澜网络 算法工程师编辑整理&#xff1a;孙佩霞 中国电信研究院出品平台&#xff1a;DataFunTalk导读&#xff1a;丁香园大数据组旨在为用户提供更优质的内容与服务&#xff0c;使用知识/概念图谱、预训练模型挖掘更深层次的用户意图。本文介绍了丁…

LeetCode 722. CPP删除注释(逻辑题)

1. 题目 给一个 C 程序&#xff0c;删除程序中的注释。这个程序source是一个数组&#xff0c;其中source[i]表示第i行源码。 这表示每行源码由\n分隔。 在 C 中有两种注释风格&#xff0c;行内注释和块注释。 字符串// 表示行注释&#xff0c;表示//和其右侧的其余字符应该被…

CVPR 2022 | 天大本科生论文入选!深度学习长尾分类新SOTA

文 | 丰色 发自 凹非寺 源 | 量子位&#xff08;QbitAI&#xff09;本科生搞科研到底能做出什么成绩&#xff1f;最新被CVPR 2022收录的一篇论文中&#xff0c;提供了一种新思路来解决深度学习中长尾分布数据的分类问题&#xff0c;最终实现了新SOTA。论文&#xff1a;https://…

Spring Cloud构建微服务架构:Hystrix监控面板【Dalston版】

在上一篇《服务容错保护&#xff08;hystrix断路器&#xff09;》的介绍中&#xff0c;我们提到断路器是根据一段时间窗内的请求情况来判断并操作断路器的打开和关闭状态的。而这些请求情况的指标信息都是HystrixCommand和HystrixObservableCommand实例在执行过程中记录的重要度…

学术会议 | 欢迎注册参加第11届国际知识图谱联合会议

11th International Joint Conference On Knowledge Graphs(IJCKG 2022)IJCKG(International Joint Conference On Knowledge Graphs)会议之前是国际语义技术联合会议&#xff08;the Joint International Semantic Technology Conference (JIST)&#xff09;&#xff0c;JIST …

LeetCode 396. 旋转函数(数学)

1. 题目 给定一个长度为 n 的整数数组 A 。 假设 Bk 是数组 A 顺时针旋转 k 个位置后的数组&#xff0c;我们定义 A 的“旋转函数” F 为&#xff1a; F(k) 0 * Bk[0] 1 * Bk[1] ... (n-1) * Bk[n-1]。计算F(0), F(1), …, F(n-1)中的最大值。 注意: 可以认为 n 的值小…

敬你一杯调参人生

文 | 不会的选C源 | LA PAUSE乐泊一杯上好的手冲咖啡也是作品&#xff0c;就像算法工程师调参已久的模型&#xff0c;建筑师终于定稿的一份设计&#xff0c;一首制作人编排已久的歌曲。从第一次喝到风味开始喝咖啡的人很多&#xff0c;有的喝速溶&#xff0c;有的追星巴克新品&…

Spring Cloud构建微服务架构:服务容错保护(Hystrix断路器)【Dalston版】

前言 在前两篇《Spring Cloud构建微服务架构&#xff1a;服务容错保护&#xff08;Hystrix服务降级&#xff09;》和《Spring Cloud构建微服务架构&#xff1a;服务容错保护&#xff08;Hystrix依赖隔离&#xff09;》中&#xff0c;我们对Hystrix提供的服务降级和依赖隔离有了…

LeetCode 934. 最短的桥(2次BFS)

1. 题目 在给定的二维二进制数组 A 中&#xff0c;存在两座岛。&#xff08;岛是由四面相连的 1 形成的一个最大组。&#xff09; 现在&#xff0c;我们可以将 0 变为 1&#xff0c;以使两座岛连接起来&#xff0c;变成一座岛。 返回必须翻转的 0 的最小数目。&#xff08;可…

讲习班 | ISWC 2022 知识感知的零样本学习

前言近年来&#xff0c;深度学习技术依托强大的计算资源、复杂的神经网络和大规模的标注数据集在视觉、语言、医学、金融等广泛的研究领域取得了显著的成就。然而&#xff0c;在现实应用场景中&#xff0c;尤其是在开放世界的背景假设下&#xff0c;随时会有一些新的概念/对象出…

谷歌提出 RNN 版 Transformer,或为长文本建模的当前最优解

文 | 小轶今天给大家介绍一篇谷歌的最新工作&#xff0c;解决的是 Transformer 的长文本处理问题。在原生 Transformer 中&#xff0c;attention 的复杂度是输入序列长度的平方级别&#xff0c;因此限制了它处理长文本的能力。简单来说&#xff0c;本文提出的解决方案就是把 Tr…

Spring Cloud构建微服务架构:服务容错保护(Hystrix依赖隔离)【Dalston版】

前言 在上一篇《Spring Cloud构建微服务架构&#xff1a;服务容错保护&#xff08;Hystrix服务降级&#xff09;》中&#xff0c;我们已经体验了如何使用HystrixCommand来为一个依赖资源定义服务降级逻辑。实现方式非常简单&#xff0c;同时对于降级逻辑还能实现一些更加复杂的…

重点领域知识工程课程群虚拟教研室建设启动会暨第一次教学研讨会在线召开...

重点领域知识工程课程群虚拟教研室启动会暨第一次教学研讨会于2022年10月11日晚在线召开。重点领域教学资源建设项目管理办公室相关负责人、中国中文信息学会语言与知识计算专委会主任李涓子、天津大学智能与计算学部主任李克秋出席会议并致辞。天津大学人工智能学院院长胡清华…

LeetCode 556. 下一个更大元素 III

1. 题目 给定一个32位正整数 n&#xff0c;你需要找到最小的32位整数&#xff0c;其与 n 中存在的位数完全相同&#xff0c;并且其值大于n。如果不存在这样的32位整数&#xff0c;则返回-1。 示例 1: 输入: 12 输出: 21示例 2: 输入: 21 输出: -1来源&#xff1a;力扣&#x…

这可能是你与 AI 大神们近距离接触的唯一机会……

明人不说暗话&#xff1a;作为粤海街头放飞梦想的有志青年&#xff0c;他们可能是国内最大胆的「狗仔队」。从2016年成立至今&#xff0c;他们报道过&#xff1a;国内外数十场 AI 学术会议动态&#xff0c;写下老中青研究者们在会场前线的精神风采AI 领域的每一个最新研究突破&…

Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)【Dalston版】

前言 在微服务架构中&#xff0c;我们将系统拆分成了一个个的服务单元&#xff0c;各单元应用间通过服务注册与订阅的方式互相依赖。由于每个单元都在不同的进程中运行&#xff0c;依赖通过远程调用的方式执行&#xff0c;这样就有可能因为网络原因或是依赖服务自身问题出现调…

论文浅尝 | 基于注意力图卷积神经网络的依存驱动关系抽取

笔记整理&#xff1a;王大壮论文链接&#xff1a;https://aclanthology.org/2021.acl-long.344.pdf动机句法信息,特别是依存树,已经被广泛应用于关系提取,以更好地分析与给定实体相关联的上下文信息。然而大多数现有的研究都饱受依赖树噪声的影响&#xff0c;特别是当它们自动生…

别再龟速炼丹了!聊聊怎样科学提升训练效率

文 | Horace He等编 | Juniper源 | 机器之心深度学习是门玄学&#xff1f;也不完全是。每个人都想让模型训练得更快&#xff0c;但是你真的找对方法了吗&#xff1f;在康奈尔大学本科生、曾在 PyTorch 团队实习的 Horace He 看来&#xff0c;这个问题应该分几步解决&#xff1a…

LeetCode 第 17 场双周赛(469/897,前52.3%)

文章目录1. 比赛结果2. 题目LeetCode 5143. 解压缩编码列表 easyLeetCode 5144. 矩阵区域和 mediumLeetCode 5145. 祖父节点值为偶数的节点和 mediumLeetCode 5146. 不同的循环子字符串 hard1. 比赛结果 做出来了1, 3两题&#xff0c;第2题在比赛结束后10分钟提交通过。 2.…

Spring Cloud构建微服务架构:分布式配置中心【Dalston版】

Spring Cloud Config是Spring Cloud团队创建的一个全新项目&#xff0c;用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持&#xff0c;它分为服务端与客户端两个部分。其中服务端也称为分布式配置中心&#xff0c;它是一个独立的微服务应用&#xff0c;用来连…