首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SpringCloud微服务架构篇5:微服务熔断机制-Hystrix

由于网络原因或者自身的原因,微服务并不能保证服务百分之百可用。如果单个服务出现问题,则调用该服务时会出现延迟甚至调用失败的情况;若调用失败,用户则会重新刷新页面并尝试再次调用,再加上其他服务的调用,从而增加了服务器的负载,导致某个服务瘫痪,甚至整个服务崩溃。

什么是微服务容错保护

Hystrix库可以解决以下问题:

对第三方接口/依赖服务潜在的调用失败提供保护和控制机制。

在分布式系统中隔离资源,减低耦合,防止服务之间相互调用而导致级连失败。

快速失败及迅速恢复。

在合适的时机对服务进行优雅降级处理。

对服务提供近乎实时的监控、报警和控制操作。

Hystrix是根据”断路器“模式创建的。”断路器“本身是一个开关装置,当某个服务单元发生故障之后,通过断路器的故障监控,向调用方返回一个符合预期的服务降级处理,而不是长时间地等待或抛出调用方无法处理的异常,这样就保证了服务调用方的线程不会被长时间不必要地占用,从而避免了故障在分布式系统中蔓延乃至崩溃。

在请求失败频率较低的情况下,Hystrix还会直接把故障返回给客户端。只有当失败次数达到阈值(默认在20s内失败5次)时,断路器才会被打开并且不再进行后续通信,从而直接进行服务降级(ballback)处理。

Hystrix的开发和实现遵守设计理念:

防止由于单个服务的故障,而耗尽整个系统容器(Tomcat,Jetty)的线程资源

快速失败,而不是在队列中挤压服务请求

提供服务降级(ballback)处理机制

使用隔离技术(如舱壁隔离、永道和断路器模式)来隔离服务依赖之间的影响

通过实时的监控和告警,及时发现系统中的潜在问题

通过配置更改可以优化低延迟传播的恢复时间,并且Hystrix支持大多数属性的动态更改,从而允许开发者可以实时对低延迟反馈循序进行修改和优化

提供对整个所依赖客户端在执行过程中的故障保护与隔离,而不仅仅是网络流量

快速启动Hystrix

继续对之前的项目对修改

1、引入Hystrix

引入spring-cloud-starter-netflix-hystrix依赖包。

2、开启Hystrix支持

在引导类中,增加@EnableCirCuitBreaker注解,开启对服务的荣作保护。

3、修改UserController实现

使用@HystrixCommand注解,该注解告诉服务调用者在调用失败时可以通过fallbackMethod参数指定的方法来实现服务降级处理。

4、容错测试

当两个微服务正常注册时,请求返回正常

现在把USER-SERVICE服务下掉,继续调用,返回的结果getUserNameFallback的内容。

5、服务降级的两种实现方式

1.使用注解完成服务降级实现

使用注解可以最小程度地侵入代码,可以快速让原来的功能支持服务降级。使用时仅需在要需要服务降级处理的方法上增加@HystrixCommand注解即可,并通过fallbackMethod属性设置该方法在降级处理时所使用的方法,然后在降级方法中实现服务降级处理逻辑。

@HystrixCommand注解属性说明:

groupKey:设定HystrixCommand分组的名称。

commandKey:设定HystrixCommand的名称。

threadPoolKey:设定HystrixCommand执行线程池的名称。

fallbackMethod:设定HystrixCommand服务降级所使用的方法名称,注意该方法需要与主方法定义在同一个类中,并且方法签名也要一致。

commandProperties:设定HystrixComand属性,比如,断路器失败百分比、断路器时间窗口大小等。

threadPoilProperties:设定HystrixCommand所执行线程池的属性,比如,线程池的大小,线程池等待队列长度等。

ingoreExceptions:设定HystrixCommand执行服务降级处理时需要忽略的异常,当这些异常出现时不会执行服务降级处理。

observableExecutionMode:设置HystrixCommand执行的方式。

defaultFallback:设置HystrixCommand默认的服务降级处理方法,如同时设定了fallbackMethod,会优先使用fallbackMethod。

2.继承HystrixCommand完成服务降级实现

继承HystrixCommand的降级代码示例

继承HystrixObservableCommand的降级代码实例

6、在Feign中使用Hystrix回退

@FeignClient增加fallback属性

创建UserServiceFallback继承UserService

增加yml文件配置,开启feign中的hystrix功能

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券