Spring Cloud Netflix之断路器:Hystrix Clients

本文深入探讨了Netflix开发的Hystrix库,一种实现断路器模式的工具,用于预防微服务架构中的级联故障。介绍了如何通过断路器机制避免服务过载,以及如何在Spring Cloud项目中引入和配置Hystrix。此外,还讲解了如何使用HystrixDashboard监控断路器的健康状态。

Netflix创建了一个名为Hystrix的库,它实现了断路器模式。在微服务体系结构中,通常有多个服务调用层。

Figure 3.1. Microservice Graph

Hystrix

 低级服务中的服务失败会导致级联失败,一直持续到用户。当对特定服务的调用大于circuitBreaker.requestVolumeThreshold (default: 20 requests)和失败百分比大于circuitBreaker.errorThresholdPercentage (default: >50%)在一个由metrics.rollingStats.timeInMilliseconds (default: 10 seconds)定义的滚动容器中,断路器打开,调用不会执行。开发人员可以提供fallback,在打开断路器的情况下 。

Hystrix fallback可以防止级联失败

HystrixFallback

 

拥有断路器可以防止级联故障,并允许超负荷或故障服务有时间恢复。fallback 可以是另一个受Hystrix保护的调用、静态数据或正常的空值。fallback 可能被链接起来,以便第一个回退执行一些其他业务调用,这些调用反过来又返回到静态数据。

怎样引入Hystrix

要在项目中包含Hystrix,请使用group org.springframework.cloud和artifact id spring-cloud-starter-netflix-hystrix。有关使用当前的Spring Cloud发布系列设置构建系统的详细信息,请参阅Spring Cloud项目页面。

@SpringBootApplication
@EnableCircuitBreaker
public class Application {

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

}

@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 */;
    }
}

@HystrixCommand由Netflix的一个名为“javanica”的库提供。Spring Cloud自动将带有该注释的Spring bean包装在连接到Hystrix断路器的代理中。断路器计算什么时候打开和关闭电路,以及在出现故障时应该做什么。

要配置@HystrixCommand,可以使用commandProperties属性和@HystrixProperty注释列表。更多细节请看这里。有关可用属性的详细信息,请参见Hystrix wiki

传播安全上下文或使用Spring作用域

如果您想将某个线程本地上下文传播到@HystrixCommand中,那么默认声明将不起作用,因为它将在线程池中执行该命令(在超时的情况下)。您可以使用一些配置来切换Hystrix,以使用与调用方相同的线程,或者直接在注解中使用,方法是要求调用方使用不同的“隔离策略”。例如:

@HystrixCommand(fallbackMethod = "stubMyService",
    commandProperties = {
      @HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE")
    }
)

如果您使用@SessionScope或@RequestScope,情况也是如此。您将知道什么时候需要这样做,因为运行时异常说它找不到作用域上下文。

您还可以选择设置hystrix.shareSecurityContext属性为true。这样做将自动配置一个Hystrix并发策略插件钩子,它将把SecurityContext从主线程转移到Hystrix命令使用的线程。Hystrix不允许注册多个Hystrix并发策略,因此可以通过将自己的HystrixConcurrencyStrategy声明为Spring bean来使用扩展机制。Spring Cloud将在Spring上下文中查找您的实现,并将其封装在自己的插件中。

健康指示器

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

{
    "hystrix": {
        "openCircuitBreakers": [
            "StoreIntegration::getStoresByLocationLink"
        ],
        "status": "CIRCUIT_OPEN"
    },
    "status": "UP"
}

Hystrix指标流

要启用Hystrix metrics流,需要依赖spring-boot-starter-actuator。这会暴露/hystrix.stream作为管理端点。

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

断路器:Hystrix Dashboard

Hystrix的一个主要优点是它收集了关于每个HystrixCommand的指标集。Hystrix仪表板以高效的方式显示每个断路器的健康状态。

Figure 4.1. Hystrix Dashboard

Hystrix

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值