`

Hystrix文档-首页(转)

 
阅读更多

 

转自:http://youdang.github.io/2016/01/30/translate-hystrix-wiki-homepage/

 

【翻译】Hystrix文档-首页

Hystrix Logo

Hystrix是什么?

在分布式环境下,系统不可避免地会遇到依赖服务失效的问题,这些问题可能是依赖服务的高延迟,或者依赖服务抛出异常。使用 Hystrix 增加延迟/失败容忍逻辑,能帮助你解决这些服务之间交互的问题。Hystrix 能使你的系统在出现依赖服务失效的时候,通过隔离系统所依赖的服务,防止服务级联失败,同时提供失败回退机制,更优雅地应对失效,并使你的系统能更快地从异常中恢复。

Hystrix 的历史

Hystrix 项目由 Netflix API 组于 2011 年创立,创立之初主要用于应对系统快速恢复的需求。到了 2012 年,Hystrix 项目日益完善和成熟,Netflix 公司内部越来越多的组开始使用它。现在,数以百亿计的通过线程进行依赖隔离和数以千亿计的通过信号量进行依赖隔离的跨系统请求通过 Hystrix 发出,也正因为此,Netflix 的服务在系统可用性和快速恢复能力方面有了长足的长进。

下面这些链接详细介绍了 Hystrix,以及它所面临的挑战:

  1. Making Netflix API More Resilient
  2. Fault Tolerance in a High Volume, Distributed System
  3. Performance and Fault Tolerance for the Netflix API
  4. Application Resilience in a Service-oriented Architecture
  5. Application Resilience Engineering & Operations at Netflix

Hystrix 能做什么?

Hystrix 被设计用来:

  • 在通过第三方客户端访问(通常是通过网络)依赖服务出现高延迟或者失败时,为系统提供保护和控制
  • 在分布式系统中防止级联失败
  • 快速失败(Fail fast)同时能快速恢复
  • 提供失败回退(Fallback)和优雅的服务降级机制
  • 提供近实时的监控、报警和运维控制手段

Hystrix 能解决什么问题?

应用在复杂的分布式结构中,可能会依赖许多其他的服务,并且这些服务都不可避免地有失效的可能。如果一个应用没有与依赖服务的失效隔离开来,那么它将有可能因为依赖服务的失效而失效。

例如,一个应用依赖了 30 个服务,并且每个服务能保证 99.99% 的可用率,下面是一些计算结果:

99.9930 = 99.7% 可用率 10亿次请求×0.3% = 3,000,000次失效 即使所有依赖的服务都能达到 99.99% 的可用率,这个系统每个月还是会有大于两小时的不可用时间

而现实更加残酷,如果你没有针对整个系统做快速恢复,即使所有依赖只有 0.01% 的不可用率,累积起来每个月给系统带来的不可用时间也有数小时之多。


当所有依赖都正常,一个请求的拓扑结构如下所示:

请求拓扑结构-正常

当一个后端依赖服务有延迟,它会阻塞整个用户请求:

请求拓扑结构-有延迟

在高QPS环境下,一个后端依赖服务的延迟,会导致服务器上的资源都被阻塞。

应用中每一个网络请求或者间接通过客户端库发出的网络请求都是潜在的导致应用失效的原因。更严重的是,这些应用可能被其他服务依赖,由于每个服务都有诸如请求队列,线程池,或者其他系统资源等,一旦某个服务失效或者延迟增高,会导致更严重的级联失效。

请求拓扑结构-级联失效

如果这些网络请求通过第三方客户端发出,问题会变得更加严重,因为这些第三方客户端对于应用来说相当于『黑盒』——无法了解其实现细节,随时可能发生变更,网络/资源配置随客户端的不同而不同,同时又难以监控和修改。同时,应用依赖链中的服务可能非常耗时,或者这些可能导致问题的网络请求根本没有被我们的应用显式地调用!

网络连接可能失败或者降级、服务或者服务器可能失效或者变慢、依赖的库或者部署的服务可能发生行为变更或性能变更,亦或是依赖的服务本身有 bug。

以上种种,都会导致失效或高延迟,为了使我们的系统更加鲁棒,不至于因为单个服务出现上述问题而失效,我们需要将这些问题进行隔离。

Hystrix 的设计原则

  • 防止单个依赖耗尽容器(例如 Tomcat)内所有用户线程
  • 降低系统负载,对无法及时处理的请求快速失败(fail fast)而不是排队
  • 提供失败回退,以在必要时让失效对用户透明化
  • 使用隔离机制(例如『舱壁』/『泳道』模式,熔断器模式等)降低依赖服务对整个系统的影响
  • 针对系统服务的度量、监控和报警,提供优化以满足近实时性的要求
  • 在 Hystrix 绝大部分需要动态调整配置并快速部署到所有应用方面,提供优化以满足快速恢复的要求
  • 能保护应用不受依赖服务的整个执行过程中失败的影响,而不仅仅是网络请求

Hystrix 如何实现上述功能?

  • 将所有请求外部系统(或者叫依赖服务)的逻辑封装到 HystrixCommand 或者 HystrixObservableCommand 对象中,这些逻辑将会在独立的线程中被执行(利用了设计模式中的 Command模式
  • 对那些耗时超过设置的阈值的请求,Hystrix 采取自动超时的策略。该策略默认对所有 Command 都有效,当然,你也可以通过设置 Command 的配置以自定义超时时间,以使你的依赖服务在引入 Hystrix 之后能达到 99.5% 的性能
  • 为每一个依赖服务维护一个线程池(或者信号量),当线程池占满,该依赖服务将会立即拒绝服务而不是排队等待
  • 划分出成功、失败(抛出异常)、超时或者线程池占满四种请求依赖服务时可能出现的状态
  • 引入『熔断器』机制,在依赖服务失效比例超过阈值时,手动或者自动地切断服务一段时间
  • 当请求依赖服务时出现拒绝服务、超时或者短路(多个依赖服务顺序请求,前面的依赖服务请求失败,则后面的请求不会发出)时,执行该依赖服务的失败回退逻辑
  • 近实时地提供监控和配置变更

当使用 Hystrix 包装了你的所有依赖服务的请求后,上面图中所示的系统拓扑将会变成如下形式:

请求拓扑结构-使用 Hystrix

每个依赖服务都被隔离开来,Hystrix 会严格控制其在延迟发生时对资源的占用,并在任何失效发生时,执行失败回退逻辑。

分享到:
评论

相关推荐

    Hystrix-dashboard+turbine-web+说明文档

    Hystrix-dashboard+turbine-web+说明文档,用于Hystrix项目的监控、多实例的聚合监控

    Hystrix组件学习笔记及debug调试截图

    文档中关于Hystrix相关的学习笔记及调试截图,想学原理的很适合

    Hystrix服务高可用保障框架.pdf

    讲述hytrix的原理及相关配置,对hytrix的容错机制、降级机制、熔断机制、限流机制以及服务治理等作出详细说明。

    spring cloud 组件整合 eureka gateway feign hystrix,各个模的整合,供大家一起学习

    spring cloud 组件整合 eureka gateway feign hystrix,各个模的整合,供大家一起学习

    SpringCloud-Hystrix原理

    Hystrix官网的原理介绍以及使用介绍非常详细,非常建议看一遍,地址见参考文档部分。1Hystrix能做什么通过hystrix可以解决雪崩效应问题,它提供了资源隔离、降级机制、融断、缓存等功能。资源隔离:包括线程池隔离和...

    一个基于SpringBoot的微服务脚手架+源代码+文档说明

    - 使用SpringFox生成API文档 - 提供Swagger-UI可测试API界面 - 提供独立的HTML静态文档生成模块 - logback分别打印-info与-error双日志 - ExceptionHandler统一异常处理 - Hystrix服务融断及降级 - 选用较繁琐的...

    circuit:高效且功能完整的Hystrix like Go断路器模式的实现

    在上了解有关Hystrix和其他断路器解决的问题的更多。 优点的简短摘要是: 下游服务失败,所有请求永久挂起。 没有电路,您的服务也将永远挂起。 因为您有电路,所以可以快速检测到此故障,并且可以在等待下游服务...

    springCloud全部基础的demo项目.rar

    springCloud项目基础demo全部文件夹,包括文档桌面,代码中有说明与注释,附带参考的博客地址 项目文件夹介绍: springcloud-eureka ---注册中心(核心)参考博客地址: ... client ---- feign方式调用demo项目 参考...

    Spring Cloud 阶段性开发与测试

    005-接入Hystrix断路器,实现服务的熔断与降级; 006-接入Hystrix-Dashboard,实现微服务监控; 007-接入zuul,实现服务的代理、路由、过滤; 008-接入config,实现服务端的配置; 009-接入config,实现客户端的配置...

    lamp-cloud微服务脚手架

    核心技术采用Nacos、Fegin、Ribbon、Zuul、Hystrix、JWT Token、Mybatis、SpringBoot、Redis、RibbitMQ等主要框架和中间件。 lamp-cloud微服务脚手架功能: 1、服务注册&发现与调用: 基于Nacos来实现的服务注册与...

    thickskin:受 Netflix Hystrix 启发的延迟和容错 Python 库

    厚脸皮 受 Netflix 的 Hystrix 启发的延迟和容错 Python 库。 自由软件:MIT 许可证 安装 pip install thickskin 文档 发展 要运行所有测试,请运行: tox

    服务熔断:Hystrix容错框架【包括之前章节Demo】

    个人学习练习demo,对应Blog:springCloud学习【二】:服务熔断:Hystrix容错框架【实例】,里面是完整的demo包,registry是注册中心模块,service是服务提供者,consume和consume-feign是消费服务的两种实现方式,...

    springcloud基础文档.docx

    springcloud基础文档,内涵框架技术的整合,Eureka、熔断器Hystrix和监控工具、配置中心、服务网关zuul、链路跟踪(我们公司最终是用nacos作为配置中心和服务中心,有技术问题可私信)

    tourine:Hystrix 启发了 Metrics 的记者

    #Tourine:Hystrix 启发了 Metrics 的记者 提供有价值的实时和历史数据。 为 hystrix 命令提供了一个简单的实时视图。 Tourine 将指标公开为 Hystrix 事件流中的“Hystrix 命令”,以便与 Hystrix 仪表板一起使用。...

    weshop-微信小程序应用商城

    ├── weshop-hystrix-dashboard -- 断路器监控面板[端口:1301] ├── weshop-example -- 项目示例工程 | ├── weshop-example-api -- 远程服务api接口 | ├── weshop-example-provider -- 服务提供方[端口:...

    springcloud项目实战微服务架构源代码+文档说明(电商版一套完整架构)

    使用 SpringCloud Eureka作为注册中心、Feign客户端调用工具、断路器Hystrix 视图展示使用Freemarker、数据库层使用Mybatis框架、缓存使用Redis、数据库使用MySQL 项目管理工具使用Maven、版本控制工具使用SVN、项目...

    spring boot 实践学习案例,与其它组件整合

    spring boot 实践学习案例,与其它组件结合如 mybatis、jpa、dubbo、redis、mongodb、memcached、kafka、... - Spring Cloud 入门,包括 Eureka(服务注册与发现)、Config(配置中心)、Hystrix(断路器)、Bus(消息总线) 等

    hystrixjs-example:https更好的示例

    安装节点模块npm install 启动模拟服务器: npm run mock-server 启动应用程序: npm startHystrix仪表板该应用程序将流显示在路径/hystrix.stream 有关如何启动请参考文档。 仪表板运行后,将其打开并将URL设置为...

    springcloud-all-demo.rar

    最新版本2.2.3的springcloud全家桶。包含gateway、eureka、hystrix、feign、ribbon、config。eureka和mvc还有service都是多节点...实现了gateway和hystrix的整合,feign和hystrix的整合,开箱即用,还有使用和测试文档

Global site tag (gtag.js) - Google Analytics