2.6 Spring Cloud 微服务 API 的监控 Hystrix| 学习笔记

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: 快速学习 2.6 Spring Cloud 微服务 API 的监控 Hystrix

开发者学堂课程【Spring Cloud 微服务架构设计与开发实战 2.6 Spring Cloud 微服务API 的监控 Hystrix】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/60/detail/1089


2.6 Spring Cloud 微服务 API 的监控 Hystrix

 

内容介绍

一、Spring Cloud 微服务监控

二、Spring Cloud 微服务 Hystrix 监控面板

 

下面来讲微服务架构的限流,提到的 Hystrix 也是 Netflix 提供的,之前提过Netflix Spring Cloud 微服务架构最早期核心的贡献公司,提供了许多重要的组件,Hystrix 就是其中之一。

 

一、Spring Cloud 微服务监控

1、Netflix Hystrix

(1)Netflix 发布了 Hystrix 熔断器框架,保护系统

(2)通过控制那些访问远程系统、服务和第三方库的节点

(3)从而对延迟和故障提供更强大的容错能力

4Fallback 灾备操作,出错以后返回的值

(5)Hystrix 中, 主要通过线程池来实现资源隔离

(6)Hystrix 的信号模式(Semaphores)来隔离资源

(7)Hystrix 支持 dashboard 控制面板监控信息

(8)Feign 可以和 Hystrix 结合使用,也可以独立使用

(9)Hystrix 使用了命令模式,对命令对象抽象了两个抽象: HystrixCommand 和 HystrixObservableCommand

Hystrix 本意指的是豪猪,之前在微服务架构已经演示过在生产环境下有知识高并发,可能有成百上千的实例,但也有可能有十台服务器支持的并发是一万,但是双十一支持的并发瞬间达到了十万,这时就有一个问题,那就是这个系统是直接崩溃还是做限流,还是一定程度上做一些措施去限制一部分流量,服务器中留一部分流量。现在的淘宝双十一已经做得很好了,基本不限流,还能过滤掉一些微请求和低攻击,但对于大部分公司来说服务器规模达不到这样的程度,这个时候就要保证系统的高可用,不让系统过载出现大面积崩溃,可以适当的接入部分请求服务部分请求,这样的话整个系统还是可用的,当瞬间流量过载的时候可用消除部分的峰值请求,相当于用了隔离的策略,实行隔离工作,但是 Java 本身没有像 Hystrix 倒班的概念,实际上他的隔离是通过线程池进行隔离的,为了避免某个服务调度出错引发整个系统崩溃的问题,这里面也出现了 dashboard 监控面板,可以监控服务的调度数据,当然 Hystrix 可以部署在服务端,也可以部署在调用端,一般是放在调用端,尤其是放在代理服务器上,网关服务器调度所有的服务,所以可以统一看到流量的监控信息,也可以针对某一个服务执行熔断策略。还有底层一个面试题需要注意,Hystrix 是设计模式里面经典的 Command  模式的应用,也就是命令模式,其中封装了各种不同的操作来做解耦工作。

2、断路器模式

如下图整个熔断工具 Hystrix 一般是放在服务调度中,因为服务调度端的话会调用多个服务,对于做限流是比较方便的,就是说常见的限流和高速公转的限流一定是在闸机口,在流量的入口,在全部流量经过的地方进行限流才有意义。

image.png

 

二、Spring Cloud 微服务 Hystrix 监控面板

Spring Cloud 监控面板在后面进行实战练习,它提供了 Hystrix dashboard 和还要再加上两个引用。下面做练习,看下具体的实战项目。为了简化方便就在之前Feign的基础上做实训。

1、Hystrix 监控面板实训

第一步加上两个引用依赖,然后保存进行拉包,这里面有 Hystrix,还有 dashboard,当然 dashboard 可以单独做一个独立的项目,做一个监控面板的程序,而 Hystrix 是用做采集,所以这两个引用可以分开,就是搭建包的时候有单独的项目,监控数据源是一个项目,还有一个重要的是 actuator,这个依赖是 Spring Cloud2.2 提供的叫数据采集的一个组件,而且不能没有,因为 actuator 要暴露一些核心的数据,以上操作改完后还要加上两个很重要的注解,@EnableHystrix 和 @EnableHystrixDashboard,@EnableHystrixDashboard 为启用监控面板,要把监控面板剥离成独立的也是可以的,@EnableHystri 为启用监控,代码如下:

@EnableHystrix

@EnableHystrixDashboard

<dependency>

<groupId>org. springframework. cloud</ groupId>

<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>

</dependency>

<dependency>

<groupId>org. springframework. cloud</ groupId>

<artifactId>spring-cloud- starter- netflix- hystrix- dashboard</artifactId>

</dependency>

<dependency>

<groupId>org. springframework. boot</ groupId>

<artifactId>spring- boot -starter- actuator</artifactId>

</dependency>

然后还要改配置文件,在文件中要暴露监控数据源地址,只有暴露数据才能进行采集,否则采不到,而现在 Spring Cloud 版本之间有默认的安全差异,很多规则都改掉了,所以要通过 management.endpoints.web.exposure.include 得到监控地址,其次还要改9002的测试端口,然后启动9002的端口,application 代码为:

server.port=9002

#暴露监控数据源地址

management.endpoints.web.exposure.include=*

运行后可以发现并没有很大的变动9002,只是加上了注解和三个依赖包,然后再访问 localhost:9002/hystrix,会进入监控面板的入口界面,入口界面是有点像豪猪的一个 logo,需要给出监控地址才能采集监控数据,输入采集地址为http://localhost:9002/actutor/hystrix.stream,如下图:

image.png 

2、进一步优化

这时候会出现一个错误,这个错误在以后做监控的时候也一定会遇到,错误为无法连接到监控数据流,是因为默认在2.2级以后版本又更改了,不允许直接去连接,而且本身这种数据也属于安全数据,那要进行连接就要在配置里面允许本地服务器进行调用,并且这里面采集面板和代理服务器还有一个依赖关系,如果不这样的话,这个错误会一直出现,看不见采集数据的,增加代码为:

#允许展示监控服务器

hystrix.dashboard.proxy-stream-al1ow-list=localhost,192.168.1.101

暴露的协议也是可以改的,默认的使用 web 也就是 http协议,以及 REST 协议,再次回到浏览器运行则页面加载为 Loading,然后就要主动触发调用9002新的微服务程序,触发后才有数据源,等待一会后正常的话会出现触发的数据,不正常的话再打开 http://localhost:9002/actutor/hystrix.stream 会发现里面的数据流为空,是不会展示的,在练习中此处运行为不正常,所以回到代码中进行检查。

代码中.exposure.include=*,* 号表示所有,也可以代表健康信息,其他信息都可以拿来用,继续检查会发现代理服务器在想办法去监控数据量,此时浏览器再进行触发一次,页面就会显示数据,如图:
image.png

所以数据流要重新打开一次,此时监控界面就可以看到数据了,然后进行多次手动的测试调用,回到监控界面就会发现手动点击速度为1.2次每秒,如图:

image.png

以上则说明调度成功。通过监控面板可以看到上面的界面,这里面只做了一个 test 微服务,当然也可以做多个,多个的话体现的就比较明显,如下可以在案例中再加入 hi 的微服务调度,效果是一样的,调度两个的话就是按照两个策略来执行监控的,增加代码为:

@RequestMapping("/hi")

public String hi() {

return proxy .hi();

}

页面进行访问 localhost:9002/hi,调度 hi 后界面如下:

image.png

如果有多个服务的话监控页面看起来就更内容丰富,都是通过 OderProxy来进行调度,做这个练习需要注意注解,在配置文件中可做的参数,三个重要的依赖包,中间一旦出现错误就会导致连接不上数据流,没有数据的情况,如果正常的话数据流里面应该有监控日志,而且不断刷新默认应该是1秒左右或者500毫秒,以上这个策略就到处结束。下节课介绍熔断和限流怎么实现,而这里已经实现了数据采集,后面就知道其他的怎么做。

相关文章
|
9天前
|
Java 对象存储 开发者
解析Spring Cloud与Netflix OSS:微服务架构中的左右手如何协同作战
Spring Cloud与Netflix OSS不仅是现代微服务架构中不可或缺的一部分,它们还通过不断的技术创新和社区贡献推动了整个行业的发展。无论是对于初创企业还是大型组织来说,掌握并合理运用这两套工具,都能极大地提升软件系统的灵活性、可扩展性以及整体性能。随着云计算和容器化技术的进一步普及,Spring Cloud与Netflix OSS将继续引领微服务技术的发展潮流。
23 0
|
7天前
|
负载均衡 Java 网络架构
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
20 5
|
6天前
|
前端开发 API 微服务
SpringCloud微服务之间使用Feign调用不通情况举例
SpringCloud微服务之间使用Feign调用不通情况举例
31 2
|
9天前
|
Java API 对象存储
微服务魔法启动!Spring Cloud与Netflix OSS联手,零基础也能创造服务奇迹!
这段内容介绍了如何使用Spring Cloud和Netflix OSS构建微服务架构。首先,基于Spring Boot创建项目并添加Spring Cloud依赖项。接着配置Eureka服务器实现服务发现,然后创建REST控制器作为API入口。为提高服务稳定性,利用Hystrix实现断路器模式。最后,在启动类中启用Eureka客户端功能。此外,还可集成其他Netflix OSS组件以增强系统功能。通过这些步骤,开发者可以更高效地构建稳定且可扩展的微服务系统。
24 1
|
21天前
|
监控 Java Nacos
SpringCloud基础5——微服务保护、Sentinel
sentinel、雪崩问题、流量控制、隔离和降级、授权规则、规则持久化
SpringCloud基础5——微服务保护、Sentinel
|
26天前
|
前端开发 Java UED
"揭秘!如何以戏剧性姿态,利用SpringCloud铸就无懈可击的异常处理铁壁,让你的微服务架构稳如泰山,震撼业界!"
【9月更文挑战第8天】随着微服务架构的普及,Spring Cloud作为一套完整的微服务解决方案被广泛应用。在微服务架构中,服务间调用频繁且复杂,异常处理成为保障系统稳定性和用户体验的关键。传统的异常处理方式导致代码冗余,降低系统可维护性和一致性。因此,基于Spring Cloud封装统一的异常处理机制至关重要。这样不仅可以减少代码冗余、提升一致性,还增强了系统的可维护性,并通过统一的错误响应格式优化了用户体验。具体实现包括定义全局异常处理器、自定义业务异常以及在服务中抛出这些异常。这种方式体现了微服务架构中的“服务治理”和“契约先行”原则,有助于构建健壮、可扩展的系统。
48 2
|
28天前
|
缓存 Java 应用服务中间件
随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架
【9月更文挑战第6天】随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架。Nginx作为高性能的HTTP反向代理服务器,常用于前端负载均衡,提升应用的可用性和响应速度。本文详细介绍如何通过合理配置实现Spring Boot与Nginx的高效协同工作,包括负载均衡策略、静态资源缓存、数据压缩传输及Spring Boot内部优化(如线程池配置、缓存策略等)。通过这些方法,开发者可以显著提升系统的整体性能,打造高性能、高可用的Web应用。
58 2
|
9天前
|
Java 对象存储 开发者
微服务世界的双雄争霸:Spring Cloud与Netflix OSS——谁将引领下一次企业级应用变革的风暴?
Spring Cloud与Netflix OSS是微服务架构的核心组件集,分别以其与Spring Boot的紧密集成及为大规模分布式系统设计的特性,在Java开发社区中广受青睐。前者通过Eureka提供服务发现机制,简化服务注册与定位;后者借助Hystrix增强系统弹性和可靠性,避免雪崩效应。此外,二者还包含负载均衡(Ribbon)、声明式HTTP客户端(Feign)及API网关(Zuul)等功能,共同构建强大微服务体系,助力开发者聚焦业务逻辑,提升系统灵活性与性能。
23 0
|
9天前
|
Cloud Native Java 对象存储
揭秘微服务架构之争:Spring Cloud与Netflix OSS巅峰对决,谁将称霸弹性云原生时代?
近年来,微服务架构成为企业应用的主流设计模式。本文对比了两大热门框架Spring Cloud和Netflix OSS,探讨其在构建弹性微服务方面的表现。Spring Cloud依托Spring Boot,提供全面的微服务解决方案,包括服务注册、配置管理和负载均衡等。Netflix OSS则由一系列可独立或组合使用的组件构成,如Eureka、Hystrix等。两者相比,Spring Cloud更易集成且功能完善,而Netflix OSS则需自行整合组件,但灵活性更高。实际上,两者也可结合使用以发挥各自优势。通过对两者的对比分析,希望为企业在微服务架构选型上提供参考。
29 0
|
2月前
|
Java 微服务 Spring
驾驭复杂性:Spring Cloud在微服务构建中的决胜法则
【8月更文挑战第31天】Spring Cloud是在Spring Framework基础上打造的微服务解决方案,提供服务发现、配置管理、消息路由等功能,适用于构建复杂的微服务架构。本文介绍如何利用Spring Cloud搭建微服务,包括Eureka服务发现、Config Server配置管理和Zuul API网关等组件的配置与使用。通过Spring Cloud,可实现快速开发、自动化配置,并提升系统的伸缩性和容错性,尽管仍需面对分布式事务等挑战,但其强大的社区支持有助于解决问题。
42 0
下一篇
无影云桌面