spring cloud Hystrix熔断器

在一个电商网站中,我们可能会将系统拆分成用户、订单、库存、积分.评论等一系列服务模块。用户创建一个订单的时候,客户端将调用订单服务的创建订单接口,此时创建订单接口又会向库存服务来请求出货(判断是否有足够库存来出货)。此时若库存服务因自身处理逻辑等原因造成响应缓慢,会直接导致创建订单服务的线程被挂起,以等待库存服务的响应,在漫长的等待之后用户会因为请求库存失败而得到创建订单失败的结果。如果在高并发情况之下,因这些挂起的线程在等待库存服务的响应而未能释放,使得后续到来的创建订单请求被阻塞,最终导致订单服务也不可用。在微服务架构中,如果一个服务出现故障,就很容易因依赖关系而引发故障的蔓延,最终导致整个系统的瘫痪,即引起雪崩效应

常见雪崩效应原因:

  • 硬件故障:如服务器宕机,机房断电,光纤被挖断等。
  • 流量激增:如异常流量,重试加大流量等。
  • 缓存穿透:一般发生在应用重启,所有缓存失效时,以及短时间内大量缓存失效时。大量的缓存不命中,使请求直击后端服务,造成服务提供者超负荷运行,引起服务不可用。
  • 程序BUG: 如程序逻辑导致内存泄漏,JVM长时间FullGC等。
  • 同步等待: 服务间采用同步调用模式,同步等待造成的资源耗尽。

Hystrix设计原则:

  • 防止任何单独依赖项耗尽所有资源 (例如用户线程)
  • 过载立即切断并快速失败,防止排队
  • 在可行的情况下提供备用,以保护用户免受故障的影响
  • 使用隔离技术(例如隔板,泳道和断路器模式)来限制任何一种依赖关系的影响。
  • 通过近实时指标,监控和警报确保故障被及时发现
  • 通过在Hvstrix的大多数方面中以低延迟传播配置的更改来优化恢复时间,并支持动态属性配置,这使您可以通过低延迟反馈回路进行实时操作修改。
  • 防止整个依赖客户端执行失败,而不仅仅是网络通信失败。

Hystrix原理:

  • 将对外部系统 (或“依赖项”)的所有调用包装在通常在单独线程中执行的HystrixCommand或HystrixObservableCommand对象中 (这使用了命令模式)
  • 超时呼叫: 超过您定义的闻值的调用。有一个默认值,但是对于大多数依赖项,您可以通过“属性”自定义设置这些超时,以便它们略高于每个依赖项的99.5%的性能。
  • 为每个依赖项维护一个小的线程池 (或信号灯);如果已满,发往该依赖项的请求将立即被拒绝,而不是排队。
  • 记录请求成功,失败 (客户端抛出异常),超时和线程拒绝。。
  • 如果某个服务的错误百分比超过闯值,则使断路器跳闸,以在一段时间内手动或自动停止所有对特定服务的请求。
  • 当请求失败,被拒绝,超时或短路时执行回退 (服务降级) 逻辑
  • 几乎实时监控指标和配置更改。
     

Hystrix在Fegin中的使用(也可以在Ribbon中使用):

1.Feign在整合到Spring Cloud时已经自带了hystrix模块,所以不需要额外的依赖和配置;

2.在yml中开启Fegin的容错功能

3.定义FallBack的降级处理(实现之前定义服务调用的Fegin接口)例如: 

4.在服务调用定义接口Fegin上添加FallBack,例如: 

5.修改业务逻辑,当降级之后进行返回处理

 

 

Hystrix Dashboard调用监控:

在微服务调用的时候Hystrix 可以实现服务的调用状况监控,这样我们可以知道调用服务成功的、失败的、超时的、出现错误等情况,默认的Hvstrix监控信息非常的不耐看,所以这里我们使用Dashboard进行查看调用情况;

1.在服务的提供者上添加hystrix和actuator依赖:

2.开启熔断器并在类上添加相应注解

 

 

3.注入监控对象 

 

@Bean
	public ServletRegistrationBean getServlet(){
		ServletRegistrationBean registrationBean = new ServletRegistrationBean(new HystrixMetricsStreamServlet());
		registrationBean.setLoadOnStartup(1);
		registrationBean.addUrlMappings("/actuator/hystrix.stream");
		registrationBean.setName("HystrixMetricsStreamServlet");
		return registrationBean;
	}

 

4.测试

 

以上很明显直接查看hystrix监控信息,我们很难看懂信息描述,所以我们搭建下dashboard查看监控; 因为以后每个服务都需要监控,所有我们创建一个新的Hystrix模块

5.新建module“hystrix”,并配置dashboard信息,查看监控信息

 

 

 

 

实心圆的颜色的变化代表了实例的健康程度,它的健康程度从 绿色>黄色>橙色>红色 递减该

实心圆除了颜色的变化之外,它的大小也会根据实例的请求流量发生变化,流量越大实心圆就越大,所以通过该实心圆的展示,就可以在大量实例中快速的发现故障实例和高压力实例。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud中,熔断器(Circuit Breaker)是一种用于处理分布式系统中故障和延迟的机制。它的作用是在服务之间进行通信时,当某个服务出现故障或响应过慢时,可以快速失败并返回一个预设的错误响应或备用数据,以保证系统的可用性和稳定性。 熔断器的作用主要体现在以下几个方面: 1. 故障快速失败:当调用的服务出现故障或超时时,熔断器能够快速失败,而不是一直等待超时或者长时间无响应。这样可以减少等待时间,提高系统的响应速度。 2. 服务降级:在高负载或故障情况下,熔断器可以暂时屏蔽一些非核心或可选功能,以保证核心功能的稳定运行。当服务降级被触发时,请求会被重定向到一个备用的处理逻辑,返回一个预先定义的响应,这样可以减轻系统负载并提高响应速度。 3. 故障隔离:熔断器能够通过断开与故障服务的连接,将故障隔离在一定范围内,防止故障在整个系统中蔓延。这样可以保护系统的稳定性,避免故障服务对其他服务的影响。 4. 自动恢复:熔断器能够监控服务的状态,并根据一定的策略自动进行恢复。当故障服务恢复正常时,熔断器会逐渐恢复对该服务的调用,保证系统的平稳过渡。 通过熔断器的作用,可以保护系统免受故障和延迟的影响,提高系统的可用性和稳定性。在Spring Cloud中,常见的熔断器实现包括Netflix Hystrix和Resilience4j等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值