hystrix文档翻译之概述
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文档翻译之概述的更多相关文章
- hystrix文档翻译之Dashboard
Dashboard Hystrix Dashboard可以让你实时监控hystrix的metrics信息. 当netflix开始使用dashboard后,运维效率得到了极大的提升,并且极大降低了大多数 ...
- hystrix文档翻译之插件
插件 可以通过实现插件来改变Hystrix的行为.可以通过HystrixPlugins来注册自定义插件,这些插件会被应用到HystrixCommand,HystrixObservableCommand ...
- hystrix文档翻译之metrics
metrics和监控 动机 HystrixCommands和HystrixObservableCommands执行过程中会产生相关运行情况的metrics.这些metrics对于监控系统表现有很大的 ...
- hystrix文档翻译之配置
Hystrix使用Archaius作为配置的默认实现,下面介绍的是HystrixPropertiesStrategy的默认实现,你也可以通过插件方式重新实现. 每一个配置有四个级别: 全局默认 当下面 ...
- hystrix文档翻译之运维
hystrix不仅用作工程可靠性还可以用来运维. 这里将会分享一个拥有100+Hystrix命令,40+线程池,每天有100亿次线程请求,2000亿次信号量请求的系统是如何使用hystrix运维的.这 ...
- hystrix文档翻译之如何使用
Hello World! 使用HystrixCommand实现“Hello World”. public class CommandHelloWorld extends HystrixCommand& ...
- hystrix文档翻译之工作原理
流程图 下面的图片显示了一个请求在hystrix中的流程图. 1.构造一个HystrixCommand或者HystrixObservableCommand对象 第一步是创建一个HystrixComma ...
- hystrix文档翻译之开始使用
获取包 使用maven获取包. <dependency> <groupId>com.netflix.hystrix</groupId> <artifactId ...
- python文档翻译之概述
Python是一个使用方便且功能强大的变成语言.它具有高效的高级数据结构和面向对象编程特性.其优雅的语法.动态类型.解释型特性使得它成为大多数平台上脚本和快速应用程序开发的理想语言. Python解释 ...
随机推荐
- Cirros镜像
Openstack的开发,基本都使用这个image来测试,因为他比较小,只有10M. 镜像介绍 镜像的地址: https://launchpad.net/cirros/trunk/0.3.0/+dow ...
- Java树形结构中根据父类节点查找全部子类节点
上一篇文章介绍了两种树形结构数据整合json格式的方法,第一种方法中有根据父类获取全部子类的方法,这里单独拿出来再说一下. 仍然是利用递归来整合,代码如下: //根据父节点获取全部子节点 public ...
- Java8中list.sort的lamba表达式
最近写代码,需要对list集合排序,IDEA总是黄色警告: Reports calls to Collections.sort(list, comparator) which could be rep ...
- A review of learning in biologically plausible spiking neural networks
郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Contents: ABSTRACT 1. Introduction 2. Biological background 2.1. Spik ...
- SCE信号期末复习省流小助手(懒人版)
XDU-SCE网信院信号期末复习省流小助手(懒人版) 本人根据西安电子科技大学网络与信息安全18年期末考试整理的考点和题型 以下题型代表了信号与系统课程的 精髓 若能掌握以下知识点和题型,80分稳有: ...
- Qt QTranslator 实现多语言转换
1.在*.pro文件里面添加TRANSLATIONS += English.tsChinese.ts根据自己想要添加多少种语言和什么语言视情况添加. 2.a.通过qt ui设计师添加的文字 首先记得选 ...
- 不要再学 JSP 了,学 SpringBoot + Thymeleaf + Vue吧
老读者就请肆无忌惮地点赞吧,微信搜索[沉默王二]关注这个在九朝古都洛阳苟且偷生的程序员.本文 GitHub github.com/itwanger 已收录,里面还有我精心为你准备的一线大厂面试题. 读 ...
- FZU - 2037 -Maximum Value Problem(规律题)
Let’s start with a very classical problem. Given an array a[1…n] of positive numbers, if the value o ...
- 利用css3 transform实现一个时钟
transform:rotate(1deg) <!DOCTYPE html> <html lang="en"> <head> <meta ...
- 持续部署入门:基于 Kubernetes 实现蓝绿发布
前言 软件世界比以往任何时候都更快.为了保持竞争力,需要尽快推出新的软件版本,而不会中断活跃用户访问,影响用户体验.越来越多企业已将其应用迁移到 Kubernetes. 在 Kubernetes 中有 ...