SpringCloud全家桶学习之断路器---Hystrix(五)
目前我也在摸索着学习Spring Cloud,本节主要摸索的是服务熔断、服务降级、Hystrix服务监控。
一、Hystrix概述
(1)服务雪崩
服务雪崩:多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其他的微服务,这就是所谓的“扇出”。如果扇出的链路上某个微服务的调用响应时间过长或不可用,对微服务A的调用就会占用越来越多的系统资源,进行引起系统崩溃,所谓的“服务雪崩”。
对于高流量的应用来说,单一的后端依赖可能会导致所有服务器上的所有资源都在几秒钟内饱和。比失败更糟糕的是,这些应用程序还可能导致服务之间的延迟增加,备份队列,线程和其他系统资源紧张,导致整个系统发生更多的联级故障。这些都表示需要对故障和延迟进行隔离和管理,以便单个依赖关系的失败,不能取消整个应用程序或系统。
(2)Hystrix是什么?
Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统中,许多依赖不可避免地会调用失败,比如超时、异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。
“断路器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间的等待或抛出调用方无法处理的异常,这样就保证了服务调用方线程不会被长时间、不必要地占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。
官网地址:https://github.com/Netflix/Hystrix
本工程项目地址:https://github.com/Simple-Coder/microservice-demo-study
二、服务熔断
(1)服务熔断介绍
服务熔断:熔断机制是应对雪崩效应的一种微服务链路保护机制。当扇出链路的某个微服务不可用或响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回“错误”的响应信息。当检测到该节点的微服务调用响应正常后恢复调用链路。在Spring Cloud框架里熔断机制通过Hystix实现。Hystrix会监控微服务间调用的状况,当失败的调用到一定的阈值,缺省是5秒内20次调用失败就会启动熔断机制。熔断机制的注解是@HystrixCommand
(2)服务熔断工程搭建
1.Maven的模块结构图
2.microservice-provider-hystrix添加pom依赖
<!--hystrix相关-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
3.Controller层添加注解:@HystrixCommand
4.启动类添加注解:@EnableCircuitBreaker ,对hystrix熔断机制的支持
5.测试:依次启动3个Eureka、1个provider-hystrix、1个consumer
6.浏览器访问:http://localhost:7001/consumer/get/10999
至此,服务熔断模块测试完成!
三、服务降级
服务的降级处理是在客户端实现完成,与服务端没有关系。在服务熔断机制下,每个方法都要有一个对应的注解HystrixCommand和fallback方法,这样显然是不合适的,而且对本身业务也有侵入性。所以服务降级可以实现上述逻辑的解耦和分离。而这里又是面向接口编程,所以自然想到了将异常等处理逻辑与接口进行绑定,即可实现对业务本身无侵入,实现解耦。服务降级过程实现如下:
(1)Maven模块结构图(主要操作以下两个模块)
(2)根据已有的接口ConsumerClientService
新建一个实现了FallBackFactory接口的类ConsumerClientServiceFallbackFactory
(3)修改已有接口:ConsumerClientService注解相关配置
(4)microservice-consumer-feign模块application.yml配置文件修改
(5)测试:依次启动3个eureka、3个provider、1个consumer-feign
(6)浏览器访问:http://localhost:7001/consumer/get/1001
(7)手动关闭3个provider,继续访问:http://localhost:7001/consumer/get/1001
至此、服务降级已经测试完成!
四、服务监控HystrixDashboard
除了隔离依赖服务的调用以外,Hystrix还提供了准实时的调用监控(Hystrix Dashboard),Hystrix会持续地记录通过Hystrix发起的请求的执行信息,并以统计报表和图形的形式展示给用户,包括每秒执行多少请求多少成功,多少失败等。Netflix通过hystrix-metrics-event-stream项目实现了对以上指标的监控。Spring Cloud也提供了Hystrix Dashboard的整合,对监控内容的转成可视化界面。
(1)Maven模块工程结构图
(2)microservice-consumer-hystrix-dashboard模块添加pom依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>
pom
(3)启动类增加注解@EnableHystrixDashboard
(4)application.yml文件修改
(5)启动microservice-consumer-hystrix-dashboard:localhost:6001/hystrix,出现以下界面说明搭建完成
(6)测试:依次启动3个eureka、1个provider-hystrix
(7)浏览器访问:http://localhost:9001/hystrix.stream,这种页面显然是不好看的。
(8)填写监控地址:http://localhost:9001/hystrix.stream
(9)不断刷新点击:http://localhost:9001/provider/get/1001,查看以下报表
(10)查看结果?
简记:7色,1圈,1线
7个颜色分别对应有英文提示说明;
1圈越大,说明该服务的访问频率越高,流量压力也比较大;
1线就很明显了,实时的调用频率。
说明:
①实心圆:两层含义,它通过颜色的变化代表了实例的健康程度,它的健康程度从绿色<黄色<橙色<红色依次递减。此外,它的大小也会根据实例的请求流量发生变化,流量越大该实心圆就越大。所以通过实心圆的展示,就可以在大量的实例中快速的发现故障实例和高压力实例。
②曲线:用来记录2分钟内的相对变化,可以通过它来观察到流量的上升和下降趋势。
至此,服务监控的搭建完成!
五、总结
①服务熔断:@HystrixCommand(fallback="xxx"),@EnableCircuitBreaker支持对服务熔断的机制
②服务降级:客户端实现,与服务端没有关系,实现解耦,与@FeignClient结合使用
③服务监控:HystrixDashboard,使用非常简单@EnableHystrixDashboard
SpringCloud全家桶学习之断路器---Hystrix(五)的更多相关文章
- SpringCloud全家桶学习之Feign负载均衡----Feign(四)
一.Feign概述 (1)Feign是什么? 官网地址:https://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-f ...
- SpringCloud全家桶学习之分布式配置中心----Config(七)
一.概述 (1)背景 微服务意味着将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中出现大量的服务.由于每个服务都需要配置必要的配置信息才能运行,所以一套集中式的.动态的配置管理 ...
- SpringCloud全家桶学习之一阶段总结(一)
一.概述 前几篇小博客记录了我学习SpringCloud组件的过程,并与工作中所用的Dubbo框架做了一点比较,基本组件:Eureka.Ribbon.Hystrix.Feign.Zuul.Config ...
- SpringCloud全家桶学习之服务注册与发现及Eureka高可用集群搭建(二)
一.Eureka服务注册与发现 (1)Eureka是什么? Eureka是NetFlix的一个子模块,也是核心模块之一.Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故 ...
- SpringCloud全家桶学习之概览(一)
一.概览 根据百度百科的描述,微服务架构是一项在云中部署应用和服务的新技术.而SpringCloud是微服务架构思想的一个具体实现,它为开发人员提供了构建分布式系统中一些常见模式的工具(服务注册与发现 ...
- SpringCloud全家桶学习之消息总线---SpringCloud Bus
一.概述 ConfigClient(微服务)从ConfigServer端获取自己对应的配置文件,但是目前的问题是:当远程git仓库配置文件发生改变时,每次都是需要重启ConfigCient(微服务), ...
- SpringCloud全家桶学习之客户端负载均衡及自定义负载均衡算法----Ribbon(三)
一.Ribbon是什么? Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具(这里区别于nginx的负载均衡).简单来说,Ribbon是Netf ...
- SpringCloud全家桶学习之路由网关----Zuul(六)
一.Zuul概述 (1)Zuul是什么? Zuul包含了对请求的路由和过滤的两个最主要的功能,其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础:而过滤功能则负责对请求的 ...
- 框架用多了真的会死人的,spring-cloud全家桶与mybitais 集成完整示例(附下载)
题外话: 看到这一长串包含各种技术名词的标题,一路走来感觉研发深深的被各种框架给绑架了,从我们刚出生最简单的jsp,servlet打天下,到spring mvc的盛行,再到现在spring-boo ...
随机推荐
- 【Python requests多页面爬取案例】
"```python import requests from fake_useragent import UserAgent # 随机ua库 class Boring(): def __i ...
- H5Plus 入门学习-Dcloud H5+ API调用实例
使用API Reference完整简单的操作,更多操作查看官方文档. 最后提供项目的下载地址[下载][一款移动APP演示]
- 极客工具,PDF合并工具
前言 这两天一番花两天的时间,重新用python和python图形化开发工具tkinter,完善了下PDF合并小工具,终于可以发布了. 工具目前基本功能已经完善,后期如果有反馈可以修复部分bug或完善 ...
- 16day 引号符号系列
'' 输出的信息,所见即所得 [root@oldboyedu oldboy]# echo 'oldboy $LANG $oldgirl' oldboy $LANG $oldgirl "&qu ...
- Codeforces Round #624 (Div. 3) B. WeirdSort(排序)
output standard output You are given an array aa of length nn . You are also given a set of distinct ...
- 一些 NuGet 程序包是使用不同于当前目标框架的目标框架安装的,可能需要重新安装
如果 NuGet 检测到包受到重定向或升级项目的影响,它会将 packages.config 中的 requireReinstallation="true" 属性添加到所有受影响的 ...
- redis架构
hash槽16384个,0-16383 master1(slave101,slave102) master2 (slave201,slave202) master 3 (slave30 ...
- 牛客1080D tokitsukaze and Event (双向最短路)
题目链接:https://ac.nowcoder.com/acm/contest/1080/D 首先建两个图,一个是权值为a的图,一个是权值为b的图. 从s起点以spfa算法跑权值为ai的最短路到t点 ...
- MyBatis(3)——配置解析
MyBatis中文参考指南:MyBatis用户指南 //------------核心配置文件说明------------// //*在注释中进行说明 <configuration> < ...
- Type Java类型
参考:https://blog.csdn.net/a327369238/article/details/52621043 Type —— Java类型 Type是一个空接口,所有类型的公共接口(父接口 ...