`
liujiekasini0312
  • 浏览: 147485 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring cloud: Hystrix断路器(熔断器)

 
阅读更多

1.Hystrix客户端

Netflix已经创建了一个名为Hystrix的库,实现了断路器的模式。在microservice架构通常有多个层的服务调用。
这里写图片描述

低水平的服务的服务失败会导致级联故障一直给到用户。当调用一个特定的服务达到一定阈值(默认5秒失败20次),打开断路器。在错误的情况下和一个开启的断路回滚应可以由开发人员提供。
这里写图片描述

有一个断路器阻止级联失败并且允许关闭服务一段时间进行愈合。回滚会被其他hystrix保护调用,静态数据或健全的空值。
代码如下:

@SpringBootApplication
@EnableCircuitBreaker
public class Application {

    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class).web(true).run(args);
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
@Component
public class StoreIntegration {

    @HystrixCommand(fallbackMethod = "defaultStores")
    public Object getStores(Map<String, Object> parameters) {
        //do stuff that might fail
    }

    public Object defaultStores(Map<String, Object> parameters) {
        return /* something useful */;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

@HystrixCommand是由Netflix contrib 库提供,叫做javanica。springcloud自动包装Spring bean与注释的代理连接到Hystrix断路器。断路器计算何时打开和关闭断路,并在失败的情况下做什么。
配置@HystrixCommand可以使用commandProperties属性的列表@HystrixProperty注释。详细请看https://github.com/Netflix/Hystrix/tree/master/hystrix-contrib/hystrix-javanica#configuration
https://github.com/Netflix/Hystrix/wiki/Configuration

1.1 传播安全上下文或者使用spring范围

如果你想要一些线程本地上下文传播到@HystrixCommand默认声明将不会工作,因为它执行线程池中的命令(在超时的情况下)。
可以切换Hystrix使用一些配置用相同的线程调用者,或直接在注释,让它使用不同的“隔离策略”(Isolation Strategy)。
例如:

@HystrixCommand(fallbackMethod = "stubMyService",
    commandProperties = {
      @HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE")
    }
)
...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

详细内容请参考https://github.com/Netflix/Hystrix/wiki/Configuration

1.2 健康监控

连接的断路器的状态也暴露在调用应用程序的/health端点。

{
    "hystrix": {
        "openCircuitBreakers": [
            "StoreIntegration::getStoresByLocationLink"
        ],
        "status": "CIRCUIT_OPEN"
    },
    "status": "UP"
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

1.3 Hystrix Metrics Stream(hystrix指标流)

spring-boot-starter-actuator中实现了Hystrix metrics stream。暴露/hystrix.stream作为一个管理端点。

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

2.Hystrix dashboard

Hystrix的主要好处之一是它收集关于每个HystrixCommand组指标。Hystrix仪表板显示每个断路器的健康高效的方式。
这里写图片描述
运行Hystrix仪表板需要在spring boot主类上标注@EnableHystrixDashboard。然后访问/ hystrix查看仪表盘,在hystrix客户端应用使用/hystrix.stream监控。

2.1 turbine

看一个实例Hystrix数据对于整个系统的健康不是很有用。turbine是一个应用程序,该应用程序汇集了所有相关的/hystrix.stream端点到 /turbine.stream用于Hystrix仪表板。运行turbine使用@EnableTurbine注释你的主类,使用spring-cloud-starter-turbine这个jar。配置请参考https://github.com/Netflix/Turbine/wiki/Configuration-(1.x)
唯一的区别是turbine.instanceUrlSuffix不需要端口号前缀,因为这是自动处理,除非turbine.instanceInsertPort = false。

turbine.appConfig配置是一个eureka服务ID列表,turbine将使用这个配置查询实例。turbine stream在hystrix dashboard中使用如下的url配置:
http://my.turbine.server:8080/turbine.stream?cluster=,如果集群的名称是default,集群参数可以忽略)。这个集群参数必须和turbine.aggregator.clusterConfig匹配。从eureka返回的值都是大写的,因此我们希望下面的例子可以工作,如果一个app使用eureka注册,并且被叫做customers:

turbine:
  aggregator:
    clusterConfig: CUSTOMERS
  appConfig: customers
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

clusterName可以使用SPEL表达式定义,在turbine.clusterNameExpression。
默认值是appName,意思是eureka服务ID最终将作为集群的key,例如customers的InstanceInfo有一个CUSTOMERS的appName。另外一个例子是turbine.clusterNameExpression=aSGName,将从AWS ASG name获取集群名称。

另一个例子:

turbine:
  aggregator:
    clusterConfig: SYSTEM,USER
  appConfig: customers,stores,ui,admin
  clusterNameExpression: metadata['cluster']
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

在这种情况下,集群名称从4个服务从其元数据映射,期望包含“SYSTEM”和“USER”。

所有的app使用default,你需要一个文字表达式(使用单引号):

turbine:
  appConfig: customers,stores
  clusterNameExpression: 'default'
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

spring cloud提供一个spring-cloud-starter-turbine,所有依赖项你需要运行一个turbine服务器。使用@EnableTurbine创建一个spring boot应用。

2.2 turbine AMQP

在某些环境中(如在PaaS),典型的turbine模型的指标从所有分布式Hystrix命令不起作用。在这种情况下,你可能想要你Hystrix命令推动指标turbine,和spring cloud,就要使用AMQP消息传递。所有您需要做的是在客户端添加一个依赖spring-cloud-netflix-hystrix-amqp并确保代rabbitmq可用。(有关详细信息,请参阅弹簧引导文档如何配置客户端凭据,但它应该工作的当地代理或云计算)。

分享到:
评论

相关推荐

    SpringCloud10-Hystrix熔断器及服务熔断

    本文将深入探讨Spring Cloud中的Hystrix熔断器以及服务熔断机制。 首先,理解什么是熔断器模式至关重要。熔断器模式源自电路设计,当电流超过一定阈值时,电路会自动断开以保护系统不受损害。在软件系统中,Hystrix...

    springcloud hystrix 断路由

    在本文中,我们将深入探讨“Spring Cloud Hystrix 断路器”的概念及其在实际应用中的工作原理。 首先,我们来理解什么是断路器模式。断路器模式是软件设计模式的一种,用于在系统中引入故障保护机制。当服务出现...

    spring cloud gateway配置Hystrix 熔断、限流、后台调用注意点.pdf

    在上面的代码中,我们可以看到使用 `f.hystrix(config -&gt; config.setName("accept")` 配置了熔断器,名为 "accept"。并且设置了回退 URI 为 "forward:/gateway-fallback",这意味着当熔断器触发时,将会回退到该 URI...

    SpringCloud10-Hystrix熔断器学习代码及指定默认的全局兜底方法

    这个标题"SpringCloud10-Hystrix熔断器学习代码及指定默认的全局兜底方法"揭示了我们要讨论的主题——如何使用Hystrix进行熔断操作,并配置全局的 fallback 方法来处理服务调用失败的情况。 Hystrix的工作原理基于...

    spring cloud Hystrix断路器的使用(熔断器)

    "spring cloud Hystrix断路器的使用" spring cloud Hystrix断路器是Netflix开发的一种断路器模式,用于防止级联故障在微服务架构中。断路器的使用可以防止服务之间的级联故障,使得系统更加稳定和可靠。 Hystrix...

    spring cloud降级服务-hystrix.7z

    Spring Cloud Hystrix 是一个基于 Netflix Hystrix 实现的服务降级、断路器和熔断器框架,它被广泛应用于分布式系统中的容错管理,以提高系统的稳定性和可用性。在微服务架构中,服务间通信是常见的操作,而Spring ...

    spring-cloud-netflix-hystrix原理.rar

    Spring Cloud Netflix Hystrix 是一个强大的熔断器和断路器库,旨在帮助开发者构建弹性、容错的服务架构,以应对分布式系统中的延迟和故障。Hystrix 的设计目标是隔离服务之间的调用,防止服务级联失败,从而增强...

    SpringCloud(hystrix服务熔断)

    SpringCloud是基于Spring Boot实现的一套微服务框架,它提供了众多用于构建分布式系统的服务发现、配置中心、负载均衡、熔断器等工具。Hystrix是SpringCloud中的一个关键组件,主要用于实现服务容错和降级策略,以...

    spring cloud hystrix 服务容错保护例子

    总结来说,`spring-cloud-hystrix`服务容错保护例子展示了如何利用Hystrix断路器模式在Spring Cloud环境中实现服务的高可用性和稳定性。结合Eureka Server,我们可以构建一个健壮的微服务架构,即使在部分服务故障的...

    74-Spring Cloud断路器Hystrix原理读书笔记1

    Spring Cloud Hystrix 是一款强大的断路器框架,旨在防止微服务架构中的服务雪崩效应。服务雪崩是指在一个复杂的分布式系统中,由于某个服务的故障导致连锁反应,导致整个系统的稳定性受损。为了应对这种情况,...

    SpringCloud项目源码下载.docx

    Spring Cloud 是一个基于Spring Boot实现的云应用开发工具包,它为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)中...

    spring cloud hystrix &&dashboard源码解读

    `@EnableCircuitBreaker` 注解是 Spring Cloud Hystrix 提供的一个关键注解,用于启动熔断器功能。该注解的主要作用是引入 `HystrixCircuitBreakerConfiguration` 类作为配置类。通过该配置类可以完成 Hystrix 断路...

    springCloud 框架,整合feign,ribbon,熔断器

    在本项目中,我们关注的是如何整合 Feign、Ribbon 和熔断器,这些都是 SpringCloud 生态系统中的关键组件。 1. **Eureka**:Eureka 是 Netflix 提供的服务注册与发现组件。在分布式系统中,服务之间需要互相调用,...

    59道SpringCloud面试题详解含答案(值得珍藏)

    SpringCloud提供了一整套微服务解决方案,包括服务注册与发现、配置中心、全链路监控、服务网关、负载均衡、熔断器等多个功能模块。 1. **微服务架构**:微服务架构的核心思想是将单一应用拆分为一组小的、独立的...

    springcloud 熔断器Hystrix的具体使用

    springcloud 熔断器Hystrix 的具体使用 在微服务架构中,服务雪崩效应是一种常见的问题,它是由于基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况。熔断器是保护服务高可用的最后一道防线,它可以...

    SpringCloud面试专题及答案.pdf

    - **熔断器(Circuit Breaker)**:当某个服务频繁出现故障时,Hystrix 会自动“打开”断路器,阻止对该服务的调用,直到故障恢复。 - **超时控制**:设置合理的超时时间可以有效防止服务长时间等待无响应,从而降低...

    SpringCloud入门学习demo

    SpringCloud是中国IT行业中备受关注的微服务框架,它基于Spring Boot进行快速构建,为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式...

    SpringCloud黑马商城后端代码

    4. **熔断器**:Spring Cloud Hystrix是Netflix开源的容错管理工具,用于隔离服务调用,防止服务雪崩。在hmall系统中,Hystrix通过断路器模式,当服务出现故障时快速失败,避免影响整个系统。 5. **配置中心**:...

Global site tag (gtag.js) - Google Analytics