Hystrix

迭代根系
• 阅读 1054

Hystrix断路器

  • 系统容错
  • 限流

启动断路器,断路器提供两个核心功能:

  • 降级,超时、出错、不可到达时,对服务降级,返回错误信息或者是缓存数据
  • 熔断,当服务压力过大,错误比例过多时,熔断所有请求,所有请求直接降级

降级

调用远程服务失败(异常,服务不存在,超时),可以执行当前服务的一段代码,向客户端响应

  • 返回错误提示
  • 返回缓存数据

实现降级

1.添加 hystrx 依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

2.添加注解 @EnableCircuitBreaker
3.远程调用代码上,添加 @HystrixCommand(fallbackMethod="降级方法名")
4.完成降级方法

//降级方法的参数和返回值,需要和原始方法一致,方法名任意 
public JsonResult<List<Item>> getItemsFB(String orderId) {
    return JsonResult.err("获取订单商品列表失败"); 
} 
public JsonResult decreaseNumberFB(List<Item> items) { 
    return JsonResult.err("更新商品库存失败"); 
} 
public JsonResult<User> getUserFB(Integer userId) { 
    return JsonResult.err("获取用户信息失败");
} 
public JsonResult addScoreFB(Integer userId, Integer score) { 
    return JsonResult.err("增加用户积分失败"); 
} 
public JsonResult<Order> getOrderFB(String orderId) { 
    return JsonResult.err("获取订单失败"); 
} 
public JsonResult addOrderFB() { 
    return JsonResult.err("添加订单失败"); 
}

熔断

特殊情况,在特定条件下触发

  1. 10秒内20次请求(必须首先满足)
  2. 50%失败,执行降级代码

熔断时,不会向后台服务调用,而是直接执行当前服务的降级代码返回结果

断路器打开几秒后,会进入“半开状态”,会尝试向后台服务发送调用,如果失败继续保持打开状态;如果成功断路器自动关闭,恢复正常

Hystrix 超时

启用 Hystrix 后,它有默认的超时时间:1秒

如果 hystrix 和 ribbon 重试一起使用,超时时间应该设置成大于等于 ribbon 总的超时时间

Hystrix Dashboard

Hystrix监控仪表盘

Actuator

Springboot 提供的项目监控工具,可以对外暴露项目的多种监控信息

  • 健康状态
  • Spring容器中所有的对象
  • SpringMVC设置的所有映射路径
  • 系统环境变量
  • ...

Hystrix利用 Actuator 工具,暴露了自己的监控数据

添加 Actuator

  1. 添加 actuator 依赖
  2. 暴露监控端点

    m.e.w.e.i="*" #暴露所有监控端点

    m.e.w.e.i=[health, env, beans] #暴露指定的多个端点

    m.e.w.e.i=hystrix.stream #只暴露一个端点

搭建仪表盘项目

Hystrix Dashboard 是一个完全独立的项目

  1. 添加 Hystrix Dashboard 依赖
  2. 添加注解 @EnableHystrixDashboard
@EnableDiscoveryClient
@EnableHystrixDashboard
@SpringBootApplication
public class Sp08HystrixDashboardApplication {

    public static void main(String[] args) {
        SpringApplication.run(Sp08HystrixDashboardApplication.class, args);
    }
}

使用 apache 的并发访问测试工具 ab

  • 用 ab 工具,以并发50次,来发送20000个请求
ab -n 20000 -c 50 http://localhost:3001/item-service/35`
  • 断路器状态为 Open,所有请求会被短路,直接降级执行 fallback 方法
点赞
收藏
评论区
推荐文章
Stella981 Stella981
3年前
Spring Cloud Alibaba:Sentinel实现熔断与限流
一、什么是SentinelSentinel,中文翻译为哨兵,是为微服务提供流量控制、熔断降级的功能,它和Hystrix提供的功能一样,可以有效的解决微服务调用产生的“雪崩效应”,为微服务系统提供了稳定性的解决方案。随着Hystrix进入了维护期,不再提供新功能,Sentinel是一个不错的替代方案。通常情况下,Hystrix采用线程池对服务的调用
Stella981 Stella981
3年前
Dubbo剖析
一、前言dubbo提供了一些服务降级措施,当服务提供端某一个非关键的服务出错时候,dubbo可以对消费端的调用进行降级,这样服务消费端就避免了在去调用出错的服务提供端,而是使用自定义的返回值直接在在本地返回。二、如何使用服务降级直接返回mock值!(https
Easter79 Easter79
3年前
SpringCloud笔记六:Hystrix
\TOC\Hystrix是什么?Hystrix是一个断路器,主要作用是服务熔断。我举个例子,比如我想访问服务A,但是服务A依赖服务B,服务B依赖服务C...这种多个服务之间依赖调用称为扇出(就像一把折扇缓缓打开一样)倘若某个服务反应的时间很长,或者服务不可用了,那么对服务A的调用会占用系统越来越多的资源,直至系统崩
Easter79 Easter79
3年前
SpringCloud的限流、降级和熔断——Hystrix
!(https://oscimg.oschina.net/oscnet/updb144b1538f24c2488b01c4e66a45d48038.JPEG)一、前言分布式系统环境中,服务间类似依赖非常常见,一个业余调用通常依赖多个基础服务。如下图,对于同步调用,当库存服务不可用时,商品服务请求线程被阻塞,当有大批量请求调用库存服务时,
Easter79 Easter79
3年前
SpringCloud 进阶之Hystrix(断路器)
1\.Hystrix断路器Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时,异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性;"断路器"本身是一种开关装置,当某个服务单元发生故障之后,通过断
Stella981 Stella981
3年前
Sentinel 流量控制 熔断降级 初探
    还记得之前写过一篇防雪崩利器:熔断器Hystrix的原理与使用https://my.oschina.net/u/3266761/blog/2654470,讲述了服务降级和熔断的控制,今天带来另一个流量控制与服务降级阿里开源框架sentinel。  首先是两者的对比:    Hystrix的关注点在于以隔离和熔断为主的容错机制
Stella981 Stella981
3年前
Hystrix异常处理及线程池划分
异常处理异常传播在HystrixCommand实现的run()方法中抛出异常时,除了HystrixBadRequestException之外,其他异常均会被Hystrix认为命令执行失败并触发服务降级的处理逻辑,所以当需要在命令执行中抛出不触发服务降级的异常时来选择它。在使用注解配置实现Hystrix命令时,可以忽略指定的异常
Easter79 Easter79
3年前
SpringCloud课程:15.Hystrix断路器简介 与 服务降级
Hystrix断路器一、概述分布式系统面临的问题复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候不可避免地失败。服务雪崩多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其他的微服务,这就是所谓的“扇出效应” 如果扇出的链路上某个微服务的调用响应
Easter79 Easter79
3年前
SpringCloud介绍
自己通俗的理解只能是Http协议调用,Dubbo可以支持多种协议就是RPC远程调用就是提供服务注册,服务发现,断路器,网关系统和自动配置的工具,底层采用http协议实现采用Eureka注册中Ribbon实现负载均衡Feignhttp协议调用工具Hystrix断路器Zuul网关系统就是把API服务通过注册中心
Stella981 Stella981
3年前
Hystrix (容错,回退,降级,缓存)
Hystrix熔断机制就像家里的保险丝一样,若同时使用高功率的电器,就会烧坏电路,这时候保险丝自动断开就有效的保护了电路。而我们程序中也同样是这样。例如若此时数据库压力太大速度很慢,此时还有不断的请求访问后台,就会造成数据库崩溃。这时候hystrix容错机制,可以为客户端请求设置超时链接,添加回退的逻辑,减少集群压力。!(https://os
Stella981 Stella981
3年前
Sentinel断路器与熔断降级
前言Sentinel的熔断降级通过断路器实现,本文通过介绍熔断器的定义、如何构建熔断器、断路器校验逻辑、断路器状态转换、异常/慢调用熔断流量是如何统计等方面梳理断路器的工作原理和实现方式。 一、断路器定义Sentinel中的熔断降级使用断路器实现,先看下断路器概念,来自维基百科的定义:断路器有分简单与较进阶的版本,简单的断路器只需