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-微服务架构服务调用的“保护伞“相关推荐

  1. 微服务架构-服务注册中心和服务网关(6.8) (转载)

    原文链接:微服务架构-服务注册中心和服务网关(6.8) 这篇文章还是基于SpringCloud开源框架体系来谈下对Eureka服务注册中心和Zuul服务网关在使用上的一些理解和说明.在使用微服务架构进 ...

  2. 下一代微服务架构——服务网格Service Mesh

    下一代微服务架构--服务网格Service Mesh 下一代微服务架构--服务网格Service Mesh 服务治理 什么是服务治理 系统架构形态演进 现阶段存在的问题 Service Mesh是什么 ...

  3. 微服务架构 — 服务治理 — 服务调用链可视化

    微服务架构所面临的问题 微服务架构中,服务之间会有错综复杂的依赖关系,例如:一个前端请求一般会依赖于多个后端服务,称为 "1=>N 扇出".在实际生产环境中,服务往往不是百分 ...

  4. Spring Cloud构建微服务架构-服务网关

    通过之前几篇Spring Cloud中几个核心组件的介绍,我们已经可以构建一个简略的(不够完善)微服务架构了.比如下图所示: 愿意了解源码的朋友直接求求交流分享技术 一零三八七七四六二六 我们使用Sp ...

  5. 微服务架构 —— 服务雪崩与容错方案

    导航 一.什么是服务雪崩 二.雪崩效应的三个核心原因 三.容错 四.业界常见容错思路 五.常见容错组件 一.什么是服务雪崩 服务雪崩 指的是微服务架构中,微服务各节点之间由于网络通信异常或微服务自身故 ...

  6. 微服务架构服务容错设计分析

    公众号:慕枫技术笔记 真正的大师永远怀着一颗学徒的心 引言 在微服务体系架构中,由于拆解的服务数变多了,服务发生故障的地方也会相应的增加,因此如何保证服务架构健壮是一个值得深思的问题.微服务容错机制正 ...

  7. 微服务架构服务限流方案详解

    话说在 Spring Cloud Gateway 问世之前,Spring Cloud 的微服务世界里,网关一定非 Netflix Zuul 莫属.但是由于 Zuul 1.x 存在的一些问题,比如阻塞式 ...

  8. 微服务架构---服务降级

    1 简介 什么是服务降级?当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作. 如果还是不理解,那 ...

  9. Spring Cloud构建微服务架构—服务消费Ribbon

    Spring Cloud Ribbon Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具.它是一个基于HTTP和TCP的客户端负载均衡器.它可以通 ...

最新文章

  1. 2022图神经网络5篇最新的研究综述:双曲/图分类/联邦/等变/异质性
  2. 我眼里的几种失败的人生
  3. lLinux网络相关命令,防火墙介绍及相关命令
  4. upper_bound()与lower_bound函数的使用
  5. 在线邮箱订阅反馈html5模板
  6. 滴滴司机问我会 LRU 吗?
  7. 怎么查看php是否安装了symfony_为什么开发人员讨厌PHP???
  8. 洛谷 P3397 地毯 【二维差分标记】
  9. c语言保留三位小数用float,float保留三位小数
  10. excel设置行高和列宽_Excel使用小技巧-Excel里设置列宽和行高
  11. Get rid of annoying security alerts in Microsoft Outlook!
  12. css3怎么实现筛子的效果??transform得常用属性??
  13. C# 读取或修改文件后缀
  14. 三分钟读懂新一代人工智能——ChatGPT
  15. 《C#零基础入门之百识百例》(三十五)方法返回 -- 自守数
  16. Ubuntu下配置、训练YOLO的全过程——无人机检测小系统
  17. 数据库的基本常用命令
  18. JAVA计算机毕业设计橱柜定制系统Mybatis+系统+数据库+调试部署
  19. 物流货运移动APP解决方案
  20. 125页PPT看完《华为数据之道》

热门文章

  1. 掌上实验室V8系列教程(二)跑马灯
  2. 【代码审计】YzmCMS_PHP_v3.6 代码执行漏洞分析
  3. 太极模块 ---上帝模式
  4. 2019美国大学生数学建模大赛 ICM@2019_Winter 准备:远程协作
  5. matlab cuda 加速,Matlab中调用CUDA加速的方法……
  6. python 处理xml pandas_python中的XML解析Pandas在
  7. 211大三会计女生,想做HR,要不要去英国读一年制硕士?
  8. 解决VSCode:Comment Translate插件在远程SSH或远程Docker容器无法翻译
  9. SUB-1G无线射频收发器芯片DP4301/CMT2300A无线遥控器应用
  10. 终端服务器超出了最大允许连接数”的解决方法汇总