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

什么是微服务容错保护

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

hystrix 页面_SpringCloud微服务架构篇5:微服务熔断机制-Hystrix相关推荐

  1. Spring Cloud构建微服务架构(五)服务网关

    通过之前几篇Spring Cloud中几个核心组件的介绍,我们已经可以构建一个简略的(不够完善)微服务架构了.比如下图所示: alt 我们使用Spring Cloud Netflix中的Eureka实 ...

  2. SpringCloud微服务架构实战:微服务治理

    微服务治理 Spring Cloud 工具套件为微服务治理提供了全面的技术支持.这些治理工具主要包括服务的注册与发现.负载均衡管理.动态路由.服务降级和故障转移.链路跟踪.服务监控等.微服务治理的主要 ...

  3. Spring Cloud 云架构下的微服务架构:部门微服务(Dept)

    作者 | springML 来源 | CSDN 博客 责编 | Carol 出品 | CSDN云计算(ID:CSDNcloud) 封图| CSDN下载于视觉中国 对于 Rest 基础架构实现处理是 S ...

  4. 1.微服务架构-什么是微服务

    什么是微服务 我们先来看看为什么要考虑使用微服务. 构建单体应用 我们假设,您开始开发一个打车应用,打算与 Uber 和 Hailo 竞争.经过初步交流和需求收集,您开始手动或者使用类似 Rails. ...

  5. 微服务架构 与 Dubbo 微服务框架、SpringCloud 微服务框架 详解

    微服务架构 与 Dubbo 微服务框架.SpringCloud 微服务框架 详解 什么是微服务架构? 微服务架构就是将单体的应用程序分成多个应用程序,这一个应用程序就组成一个服务,这多个应用程序就组成 ...

  6. 【五】分布式微服务架构体系详解——服务发现和服务通信

    前言 微服务架构的概念比容器技术早,但是却随着容器技术在13年的兴起,基于容器技术的微服务架构越来越被广泛应用.容器的轻量级部署方式很适合为每个微服务提供基础运行环境. 本文会基于Docker容器,先 ...

  7. 熔断机制hystrix

    熔断机制hystrix 一.问题产生 雪崩效应:是一种因服务提供者的不可用导致服务调用者的不可用,并将不可用逐渐放大的过程 正常情况下的服务: 某一服务出现异常,拖垮整个服务链路,消耗整个线程队列,造 ...

  8. 熔断机制 Hystrix 的使用

    熔断机制 Hystrix 配合远程调用 hystrix对应的中文名字是"豪猪",豪猪周身长满了刺,能保护自己不受天敌的伤害,代表了一种防御机 制. 这与hystrix本身的功能不谋 ...

  9. 微应用是什么_SpringCloud微服务架构篇1:微服务架构开发

    大型分布式系统具有复杂性.隐匿性.配合性和易变性四大难题,不会存在任何单一软件工程上的突破,能让开发生产力得到一个数量级上的提升. 1.单体架构应用的困境 一个典型的单体架构应用就是将一个应用中所有的 ...

最新文章

  1. 使用idea 时出现classnotfound
  2. 深入理解C/C++二维数组
  3. Qt Creator加载占位符数据
  4. OpenGL模型加载和渲染
  5. .NET 7 预览版 2 已发布,NativeAOT 正式可用
  6. Windows 环境下运用Python制作网络爬虫
  7. MySQL进阶(DDL与DML)
  8. 转载——逻辑回归的袅娜曲线,你是否会过目难忘?
  9. Windows 7 任务栏开发 之 进度条(Progress Bar)
  10. A8下超级终端调试问题
  11. 基于Spring Security的认证方式_SpringBoot认识_Spring Security OAuth2.0认证授权---springcloud工作笔记121
  12. jQuery.Deferred exception: e.indexOf
  13. java 1.6 32位_JDK1.6 32位官方下载
  14. linux proftpd 用户,[原]把boblog博客的用户导入proftpd用户认证数据库
  15. python实现t分布
  16. mysql with,mysql+with
  17. matlab 三维图像 叠加,利用 Matlab构建“波的叠加”图样
  18. 国外广告联盟:玩转国外CPC网站作弊
  19. data在c语言中的作用,data是什么意思
  20. 树莓派屏幕显示No Signal

热门文章

  1. Python 核实文件是否存在的函数
  2. 转:jQuery常用插件
  3. 小公司如何选择合适的信息管理软件
  4. 验证guid()类型值的函数
  5. java毫秒 mysql秒_MySQL和Java时间毫秒之间的转换问题的总结
  6. mac mysql log在哪里_mac如何开启mysql bin-log
  7. python安装robotframework报错_Python3+RIDE+RobotFramework自动化测试框架搭建过程详解
  8. 微课--Python网络爬虫采集百度搜索结果(例4-5)
  9. Python编程一定要注意的那些“坑”(七)
  10. 图论知识总结(简易)