Hystrix是什么

  在一个大型的分布式系统中,难免有些依赖服务会失败。hystrix通过容错逻辑来控制不同服务间的交互。hystrix通过隔离各服务交互节点来防止连级错误,并且提供降级功能,最终保证系统的可靠性。

hystrix的历史

  略

hystrix作用

  hystrix被设计来解决一下问题:

  • 通过控制调用第三方包时的延时和错误来提供保护。
  • 避免复杂系统的连级错误。
  • 对于错误快速失败和恢复。
  • 当异常出现是提供降级服务。
  • 实时的监控,高警,和其他控制选项。

hystrix解决哪些问题

  一个复杂的分布式系统有大量的依赖服务,这些依赖服务在某些时刻难免会发生错误。如果这个系统没有对依赖服务进行隔离,它很容易因为依赖服务的异常而导致整个应用的挂机。

  举一个例子,有一个应用依赖了30个服务,每个服务有99.99%的时间是正常的。

  所以你可能认为对于整个系统而言,99.9930=99.7%的时间是正常的。一亿次请求会有3000000次失败,每个月会有2个小时的宕机时间。

  而实际的情况可能更差。每个依赖服务0.01%的异常,都可能导致整个系统可能潜在的宕机。

  健康的系统的请求流程如下:

  如果其中一个依赖服务出现延时,它将阻塞整个系统。

  在一个高并发的系统中,依赖服务的延时将会导致整个系统在极端的时间内资源耗尽。如果应用的并发量超过了依赖服务的处理能力,可能会导致请求失败,更坏的情况可能导致系统各类资源的耗尽从而引起连级错误。  

  很多时候第三方服务如同一个黑盒对外封闭,并且随时可能变更。而每个调用方的处理能力有不同。网络失败,服务延时,新的client部署,client包有bug,所有这些问题都会导致整个系统宕机。

  所以我们需要管理和隔离这些问题,避免一个服务失败导致整个系统宕机。

  hystrix设计原则:

  • 阻止依赖服务使用容器线程。
  • 快速失败来代替等待。
  • 提供降级功能。
  • 使用隔离技术来限制每个依赖的影响。
  • 通过实时metrics、监控、报警来来发现异常。
  • 使用实时配置来帮助系统恢复。
  • 控制第三方调用。

hystrix实现策略

  hystrix做了一下工作来保证系统稳定性。

  • 通过HystrixCommand或HystrixObservableCommand来封装和隔离所有的外部调用。
  • 定义外部服务调用的timeout时间。
  • 为每一个外部服务都维护一个独立的线程池,当请求超过线程池处理能力时,将会直接拒绝。
  • 记录成功,失败,timeout,线程池拒绝信息。
  • 对于异常比例超过指定值的服务,进行熔断操作。
  • 提供降级功能,当请求执行失败,拒绝,超时,熔断。
  • 实时监控metrics和配置。

  当使用hystrix来封装外部依赖时,如下图所示,所有的依赖都相互隔离。当异常出现时,系统会执行相应的降级逻辑。

  

    

  

hystrix文档翻译之概述的更多相关文章

  1. hystrix文档翻译之Dashboard

    Dashboard Hystrix Dashboard可以让你实时监控hystrix的metrics信息. 当netflix开始使用dashboard后,运维效率得到了极大的提升,并且极大降低了大多数 ...

  2. hystrix文档翻译之插件

    插件 可以通过实现插件来改变Hystrix的行为.可以通过HystrixPlugins来注册自定义插件,这些插件会被应用到HystrixCommand,HystrixObservableCommand ...

  3. hystrix文档翻译之metrics

     metrics和监控 动机 HystrixCommands和HystrixObservableCommands执行过程中会产生相关运行情况的metrics.这些metrics对于监控系统表现有很大的 ...

  4. hystrix文档翻译之配置

    Hystrix使用Archaius作为配置的默认实现,下面介绍的是HystrixPropertiesStrategy的默认实现,你也可以通过插件方式重新实现. 每一个配置有四个级别: 全局默认 当下面 ...

  5. hystrix文档翻译之运维

    hystrix不仅用作工程可靠性还可以用来运维. 这里将会分享一个拥有100+Hystrix命令,40+线程池,每天有100亿次线程请求,2000亿次信号量请求的系统是如何使用hystrix运维的.这 ...

  6. hystrix文档翻译之如何使用

    Hello World! 使用HystrixCommand实现“Hello World”. public class CommandHelloWorld extends HystrixCommand& ...

  7. hystrix文档翻译之工作原理

    流程图 下面的图片显示了一个请求在hystrix中的流程图. 1.构造一个HystrixCommand或者HystrixObservableCommand对象 第一步是创建一个HystrixComma ...

  8. hystrix文档翻译之开始使用

    获取包 使用maven获取包. <dependency> <groupId>com.netflix.hystrix</groupId> <artifactId ...

  9. python文档翻译之概述

    Python是一个使用方便且功能强大的变成语言.它具有高效的高级数据结构和面向对象编程特性.其优雅的语法.动态类型.解释型特性使得它成为大多数平台上脚本和快速应用程序开发的理想语言. Python解释 ...

随机推荐

  1. jqgrid 获取选中用户的数据插入

    因为查询出的表和被插入的表不是在同一个数据库,所以先从前台jqgrid表格中获取到数据后,再插入表中. 实现: 获取到jqgrid选中 的每行数据之后,发ajax请求把数据以json格式传入后台,后台 ...

  2. RPC 框架通俗解释 转自知乎(洪春涛)

    本地过程调用 RPC就是要像调用本地的函数一样去调远程函数.在研究RPC前,我们先看看本地调用是怎么调的.假设我们要调用函数Multiply来计算lvalue * rvalue的结果: 那么在第8行时 ...

  3. libview关于图片导入并显示

    1 程序框图->图形与声音->图形格式,选择“写入某个格式的图片”,然后在路径处创建输入控件,然后在“图片函数”中选择“绘制平面像素图”,在控件输出端“新图片”创建显示控件.打开前面板,在 ...

  4. 七脚OLED屏幕使用IIC接口

    7pin 0.96寸OLED模块支持SPI和IIC接口 默认是SPI接口;如果想用IC接口;操作如下几步骤: 1.将模块背面的电阻R3换到R1位置,此时将模块切换为IIC接口:电阻R8可以用0欧姆电阻 ...

  5. 贫血模型和DDD模型

    贫血模型和DDD模型 1.贫血模型 1.1 概念 常见的mvc三层架构 简单.没有行为 2.领域驱动设计 2.1 概念(2004年提出的) Domain Driven Design 简称 DDD DD ...

  6. 寻找猴王小游戏php代码

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 10款人气暴涨的PHP开源工具

    若想创建动态而又新颖的Web应用程序,PHP便是理想的选择.不用说,在Web开发世界里,PHP是最流行的语言之一.一些非常好用的PHP开源工具着实拯救了不少开发任务繁重的PHP开发人员,减轻他们的开发 ...

  8. 解Bug之路-dubbo应用无法重连zookeeper

    前言 dubbo是一个成熟且被广泛运用的框架.饶是如此,在某些极端条件下基于dubbo的应用还会出现无法重连zookeeper的问题.由于此问题容易导致比较大的故障,所以笔者费了一番功夫去定位,现将排 ...

  9. js实现树级递归,通过js生成tree树形菜单(递归算法)

    方法封装: /** * 数据转换为树形(递归),示例:toTreeByRecursion(source, 'id', 'parentId', null, 'children') * @param {A ...

  10. cookies、sessionStorage和localStorage

    浏览器的缓存机制提供了可以将用户数据存储在客户端上的方式,可以利用cookie,session等跟服务端进行数据交互.浏览器查看方式:  HTML4的本地存储 cookie 一.cookie和sess ...