首页
学习
活动
专区
工具
TVP
发布

Spring-Cloud服务容错保护之Hystrix初探

在微服务架构中,存在着多个服务单元,若一个单元出现故障,就很容易因依赖关系而出现故障的蔓延,最终导致整个系统的瘫痪,这样的架构相较传统的架构更加不稳定,为了解决这样的问题,产生了断路器等一系列的服务保护机制。

"断路器"本身是一种开关装置,用于在电路上保护线路过载,当线路中有电器发生短路,"断路器"能够及时切断故障电路,防止发生过载、发热甚至起火等严重后果。

分布式架构中,断路器模式的作用也是类似的,当某个服务单元发生故障(类似于用电器发生短路)之后,通过断路器的故障监控(l类似熔断器保险丝),向调用方返回一个错误响应,而不是长时间的等待。这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统的蔓延。

针对上述问题,SpringCloudHystrix实现了断路器、线程隔离等一系列服务保护功能。它也是基于Netflix的开源框架Hystrix实现的,该框架的目标在于通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供强大的容错能力。Hystrix具备服务降级、服务熔断、线程和信号隔离、请求缓存合并以及服务监控等强大的功能。 -----来自《SpringCloud微服务实战》

上图为正常的微服务调用

当某个服务出现故障Hystrix回退防止级联故障,较低级别的服务中的服务故障可能导致用户级联故障。当对特定服务的检测达到一定阈值时(Hystrix中的默认值为5秒内的20次故障),电路打开,不进行响应。在错误和开路的情况下,开发人员可以提供后备(即服务降级)。

演示未加入熔断器

启动高可用注册中心

启动服务提供者(port=8081,port=8082)

启动消费者(通过Robbin负载均衡访问)

之前的博客已经演示过了,在两个服务提供者都正常使用的情况,停用端口8082的服务提供者,当消费者负载均衡轮训访问到8082端口的时候就会报如下错误:

加入熔断器

1.pom.xml中引入依赖hystrix依赖

2.在springboot启动类中添加开启熔断器的注解

3.controller

4.service

启动消费者,正常访问返回如下:

停用一个服务提供者,当负载均衡讯轮到停用的服务提供者时,返回如下:

这样的话熔断器起作用了,进行了服务的降级。

健康指标

连接断路器的状态也暴露在呼叫应用程序的/health端点中。

{

"hystrix": {

"openCircuitBreakers": [

"StoreIntegration::getStoresByLocationLink"

],

"status": "CIRCUIT_OPEN"

},

"status": "UP"

}

Hystrix指标流

要使Hystrix指标流包含对spring-boot-starter-actuator的依赖。这将使/hystrix.stream作为管理端点。

spring-boot-starter-actuator

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180426A1CV4D00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券