SpringCloud学习(6)——Hystrix熔断器
分布式系统面临的问题
复杂的分布式体系结构中的应用程序有数十个依赖关系, 每个依赖关系在某些时刻不可避免的失败。
服务雪崩效应
多个微服务调用的时候, 假设微服务A调用微服务B和微服务C, 微服务B和微服务C又调用其它的微服务, 这就是所谓的"扇出"。如果扇出的链路上某个微服务的调用响应时间过长或不可用, 对微服务A的调用就会占用越来越多的系统资源, 进而引起系统崩溃, 即服务雪崩效应。
对高流量的服务来说, 单一的后端依赖可能会导致所有服务器上的所有资源都在几秒钟内饱和。比失败更糟糕的是, 这些应用程序还可能导致服务之间的延迟增加, 备份队列, 线程和其他系统资源紧张, 导致整个系统发生更多的级联故障。这些都表示需要对故障和延迟进行隔离和管理, 以便单个依赖关系的失败, 不影响整个应用程序或系统。
Hystrix概述
Hystrix是一个用于处理分布式系统的延迟和容错的开源库, 在分布式系统里, 许多依赖不可避免的会调用失败, 比如异常、超时等, Hystrix能够保证在一个依赖出问题的情况下, 不会导致整体服务失败, 避免级联故障, 以提高分布式系统的弹性。
"熔断器"本身是一种开关装置, 当某个服务单元发生故障后, 通过断路器的故障监控, 向调用方返回一个符合预期的、可处理的备选响应(FallBack), 而不是长时间的等待或抛出调用方无法处理的异常, 这样就保证了服务调用方的线程不会被长时间, 不必要的占用, 从而避免了故障在分布式系统中的蔓延, 乃至雪崩。
服务熔断
熔断机制是应对雪崩效应的一种微服务链路保护机制。
当扇出链路的某个微服务不可用或者响应时间过长时, 会进行服务降级, 进而熔断该节点微服务的调用, 快速返回"错误"的相应信息。当检测到该节点微服务调用相应正常后回复调用链路。SpringCloud框架里熔断机制是通过Hystrix来实现的。Hystrix会监控微服务间调用的情况, 当失败的调用到一定阈值, 却省是5秒内调用20次调用失败就会启动熔断机制。熔断机制的注解是@HystrixCommand。
搭建Hystrix熔断器
根据microservicecloudproviderdept8001创建hystrix熔断服务
添加pom依赖包

修改application.yml

修改Controller控制层
在接口方法上添加@HystrixCommand注解, fallbackMethod属性设置为符合预期、可处理的备选响应方法名称。

添加备选响应方法。

修改启动类
在启动类上面添加@EnableCircuitBreaker注解, 启用对Hystrix熔断服务的支持。

测试

服务降级
整体资源不足, 将其余不重要的服务先关掉, 等资源重组时再开启。
修改microservicecloudconsumerdeptfeign中的application.yml

修改microservicecloudapi
添加DeptClientServiceFallbackFactory类, 注意必须添加@Component注解, 将其加入容器中管理。

修改DeptClientService类

清理microservicecloudapi

测试
启动服务: microservicecloudeureka7001、microservicecloudeureka7002、microservicecloudeureka7003、microservicecloudproviderdept8001、microservicecloudconsumerdeptfeign

关闭microservicecloudproviderdept8001服务

服务监控HystrixDashboard
概述
除了隔离以来服务的调用外, Hystrix还提供了准实时的调用监控(HystrixDashboard), Hystrix会持续的记录所有通过Hystrix发起请求的执行信息, 并以统计报表和图形的形式展示给用户, 包括每秒执行多少请求, 多少成功, 多少失败等。Netflix通过Hystrix-metrics-event-stream项目实现了对以上指标的监控。Spring Cloud 也提供了Hystrix Dashboard的整合, 对监控内容转化成可视化界面。
创建microservicecloud-consumer-hystrix-dashboard

添加pom依赖

添加application.xml

添加启动类, 在启动类上添加@EnableHystrixDashboard注解

测试
浏览器输入http://localhost:9001/hystrix进行测试, 出现如下界面说明成功。

Hystrix Dashboard使用
Delay
该参数用来控制服务器上轮训监控信息的延迟时间, 默认为2000毫秒, 可以通过配置该属性来降低客户端的网络和CPU消耗。
Title
该参数对应了头部标题Hystrix Stream之后的内容, 默认会使用具体监控实例的URL, 可以通过配置该信息来展示更合适的标题。
查看
- 七色:

- 一圈:实心圆, 共有两种含义。他通过颜色的变化代表了实例的健康程度, 它的健康度从绿色>黄色>橙色>红色递减。该实心圆除了颜色的变化之外, 它的大小也会根据额实例的请求流量发生变化, 流量越大该实心圆越大。所以通过该实心圆的展示, 就可以在大量的实例中快速的发现故障实例和高压实例。
- 一线:曲线, 用来记录2分钟内流量的相对变化, 可以通过它来观察到流量的上升和下降趋势。
启动工程
microservicecloudeureka7001, microservicecloudeureka7002, microservicecloudeureka7003, microservicecloudproviderdepthystrix8001, microservicecloudconsumerhystrixdashboard
若microservicecloudconsumerhystrixdashboard已经启动, 无需再启。
使用Hystrix Dashboard

成功案例

在浏览器输入http://localhost:8001/dept/get/1, F5猛刷:

GitHub源码
https://github.com/wcd19901010/microservicecloud
SpringCloud学习(6)——Hystrix熔断器的更多相关文章
- SpringCloud学习之Hystrix
一.为什么要有断路器 在分布式系统当中,服务之间调用关系会随着业务的发展而变的复杂,一个服务可能依赖多个服务,服务之间层层依赖也是家常便饭的事情,如果一个服务的瘫痪很有可能导致整个系统的崩溃.比如说, ...
- SpringCloud学习之Hystrix请求熔断与服务降级(六)
我们知道大量请求会阻塞在Tomcat服务器上,影响其它整个服务.在复杂的分布式架构的应用程序有很多的依赖,都会不可避免地在某些时候失败.高并发的依赖失败时如果没有隔离措施,当前应用服务就有被拖垮的风险 ...
- SpringCloud学习笔记:熔断器Hystrix(5)
1. Hystrix简介 在分布式系统中,服务与服务之间相互依赖,一种不可避免的情况是某些服务会出现故障,导致依赖于它们的其他服务出现远程调度的线程阻塞. Hystrix提供熔断器功能,能够阻止分布式 ...
- SpringCloud之初识Hystrix熔断器 ----- 程序的保护机制
在上一篇的-负载均衡Robbin中,我们简单讲解到负债均衡的算法和策略.负载均衡就是分发请求流量到不同的服务器,以减小服务器的压力和访问效率,但是当负载均衡的某个服务器或是服务挂掉之后,那么程序会出现 ...
- SpringCloud学习之feign
一.关于feigin feigin是一种模板化,声明式的http客户端,feign可以通过注解绑定到接口上来简化Http请求访问.当然我们也可以在创建Feign对象时定制自定义解码器(xml或者jso ...
- SpringCloud学习系列之三----- 断路器(Hystrix)和断路器监控(Dashboard)
前言 本篇主要介绍的是SpringCloud中的断路器(Hystrix)和断路器指标看板(Dashboard)的相关使用知识. SpringCloud Hystrix Hystrix 介绍 Netfl ...
- springcloud之hystrix熔断器-Finchley.SR2版
本篇和大家分享的是springcloud-hystrix熔断器,其主要功能是对某模块调用失败做断路和降级,简单点就当某个模块程序出问题了并达到某阈值就限制后面请求,并降级的方式提供一个默认返回数据.最 ...
- SpringCloud无废话入门04:Hystrix熔断器及监控
1.断路器(Circuit Breaker)模式 在上文中,我们人为停掉了一个provider,在实际的生产环境中,因为意外某个服务down掉,甚至某一层服务down掉也是会是有发生的.一旦发生这种情 ...
- Spring cloud微服务 Hystrix熔断器学习教程
以下demo代码:https://github.com/wades2/HystrixtDemo 官网定义:Hystrix是一个延迟容错库.在分布式环境中,许多服务依赖项中的一些不可避免地会失败.Hys ...
随机推荐
- Scrum7
冲刺阶段的总结 一.各个成员今日完成的任务 组员 任务分工 贡献 林泽宇 团队分工.撰写博客.修改完善需求规格说明书.整理代码规范 李涵 后端架构设计 尹海川 logo设计修改.数据库数据 郏敏杰 课 ...
- 软件定义网络(SDN)研究进展
写在前面 这是我入门SDN以来的第一篇论文,它是一篇中文综述,看起来相对容易.也让我对SDN有了进一步的认识.下面是我的一些心得. 全文框架 SDN 将数据平面与控制平面解耦合,简化了网络管理. SD ...
- 周总结<3>
经过了一周的学习,我们在html以及C语言方面又有的新的知识点的学习,包括计算机导论也学会了路由器的设置. html 鼠标事件 C 二叉树的遍历代码 计算机导论 路由器的设置 Html案例: < ...
- C#高级编程 (第六版) 学习 第六章:运算符和类型强制转换
第六章 运算符和类型强制转换 1,运算符 类别 运算符 算术运算符 + - * / % 逻辑运算符 & | ^ ~ && || ! 字符串连接运算符 + 增量和减量运算符 ++ ...
- 通过一台服务器ssh多台主机远程修改网卡ip
在多台服务器环境下,更改所有的ip地址,网关,一台一台的登录修改显得复杂繁琐. 知识点: 参考#https://www.cnblogs.com/youngerger/p/9104144.html ...
- HttpWebRequest和HttpWebResponse的应用
创建使用类HttpHelper: public class Httpparam { public string UserAgent { get; set; } public string Accept ...
- 【bzoj4709】[Jsoi2011]柠檬 斜率优化
题目描述 给你一个长度为 $n$ 的序列,将其分成若干段,每段选择一个数,获得 $这个数\times 它在这段出现次数的平方$ 的价值.求最大总价值. $n\le 10^5$ . 输入 第 1 行:一 ...
- CIR,CBS,EBS,PIR,PBS 名词解释 令牌桶应用
为了达到上述目的,我们需要对进入网络的流量进行监督,实现CAR(Committed Access Rate). CAR:将进入网络的用户流量的速率限制在约定的范围之内,从而避免引起网络拥塞. CIR( ...
- P1053 篝火晚会
题目描述 佳佳刚进高中,在军训的时候,由于佳佳吃苦耐劳,很快得到了教官的赏识,成为了“小教官”.在军训结束的那天晚上,佳佳被命令组织同学们进行篝火晚会.一共有nnn个同学,编号从111到nnn.一开始 ...
- debug - taotao项目 - IDEA拖动文件的自动重命名是超级巨坑, 一定要非常小心
大量的如下错误: org.springframework.beans.factory.BeanCreationException: Could not autowire field 还是要相信报错 不 ...