断路器Hystrix以及监控大盘

本文深入解析了分布式系统中断路器的概念及其在微服务架构中的作用,详细介绍了Spring Cloud Hystrix如何实现服务调用的容错和监控。通过配置断路器,可以有效避免服务故障引发的连锁反应,而Hystrix的监控大盘则能实时监控服务状态,提升系统的稳定性和可维护性。

概念

断路器本身是一种开关装置,概念来自电学,当线路中有电器发生短路时,及时切断故障电路防止线路过载、发热导致火灾等。
分布式系统架构中,当某个微服务出现故障后,通过断路器的故障监控,向调用方返回一个错误响应而不是长时间的等待,这样可以避免某个线程被长时间占用不释放,导致服务器雪崩的可能。SpringCloud Hystrix是基于Netfix Hystrix做的二次开发,该框架目标在于通过控制那些访问远程服务、系统和第三方库的节点,从而对延迟和故障提供强大的容错能力。

依赖

消费者工程引入依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>

启动类注解@EnableCircuitBreaker来开启断路器功能(也可以用@EnableHystrix,但不常用)
查看注解源码发现,可以用@SpringCloudApplication来替代以下三个注解

@SpringBootApplication
@EnableDiscoveryClient //开启注册与发现,eureka
@EnableCircuitBreaker // 开启熔断,Hystrix

以上说明一个SpringCloud应用应包含服务发现和断路器。

Hystrix应用

服务消费方通过@HystrixCommand注解来指定回调方法,回调方法用来返回错误信息。
为避免问题服务请求过多导致系统不可用,Hystrix采用舱壁模式,为每个配置@HystrixCommand注解的服务分配一个线程池,这也是线程隔离的方式。

@Autowired
RestTemplate restTemplate;

@HystrixCommand(fallbackMethod = "demoFallback", commandKey = "demoKey")
public String hello() {}

通过断开服务提供者某个节点来测试,是否返回回调方法的返回值。

异常以及请求缓存待研究

Hystrix的核心注解@HystrixCommand,用来封装具体的依赖服务调用逻辑,fallback是Hystrix命令执行失败时使用的后备方法,用来实现服务的降级处理逻辑。服务降级逻辑中,我们需要一个通用的响应结果,并且该结果的处理逻辑应当从缓存或静态逻辑来处理,而不是依赖网络请求来获取。

监控大盘

Springcloud不仅能够优雅的整合Hystrix,而且提供了仪表盘组件,它主要用来实时监控Hystrix的各项指标信息,通过观察实时监控,我们可以快速发现系统中存在的问题。主要是针对消费者进行监控:
引入依赖:

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

可以通过注解@EnableHystrixDashboard来启动监控大盘功能。
在这里插入图片描述

通过首页可以看到Hystrix提供三种监控方式:

  • 监控默认集群
  • 监控指定集群
  • 监控某个服务实例,这种方式没有多大实际用处

开启turbine

生产中,会用TurbineHystrix Dashbord配合来实现对集群的监控,Turbine用来汇集监控信息,并将聚合后的信息提供给Hystrix Dashboard来集中展示和监控。部署Turbine服务,引入依赖:

<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>

通过注解@EnableTurbine开启Turbine
并在application.properties加入配置

spring.application.name=turbine-test
server.port=8989
management.port=8090

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

turbine.app-config=MY-CONSUMER #指定需要收集监控信息的服务名
turbine.cluster-name-expression="default"
turbine.combine-host-port=true

查看监控如图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值