注:本文并非是精确的文档翻译,而是根据自己理解的整理,有些内容可能由于理解偏差翻译有误,有些内容由于是显而易见的,并没有翻译,而是略去了。本文更多是学习过程的产出,请尽量参考原官方文档。

什么是Hystrix?

在分布式系统中,不可避免地会出现许多依赖的服务不可用的情况。Hystrix通过实现容错和延时容忍逻辑来实现对相互依赖的分布式服务的控制。Hystrix主要通过隔离服务的调用,阻止级联的服务调用失败以及提供降级策略来提升系统的整体可伸缩性(resiliency)。

Hystrix 在2011年开始由Netflix的API团队开发,并逐渐在Netflix内部得到广泛使用。

Hystrix的目的

Hystrix被设计用来:

  • 通过引入第三方客户端库实现对保护应用避免受延时和失败的服务调用带来的影响。
  • 在复杂的系统中防止级联故障(cascading failures)
  • 快速失败,快速回复
  • 回退和优雅降级
  • 提供近实时的监控、告警和操作控制。

Hystrix解决什么问题?

分布式系统中存在众多的服务,每个服务都难免出现不可用的情况。如果主应用(关注的应用)没有和这些不可用的服务隔离,将遭受被这些服务拖垮的危险。

例如,对于一个依赖30个可用性为99.99%服务的应用,其本身的可用性将是:

0.9999^30=99.7%

这意味着,10,000,000次前端中,将有30,000次失败

每个月中,应用不可用的时间将至少是2小时

实际情况往往比这更差。


在一切都正常时,客户发来的请求的调用示意如下:

当某一个后台服务出现超时,或者不可用,他将阻塞整个请求:

对于访问量大的后台服务,如果一旦出现超时,数秒内真个应用的系统资源可能会被立刻耗尽。

在应用中,任何一个通过网络实现的外部调用都是可能失败的。更甚的是,这些不可用的服务,将会逐渐耗尽所有调用其提供服务的其他应用的资源,最终可能导致整个系统的雪崩。

对于通过第三方组件实现网络访问的情况,这种问题更加严重。第三方组件对于应用来说是一个黑盒,其实现细节不可见,对于不同的客户端组件,网络和资源的配置情况各不相同,并且通常难以修改和监控。

更糟糕的是,还可能存在那些我们并不知道的由第三方组件引入的可变的依赖,引起巨大的网络资源消耗或者错误的远程调用。

网络不可用;服务或者节点失效;新组件引入的功能改变;组件的bug。凡此种种,都是需要隔离起来的错误,避免一个服务的不可用导致整个应用或者系统的不可用。

##Hystrix 遵循的设计原则:

  • 防止单个依赖耗尽整个容器用户线程。
  • 采用去掉负荷和快速失败,而不是排队
  • 在任何可行的情况下通过降级避免失败
  • 通过隔离策略(隔离舱bulkhead,泳道swimlan,断路器circuit break 设计模式)来限制单个依赖可能引起的影响
  • 通过近实时的指标、监控和告警来降低错误发现时间
  • 配置修改快速生效,支持动态属性设置,提供实时修改配置功能
  • 避免应用受到所有的依赖的失败带来的影响,而不只是网络拥堵

Hystrix如何实现其目标?

  • 将对外部系统的调用封装到HystrixCommand或者HystrixObserverbalCommand对象中,此对象通常在独立的线程中执行(命令模式)
  • 根据给定的配置,对于超过时间上上限的调用进行统计
  • 对每个依赖维护一个线程池(或者信号量),当线程池满时,触发该依赖的请求将被直接拒绝,而不是排队等待
  • 统计调用的成功、失败、超时、线程拒绝次数
  • 当失败的调用超过一定预设的阈值后,在一定时间内触发熔断
  • 在请求失败、拒绝、超时、或者熔断时,执行降级逻辑
  • 对各项指标进行近实时的监控和配置修改

当采用Hystrix封装各依赖时,服务调用示意图如下:

[Reference]

https://github.com/Netflix/Hystrix/wiki

[翻译]Hystrix wiki–Home的更多相关文章

  1. [翻译]Hystrix wiki–How it Works

    注:本文并非是精确的文档翻译,而是根据自己理解的整理,有些内容可能由于理解偏差翻译有误,有些内容由于是显而易见的,并没有翻译,而是略去了.本文更多是学习过程的产出,请尽量参考原官方文档. 流程图 下图 ...

  2. PHP经验——PHPDoc PHP注释的标准文档(翻译自Wiki)

    文档注释,无非“//”和“/**/”两种 ,自己写代码,就那么点,适当写几句就好了:但是一个人总有融入团队的一天,团队的交流不是那几句注释和一张嘴能解决的,还需要通用的注释标准. PHPDoc是PHP ...

  3. 翻译:wiki中的business logic词条

    Business logic 业务逻辑 From Wikipedia, the free encyclopedia 来自Wikipedia,自由的百科全书 In computer software, ...

  4. 翻译wiki(一):Bios boot partition

    文章翻译自wiki,水平有限,若有错万请见谅.原文:https://en.wikipedia.org/wiki/BIOS_boot_partition BIOS boot partition是一个分区 ...

  5. 【附1】hystrix详述(1)

    一.hystrix的作用 控制被依赖服务的延时和失败 防止在复杂系统中的级联失败 可以进行快速失败(不需要等待)和快速恢复(当依赖服务失效后又恢复正常,其对应的线程池会被清理干净,即剩下的都是未使用的 ...

  6. 【第十九章】 springboot + hystrix(1)

    hystrix是微服务中用于做熔断.降级的工具. 作用:防止因为一个服务的调用失败.调用延时导致多个请求的阻塞以及多个请求的调用失败. 1.pom.xml(引入hystrix-core包) 1 < ...

  7. 附1 hystrix详述(1)

    一.hystrix的作用 控制被依赖服务的延时和失败 防止在复杂系统中的级联失败 可以进行快速失败(不需要等待)和快速恢复(当依赖服务失效后又恢复正常,其对应的线程池会被清理干净,即剩下的都是未使用的 ...

  8. 第十九章 springboot + hystrix(1)

    hystrix是微服务中用于做熔断.降级的工具. 作用:防止因为一个服务的调用失败.调用延时导致多个请求的阻塞以及多个请求的调用失败. 1.pom.xml(引入hystrix-core包) <! ...

  9. 传统项目利用Hystrix实现热点接口的服务隔离

    这段时间接了个需求,需要在我目前负责的数据系统上加个接口,主要是实现用户行为的记录.前端对接的项目主要有公司的PC,WAP,WEIXIN,APP等,每个端大概有两台左右的负载.因为目前我的这个项目主要 ...

随机推荐

  1. 搭建git远程仓库

    基于本地协议搭建git远程仓库 1.任意目录下执行git init -bare创建裸仓库,建议目录名称以.git结尾 2.共享此目录,windows下右键裸仓库目录,切换到共享面板设置完成即可获取共享 ...

  2. js 时间格式化 (兼容safari)

    js 时间格式化,兼容IE8和safari浏览器. function formatDate(date, fmt, near, type) { var dateStr = date; if (!date ...

  3. LESS嵌套中的Mixins和classes

    less的嵌套规则对于有效组织你的css代码有较好的作用.其中使用mixin或者class都可以作为被嵌套的实体,但是二者还是有区别的: mixin必须由.name+(){}的pattern来定义,而 ...

  4. C++ Deque(双向队列)

      C++ Deque(双向队列)是一种优化了的.对序列两端元素进行添加和删除操作的基本序列容器.它允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连续的内存块,而是采用多个连续的 ...

  5. React - React Developer Tools开发者工具的安装与使用(Chrome调试插件)

    原文地址:http://www.cnplugins.com/zhuanti/how-to-use-react-tools.html 虽然我们曾经在React开发者工具的基础介绍里面有概括性的介绍过Re ...

  6. NET(C#):使用HttpWebRequest头中的Range下载文件片段

    转自:http://www.mgenware.com/blog/?p=220 HTTP请求包头信息中有一个Range属性可以指定索取部分HTTP请求的文件.在.NET中则通过HttpWebReques ...

  7. SQLmap简介以及防火墙绕过方法

    简介 许多现实中对于网站的攻击往往是由于网站没有及时更新或者对于用户的输入没有进行检查.从缓冲区溢出说起,这样一种针对系统脆弱性的威胁,最根本的问题还是在于对于用户的输入没有进行检查.作为主要威胁之一 ...

  8. Windows环境双系统安装环境配置

    (最惊喜的事情莫过于...在安装系统完成重新试图安装Docker时解决了关于HyperV的问题,结果提示Docker只能在Win10 Pro或者Enterprise环境下运行...我很坚强...可以按 ...

  9. MATLAB入门学习(四)

    今天我们开始学编程啦~ 点击左上角的这个进入编程界面 这是新建新的.m文件,也就是matlab命令文件, 一般命令文件不带输入和输出的参数,只是一些命令的组合,带有输入输出参数的文件是函数文件~ 下面 ...

  10. [USACO07DEC]Sightseeing Cows

    嘟嘟嘟 这题好像属于01分数规划问题,叫什么最优比率生成环. 题目概括一下,就是求一个环,满足∑v[i] / ∑c[i]最大. 我们可以堆上面的式子变个型:令 x = ∑v[i] / ∑c[i],则x ...