api-gateway实践(13)新服务网关 - 断路保护/熔断机制
参考链接:SpringCloud的Hystrix(五) Hystrix机制
1、在线测试
根据定义,生成输入界面,
点击测试,
验证参数,发起调用,返回执行结果
2、熔断保护


两个实现类:
NoOpCircuitBreakerImpl,什么也不做的断路器实现
HystrixCircuitBreakerImpl,实现类:
HystrixCircuitBreakerImpl
- HystrixCommandProperties properties
- HystrixCommandMetrics metrics
- AtomicBoolean circuitOpen
- AtomicLong circuitOpenedOrLastTestedTime:断路器打开或是上一次测试时间戳
HystrixCircuitBreakerImpl的方法
isOpen 判断断路器的打开/关闭状态
如果打开,直接返回true,表示断路器处于打开状态。否则,从度量指标metrics中获取healthcounts统计对象进一步判断(该对象记录了一个滚动时间窗内的请求信息快照,默认时间窗为10秒)
如果请求总数qps在预设的阈值范围内就返回false,表示断路器处于未打开状态,默认值20
如果错误百分比在阈值范围内就返回false,表示断路器处于未打开状态,默认值50
如果上述两个条件都不满足,就将断路器设置为打开状态(熔断/短路)。同时,如果从关闭状态切换到打开状态的话,就将时间记录到circuitOpenedOrLastTestedTime中。
allowRequest 判断请求是否被允许
判断是否强行打开,是则 return false
判断是否强行关闭,是则 isOpen & return true
!isOpen()||allowSingleTest()::断开时的时间戳+配置中的circuitBreakerSleepWindowInMillseconds 是否 小于当前时间,如果是的话,就将当前时间更新到记录断路器打开的时间circuitBreakerOpenedOrLastTestedTime中,并允许该请求。
即设置了断路器打开后的休眠时间(默认为5秒),休眠时间达到之后,将再次允许请求尝试访问,此时断路器处于“”半开“”,
若此时请求继续失败,则断路器又进入打开状态,并等待下一个休眠窗口过去之后再尝试。
若请求成功, 则将断路器重新置于关闭状态。
所以,allowSingleTest()和isOpen()配合,实现了断路器的打开和关闭状态的切换。
markSuccess 用来关闭断路器 在“半开”状态时使用。若调用命令成功,通过调用它将打开的断路器关闭,并重置度量指标对象。
命令执行的四个结果:成功、失败、超时、拒绝,用来更新计时器
3、性能测试
4、调用计量
api-gateway实践(13)新服务网关 - 断路保护/熔断机制的更多相关文章
- 网关中加入熔断机制(Hystrix)
网关中加入熔断机制 在网关中加入熔断机制 添加依赖项 spring-cloud-gateway项目POM文件加入spring-cloud-starter-netflix-hystrix <dep ...
- api-gateway实践(02)新服务网关 - 运行环境
一.服务网关的运行环境 1.服务配置中心 1.1.服务配置中心前台 前台 http://10.110.17.20/#/login:无源码,德奎部署在10.110.17.20的DockerStatck环 ...
- api-gateway实践(10)新服务网关 - OpenID Connect
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
- api-gateway实践(06)新服务网关 - 请求监控
一.实时监控 用户点击服务实例,系统显示服务实例-version下的api列表, 用户点击某个api的如下两个图标 1.API请求次数监控 横轴:时间,粒度为分钟 纵轴:请求访问次数 展示:失败数(红 ...
- api-gateway实践(04)新服务网关 - 新手入门
一.网关引擎环境 1.下载代码 2.搭建环境 3.打包部署 二.配置中心环境 1.下载代码 2.搭建环境 3.打包部署 三.创建业务实例 1.以租户身份登录配置中心,注册 group.version. ...
- api-gateway实践(03)新服务网关 - 网关请求拦截检查
参考链接:http://www.cnblogs.com/jivi/archive/2013/03/10/2952829.html 一.为什么要拦截检查请求? 防止重放攻击.篡改重放,进行使用规格检查 ...
- api-gateway实践(08)新服务网关 - 云端发布和日志查看
一.发布应用 1.新建应用空间 1.1.新建应用空间 1.2.新建应用 1.3.上传程序包 2.创建应用引擎服务 3.发布应用 3.1.为应用容器绑定Web运行环境(应用引擎服务) 3.2.发布应用( ...
- api-gateway实践(07)新服务网关 - 手动发布
应用地址:http://10.110.20.191:8080/api-gateway-engine/ 一.准备工作 1.xshell登陆云主机 1.1.配置链接 1.2.链接成功 1.3.关闭防火墙 ...
- [转载] 构建微服务:使用API Gateway
原文: http://mp.weixin.qq.com/s?__biz=MzA5OTAyNzQ2OA==&mid=206889381&idx=1&sn=478ccb35294c ...
随机推荐
- 浏览器中直接是使用react系列包开发,非打包方式。
直接上代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- opencv3.4+vs2015+win10安装过程问题解决
在使用cmake configure生成vs的工程文件时,有几个第三方的库和文件会频繁下载不成功,分别是: ffmpeg_version.cmake opencv_ffmpeg.dll opencv_ ...
- CentOS7安装最新版git教程
下载编译工具 yum -y groupinstall "Development Tools" 下载依赖包 yum -y install zlib-devel perl-ExtUti ...
- C#判断某个类是否派生某个类或是否实现了某个接口
is和as is关键字可以确定对象实例或表达式结果是否可转换为指定类型.基本语法: expr is type 如果满足以下条件,则 is 语句为 true: expr 是与 type 具有相同类型的一 ...
- js 标签云
以前只看到wordpress上面有个标签云的效果挺6,就好奇的弄个试试,还好网上有很多小伙伴的分享了,借鉴过来了 哈哈 html代码 <!DOCTYPE html> <html&g ...
- Centos虚拟机克隆模板
Centos6模板 IPTABLES/SELINUX # iptalbes -F # service iptables save 或 # /etc/init.d/iptables stop # chk ...
- Java安装和环境变量配置
一.Java的安装 1.下载合适的版本,安装jdk和jre到同一路径下的同一文件夹下,例如:都安装在 E:\Java: 备注: JDK:Java Development Kit : JRE: Ja ...
- 笔记:Jersey REST 传输格式-XML
XML类型是使用最广泛的数据类型,Jersey 对XML类型的数据处理,支持Java领域的两大标准,即JAXP(Java API for XML Processing,JSR-206)和JAXB(Ja ...
- flex布局之兼容
Android 2.3 开始就支持旧版本 display:-webkit-box; 4.4 开始支持标准版本 display: flex; IOS 6.1 开始支持旧版本 display:-webk ...
- javascript里的循环语句
前序:我一直对于for跟for..in存在一种误解,我觉得for都能把事情都做了,为啥还要for...in...这玩意了,有啥用,所以今天就说说JavaScript里的循环语句. 循环 要计算1+2+ ...