Hystrix-微服务架构服务调用的“保护伞“
Hystrix
Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等。而Hystrix能够保证一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性,从而保护整个分布式系统能够正常运作,稳定运行,所以我把它比作分布式系统的"保护伞"。主要从服务降级、服务熔断、服务熔断
服务降级
服务器出现故障,避免客户端长时间等待,需要给客户端一个友好的响应提示(fallback)。常见的场景有程序运行异常,超时,服务熔断触发服务降级,线程池/信号量打满也会导致服务降级。
@HystrixCommand(fallbackMethod = "timeOutHandler")public String timeOut(Long id){int a=10/0;
// try {// TimeUnit.SECONDS.sleep(timeUnit);
// } catch (InterruptedException e) {// e.printStackTrace();
// }System.out.println("线程:"+Thread.currentThread().getName()+"is TimeOut for "+timeUnit+"s");return "线程:"+Thread.currentThread().getName()+"is TimeOut for "+timeUnit+"s";}public String timeOutHandler(Long id){return "线程:"+Thread.currentThread().getName()+"调用8001繁忙,请稍后再试o(╥﹏╥)o";}
服务熔断
类比保险丝达到最大服务访问量后,直接拒绝访问,拉闸限电,然后调用服务降级的方法并返回友好提示。整个过程为:服务的降级->进而熔断->恢复调用链路。熔断机制是应对雪崩效应的一种微服务保护机制,在SpringCloud框架里,熔断机制通过Hystrix实现,Hystrix会监控微服务调用的状况,当失败的调用达到一定的阈值,缺省是5秒内20次调用失败,就会启用熔断机制,注解是@HystrixCommand
,application.yml配置如下:
server:port: 8003
spring:application:name: xf-ordercloud:circuitbreaker:hystrix:enabled: true #开启熔断机制,默认关闭#服务降级超时设置
hystrix:command:default:execution:isolation:thread:timeoutInMilliseconds:3000
- OrderService业务类
@HystrixCommand(fallbackMethod = "circuitBreakerHandler",commandProperties = {@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "10"),@HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "10000"),@HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "60")})public String circuitBreaker(Long id){if (id<0){throw new RuntimeException("id不能为负数");}return "服务请求正常:"+id;}public String circuitBreakerHandler( Long id){return "服务出问题了,请稍后再试:o(╥﹏╥)o";}
由于熔断同样会触发服务降级,所以也需要指定fallbackMethod 。circuitBreaker.requestVolumeThreshold
:请求的线程数的上限值;circuitBreaker.sleepWindowInMilliseconds
:发送熔断的睡眠窗口期(熔断至恢复链路的时间间隔)单位ms,circuitBreaker.errorThresholdPercentage
:触发熔断的服务错误百分比。而代码中的熔断配置为:当服务出现故障,超时/异常,调用circuitBreakerHandler进行服务降级,若10次请求服务,发生60%的服务故障(6次调用服务失败),将触发服务熔断,并在10秒后尝试进行链路恢复
而Hystrix对于熔断也有自己的默认配置,详见HystrixCommandProperties类
Hystrix工作流程原理
官网解释,整个工作流程官网有详细说明,这里就不一一展开了。
总结
虽然Hystrix不在继续维护了,不过其中的核心原理,服务降级、熔断、限流等思想,在如今很多的中间件也能感受得到,比如未来要接触的Alibab的Sentinel
Hystrix-微服务架构服务调用的“保护伞“相关推荐
- 微服务架构-服务注册中心和服务网关(6.8) (转载)
原文链接:微服务架构-服务注册中心和服务网关(6.8) 这篇文章还是基于SpringCloud开源框架体系来谈下对Eureka服务注册中心和Zuul服务网关在使用上的一些理解和说明.在使用微服务架构进 ...
- 下一代微服务架构——服务网格Service Mesh
下一代微服务架构--服务网格Service Mesh 下一代微服务架构--服务网格Service Mesh 服务治理 什么是服务治理 系统架构形态演进 现阶段存在的问题 Service Mesh是什么 ...
- 微服务架构 — 服务治理 — 服务调用链可视化
微服务架构所面临的问题 微服务架构中,服务之间会有错综复杂的依赖关系,例如:一个前端请求一般会依赖于多个后端服务,称为 "1=>N 扇出".在实际生产环境中,服务往往不是百分 ...
- Spring Cloud构建微服务架构-服务网关
通过之前几篇Spring Cloud中几个核心组件的介绍,我们已经可以构建一个简略的(不够完善)微服务架构了.比如下图所示: 愿意了解源码的朋友直接求求交流分享技术 一零三八七七四六二六 我们使用Sp ...
- 微服务架构 —— 服务雪崩与容错方案
导航 一.什么是服务雪崩 二.雪崩效应的三个核心原因 三.容错 四.业界常见容错思路 五.常见容错组件 一.什么是服务雪崩 服务雪崩 指的是微服务架构中,微服务各节点之间由于网络通信异常或微服务自身故 ...
- 微服务架构服务容错设计分析
公众号:慕枫技术笔记 真正的大师永远怀着一颗学徒的心 引言 在微服务体系架构中,由于拆解的服务数变多了,服务发生故障的地方也会相应的增加,因此如何保证服务架构健壮是一个值得深思的问题.微服务容错机制正 ...
- 微服务架构服务限流方案详解
话说在 Spring Cloud Gateway 问世之前,Spring Cloud 的微服务世界里,网关一定非 Netflix Zuul 莫属.但是由于 Zuul 1.x 存在的一些问题,比如阻塞式 ...
- 微服务架构---服务降级
1 简介 什么是服务降级?当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作. 如果还是不理解,那 ...
- Spring Cloud构建微服务架构—服务消费Ribbon
Spring Cloud Ribbon Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具.它是一个基于HTTP和TCP的客户端负载均衡器.它可以通 ...
最新文章
- 2022图神经网络5篇最新的研究综述:双曲/图分类/联邦/等变/异质性
- 我眼里的几种失败的人生
- lLinux网络相关命令,防火墙介绍及相关命令
- upper_bound()与lower_bound函数的使用
- 在线邮箱订阅反馈html5模板
- 滴滴司机问我会 LRU 吗?
- 怎么查看php是否安装了symfony_为什么开发人员讨厌PHP???
- 洛谷 P3397 地毯 【二维差分标记】
- c语言保留三位小数用float,float保留三位小数
- excel设置行高和列宽_Excel使用小技巧-Excel里设置列宽和行高
- Get rid of annoying security alerts in Microsoft Outlook!
- css3怎么实现筛子的效果??transform得常用属性??
- C# 读取或修改文件后缀
- 三分钟读懂新一代人工智能——ChatGPT
- 《C#零基础入门之百识百例》(三十五)方法返回 -- 自守数
- Ubuntu下配置、训练YOLO的全过程——无人机检测小系统
- 数据库的基本常用命令
- JAVA计算机毕业设计橱柜定制系统Mybatis+系统+数据库+调试部署
- 物流货运移动APP解决方案
- 125页PPT看完《华为数据之道》
热门文章
- 掌上实验室V8系列教程(二)跑马灯
- 【代码审计】YzmCMS_PHP_v3.6 代码执行漏洞分析
- 太极模块 ---上帝模式
- 2019美国大学生数学建模大赛 ICM@2019_Winter 准备:远程协作
- matlab cuda 加速,Matlab中调用CUDA加速的方法……
- python 处理xml pandas_python中的XML解析Pandas在
- 211大三会计女生,想做HR,要不要去英国读一年制硕士?
- 解决VSCode:Comment Translate插件在远程SSH或远程Docker容器无法翻译
- SUB-1G无线射频收发器芯片DP4301/CMT2300A无线遥控器应用
- 终端服务器超出了最大允许连接数”的解决方法汇总