博客
关于我
Hystrix 使用手册 | 官方文档翻译
阅读量:419 次
发布时间:2019-03-06

本文共 2836 字,大约阅读时间需要 9 分钟。

Hystrix 技术文档

1. Hystrix 概述

Hystrix 是 Netflix 开发的一款开源工具,主要用于处理分布式系统中的延迟和故障,通过实现 Circuit Breaker、Fallback 以及 Bulkhead 等模式,帮助系统提高可靠性和弹性。

2. Hystrix 的核心功能

Hystrix 提供了多种功能和特性,主要包括以下几点:

  • 延迟和故障容忍度:Hystrix 可以通过增加延迟和故障容忍度,保护分布式系统的交互。
  • Circuit Breaker:在故障或延迟达到一定阈值时,自动切断依赖,并执行降级策略。
  • Fallback:在服务调用失败时,提供一个降级方法,确保系统的继续运行。
  • Bulkhead:通过隔离机制,限制单个依赖的影响范围,防止级联故障。
  • 线程池和队列管理:通过线程池和队列来控制并发和资源占用,避免线程饥喹和阻塞。
  • 监控和报警:提供实时监控和报警功能,帮助管理员及时发现和处理问题。

3. Hystrix 的工作原理

Hystrix 的核心工作原理主要包括以下几个步骤:

  • 封装请求:将远程调用包装成 HystrixCommand 或 HystrixObservableCommand 对象,启动单独线程运行。
  • 超时控制:设置请求的超时时间,默认为 1000 ms,可以根据实际需求进行调整。
  • 线程池管理:为每个依赖服务分配线程池,当线程池满时直接拒绝,防止单点故障影响整个系统。
  • 熔断器触发:当依赖服务的失败率达到一定阈值或超时时,熔断器会触发降级策略。
  • fallback 执行:执行预定义的降级方法,返回合理的结果,避免级联故障。
  • 4. 使用 Hystrix

    Hystrix 提供了多种方式来执行命令,主要包括同步和异步两种模式。

    4.1 HystrixCommand 示例

    以下是一个简单的 HystrixCommand 示例:

    public class CommandHelloWorld extends HystrixCommand {    private final String name;    public CommandHelloWorld(String name) {        super(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"));        this.name = name;    }    @Override    protected String run() {        return "Hello " + name + "!";    }}

    4.2 异步执行示例

    以下是一个异步执行的示例:

    public class CommandHelloWorld extends HystrixObservableCommand {    private final String name;    public CommandHelloWorld(String name) {        super(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"));        this.name = name;    }    @Override    protected Observable
    construct() { return Observable.create((subscriber) -> { try { if (!subscriber.isUnsubscribed()) { subscriber.onNext("Hello " + name + "!"); subscriber.onCompleted(); } } catch (Exception e) { subscriber.onError(e); } }).subscribeOn(Schedulers.io()); }}

    5. Hystrix 配置

    Hystrix 提供了丰富的配置选项,主要包括以下几个方面:

    5.1 执行属性

    • isolation.strategy:设置隔离策略, THREAD 或 SEMAPHORE,默认为 THREAD。
    • execution.timeout.enabled:是否开启超时控制,默认为 true。
    • execution.isolation.thread.timeoutInMilliseconds:线程池的超时时间,默认为 1000 ms。

    5.2 Circuit Breaker 属性

    • circuitBreaker.enabled:是否开启熔断器,默认为 true。
    • circuitBreaker.requestVolumeThreshold:触发熔断的请求数量,默认为 20。
    • circuitBreaker.sleepWindowInMilliseconds:熔断后等待的时间,默认为 5000 ms。

    5.3 Metrics 配置

    • metrics.rollingStats.timeInMilliseconds:指标的滑动窗口时间,默认为 10000 ms。
    • metrics.rollingPercentile.numBuckets:指标的 buckets 数量,默认为 10。

    6. HystrixRequestCache

    Hystrix 提供了请求缓存功能,主要包括以下配置:

    • requestCache.enabled:是否启用请求缓存,默认为 true。
    • requestLog.enabled:是否启用日志记录,默认为 true。

    7. 线程池配置

    线程池的配置主要包括以下参数:

    • coreSize:核心线程数,默认为 10。
    • maximumSize:最大线程数,默认为 10。
    • maxQueueSize:队列最大容量,默认为 -1(使用 SynchronousQueue)。

    8. Metrics 和监控

    Hystrix 提供了丰富的指标,帮助监控系统性能和状态。这些指标包括成功率、失败率、延迟等,可以通过配置的方式进行收集和上报。

    9. Plugins

    Hystrix 支持通过插件扩展功能,用户可以根据需求添加自定义的插件来优化系统性能和管理。

    总结

    通过上述内容可以看出,Hystrix 是一个强大的工具,能够有效地处理分布式系统中的延迟和故障,提升系统的可靠性和弹性。通过合理配置和使用,开发人员可以更好地管理和优化复杂的分布式系统。

    转载地址:http://linuz.baihongyu.com/

    你可能感兴趣的文章
    Node.js安装和入门 - 2行代码让你能够启动一个Server
    查看>>
    node.js安装方法
    查看>>
    Node.js官网无法正常访问时安装NodeJS的方法
    查看>>
    Node.js的循环与异步问题
    查看>>
    Node.js高级编程:用Javascript构建可伸缩应用(1)1.1 介绍和安装-安装Node
    查看>>
    nodejs + socket.io 同时使用http 和 https
    查看>>
    NodeJS @kubernetes/client-node连接到kubernetes集群的方法
    查看>>
    Nodejs express 获取url参数,post参数的三种方式
    查看>>
    nodejs http小爬虫
    查看>>
    nodejs libararies
    查看>>
    nodejs npm常用命令
    查看>>
    Nodejs process.nextTick() 使用详解
    查看>>
    NodeJS 导入导出模块的方法( 代码演示 )
    查看>>
    nodejs 开发websocket 笔记
    查看>>
    nodejs 的 Buffer 详解
    查看>>
    nodejs 读取xlsx文件内容
    查看>>
    nodejs 运行CMD命令
    查看>>
    Nodejs+Express+Mysql实现简单用户管理增删改查
    查看>>
    nodejs+nginx获取真实ip
    查看>>
    nodejs-mime类型
    查看>>