hystrix文档翻译之运维
hystrix不仅用作工程可靠性还可以用来运维。
这里将会分享一个拥有100+Hystrix命令,40+线程池,每天有100亿次线程请求,2000亿次信号量请求的系统是如何使用hystrix运维的。这里的截图和问题分析都是来自于netflix api系统的真实环境。
如何配置和调优依赖调用
通常部署和配置一个依赖调用,需要根据它在生成环境情况下不断调优期配置。实践过程如下:
1.使用默认1000ms的timeout时间,除非有必要修改它。
2.使用默认10个线程池,除非有必要修改它。
3.使用灰度发布,如果运行正常,继续发布。
4.在生产环境运行24小时。
5.观察监控和报警。
6.在运行24小时后,根据流量和延时计算最严格的熔断器配置
7.改变配置并且持续观察
8.如果系统性能发生改变,则继续调整配置。
下面的图表展示了如何选择线程池大小,队列大小,timeout时间。

对大多数的熔断器来说,应该设置timeout的值接近99.5%的系统请求延时,这样可以保证异常请求不会耗尽系统资源。也需要调整线程池和队列大小,避免资源被耗尽。
配置和调优依赖调用的原则:
- 根据实际的流量调整
- 根据监控不断调整设置
合理的抖动和失败
Hystrix使用毫秒级的粒度来测量和报告监控数据。在大型的集群中,超时、线程池拒绝、延时等问题在任何时刻都可能出现。
下面的图显示了netflix api 监控的命令报表。黄色的和紫色的数字分别代表243台机器10秒内超时和线程池拒绝的个数。

大多数的系统有很多的异常抖动,甚至会突破延时比率。 在Hystrix中,你能清晰的看到系统的表现。你会看到很多延时数据,是没有用Hystrix执行无法看到的。 有以下几类原因:
- 本机进行垃圾回收。
- 依赖服务进行垃圾回收。
- 网络问题。
- 不同请求的负载不同。
- 缓存失效。
- 突发的大量请求。
- 部署发布。
延时
如果发现有延时,并不需要马上更改配置。如果配置正确,Hystrix会正确执行降级。
在Netflix使用Hystrix初期,当系统出现延时或异常时,我们共同的反应是动态更改配置来提高线程池大小,timeout时间,来让他恢复工作。但这是错误的,如果你的系统配置是合理的,当出现timeout,拒绝,熔断时,首先应该解决问题的根本原因。
不要设置过大的配置,这样会导致资源被耗尽。
举一个例子,假设现在有一个100台机器组成的集群,每个机器设置10个并发连接。那么总的机器可以处理1000个并发链接。正常情况下一般有200~300个并发连接,现在因为系统延时的原因,连接数变成了1000个。如果我们把并发数调成每个机器20个,我们会发现并发数会上升到2000。这样只会使情况更加糟糕。这也是熔断器存在的一个原因,在系统性能变成时,减少系统的压力来给系统一段时间进行恢复。
举一个例子,有一个被依赖的服务出现了很高的延时并且引起了熔断,但整个系统只有这一个服务被熔断了,其他的服务依然可以正常运行。

总而言之,当服务被熔断、超时、线程池拒绝时,在Hystrix层面需要服务自己恢复到正常状态而不是更改Hystrix配置。Hystrix就是用来隔离延时的服务,让他们可以快速恢复的工具。
依赖的失败

上面的图表显示了有一个服务有20%的异常,有严重的影响,但还没有被熔断。但其他几个服务都没有受到影响。这个例子中我们会发现,这服务大部分是异常而非延迟,因为黄色的数字0代表延时,而红色的数字17729代表异常。
下面的一张表显示了有这种类型的异常的服务的趋势

依赖失败降级
下面的截图显示了一个因为异常而出现的熔断。有99.5的请求延迟了。依赖服务执行过程将导致线程池耗尽和timeout异常。但是整个系统只有一个服务出现了熔断,蓝色的数字表示熔断而拒绝的请求数,黄色的数字表示timeout的请求数。

因为熔断服务执行了降级操作,返回了降级结果,所以其他的服务都正常。
连级失败
下面的图表显示了因为一个服务的性能延时,导致了整个系统的性能延时。

下图解释了防止连级错误的方法:

如果所有的服务都变坏了,也可能是你的系统出现了问题,而不是依赖服务。

有一下两种出现系统异常的例子
系统性能出现问题,价值过高,cup使用率过高。
内存泄漏导致gc引发延时。
hystrix文档翻译之运维的更多相关文章
- (转)实验文档5:企业级kubernetes容器云自动化运维平台
部署对象式存储minio 运维主机HDSS7-200.host.com上: 准备docker镜像 镜像下载地址 复制 12345678910111213141516 [root@hdss7-200 ~ ...
- redis运维相关
一.redis都有哪些数据类型?分别在哪些场景下使用比较合适?二.redis双写不一致三.雪崩和穿透四.redis的过期策略,LRU五.redis是如何实现高性能高并发六.如何保证Redis的高并发和 ...
- hystrix文档翻译之Dashboard
Dashboard Hystrix Dashboard可以让你实时监控hystrix的metrics信息. 当netflix开始使用dashboard后,运维效率得到了极大的提升,并且极大降低了大多数 ...
- IT运维监控解决方案介绍
现状 •小公司/ 创业团队< 500台服务器规模 开源方案:Zabbix.Nagios.Cacti- 云服务提供商:监控宝.oneAlert等 •BAT级别> 10万台服务器 投 ...
- 一切从“简”,解放IT运维人员
运维人的神技 运维既是个技术活儿也是个苦差事,而运维人员被期望有着无限的技能:主机.存储.网络.操作系统样样精通,而且还要会写SQL.shell.开发语言java..net.python等等,对业务更 ...
- 马哥linux运维初级+中级+高级 视频教程 教学视频 全套下载(近50G)
马哥linux运维初级+中级+高级 视频教程 教学视频 全套下载(近50G)目录详情:18_02_ssl协议.openssl及创建私有CA18_03_OpenSSH服务及其相关应用09_01_磁盘及文 ...
- IIS日志-网站运维的好帮手
对于一个需要长期维护的网站来说,如何让网站长久稳定运行是件很有意义的事情. 有些在开发阶段没有暴露的问题很有可能就在运维阶段出现了,这也是很正常的. 还有些时候,我们希望不断地优化网站,让网站更快速的 ...
- 做linux运维工程师,必须要掌握以下几个工具
linux系统如果是学习可以选用redhat或centos,特别是centos在企业中用得最多,当然还会有其它版本的,但学习者还是以这2个版本学习就行,因为这两个版本都是兄弟,没区别的,有空可以再研究 ...
- SQL Server 自动化运维系列
本系列为SQL SERVER自动化运维的一些操作技巧点,所有内容都是根据日常运维过程中最经常遇到的问题,并为此形成了一些自动化运维的方式,皆为原创.... 供部分DBA和开发人员浏览借鉴,所应用平台基 ...
随机推荐
- C# 中生成随机数
生成1-100之间的随机数: new Random().Next(1, 100) 但是输出的结果是一样的,因为Random调用无参的构造函数其实调用的是 有参的构造函数,传递的 默认值: Enviro ...
- A Review on Generative Adversarial Networks: Algorithms, Theory, and Applications
1 Introduction GANs由两个模型组成:生成器和鉴别器.生成器试图捕获真实示例的分布,以便生成新的数据样本.鉴别器通常是一个二值分类器,尽可能准确地将生成样本与真实样本区分开来.GANs ...
- SPSSAU数据分析思维培养系列3:分析思路篇
本文章为SPSSAU数据分析思维培养的第3期文章. 上文讲解如何选择正确的分析方法,除了有正确的分析方法外,还需要把分析方法进行灵活运用.拿到一份数据,应该如何进行分析,总共有几个步骤,第一步第二步应 ...
- MapReduce 的 shuffle 过程中经历了几次 sort ?
shuffle 是从map产生输出到reduce的消化输入的整个过程. 排序贯穿于Map任务和Reduce任务,是MapReduce非常重要的一环,排序操作属于MapReduce计算框架的默认行为,不 ...
- 区块链入门到实战(21)之以太坊(Ethereum) – 分布式应用(DApp)
作用:用户交互 分布式应用(DApp)是运行在区块链之上的应用程序,支持区块链网络中用户之间的交互. DApp(decentralized application)的后端代码运行在区块链网络上,这个可 ...
- 初始化文章分类的方法 下拉的layui框
触发时机:页面加载完毕之后 实现步骤: 1.利用$.ajax()发起请求 (找接口文档) 2.在success成功回调里面获取服务器返回的数据,判断一下返回的success是否是0. 3.如果不是0, ...
- FormData格式的数据
向服务器提交的是FormData格式的数据 || 必须添加以下两个配置项 contentType:false, processData:false,
- 《MySQL数据库》MySQL备份恢复
前言 MySQL数据库最重要的部分就是数据,所以保证数据不被损坏尤为重要,大家都知道911事件,当时非常多的数据丢失,导致经济混乱.接下来我们就来讲讲MySQL是如何保障数据完整,应对特殊情况,如何恢 ...
- rust 模块组织结构
rust有自己的规则和约定用来组织模块,比如一个包最多可以有一个库crate,任意多个二进制crate.导入文件夹内的模块的两种约定方式... 知道这些约定,就可以快速了解rust的模块系统. 先把一 ...
- Spring_mybatis结合之1.1
Spring和mybatis结合,Spring管理容器,连接数据库等,mybatis负责管理sql语句,sql的入参和出参等 三种方法: 1.原始dao开发(不怎么用,好奇的宝宝可以自己搜搜.是dao ...