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文档翻译之运维的更多相关文章

  1. (转)实验文档5:企业级kubernetes容器云自动化运维平台

    部署对象式存储minio 运维主机HDSS7-200.host.com上: 准备docker镜像 镜像下载地址 复制 12345678910111213141516 [root@hdss7-200 ~ ...

  2. redis运维相关

    一.redis都有哪些数据类型?分别在哪些场景下使用比较合适?二.redis双写不一致三.雪崩和穿透四.redis的过期策略,LRU五.redis是如何实现高性能高并发六.如何保证Redis的高并发和 ...

  3. hystrix文档翻译之Dashboard

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

  4. IT运维监控解决方案介绍

    现状 •小公司/ 创业团队< 500台服务器规模 开源方案:Zabbix.Nagios.Cacti- 云服务提供商:监控宝.oneAlert等 •BAT级别> 10万台服务器 投 ...

  5. 一切从“简”,解放IT运维人员

    运维人的神技 运维既是个技术活儿也是个苦差事,而运维人员被期望有着无限的技能:主机.存储.网络.操作系统样样精通,而且还要会写SQL.shell.开发语言java..net.python等等,对业务更 ...

  6. 马哥linux运维初级+中级+高级 视频教程 教学视频 全套下载(近50G)

    马哥linux运维初级+中级+高级 视频教程 教学视频 全套下载(近50G)目录详情:18_02_ssl协议.openssl及创建私有CA18_03_OpenSSH服务及其相关应用09_01_磁盘及文 ...

  7. IIS日志-网站运维的好帮手

    对于一个需要长期维护的网站来说,如何让网站长久稳定运行是件很有意义的事情. 有些在开发阶段没有暴露的问题很有可能就在运维阶段出现了,这也是很正常的. 还有些时候,我们希望不断地优化网站,让网站更快速的 ...

  8. 做linux运维工程师,必须要掌握以下几个工具

    linux系统如果是学习可以选用redhat或centos,特别是centos在企业中用得最多,当然还会有其它版本的,但学习者还是以这2个版本学习就行,因为这两个版本都是兄弟,没区别的,有空可以再研究 ...

  9. SQL Server 自动化运维系列

    本系列为SQL SERVER自动化运维的一些操作技巧点,所有内容都是根据日常运维过程中最经常遇到的问题,并为此形成了一些自动化运维的方式,皆为原创.... 供部分DBA和开发人员浏览借鉴,所应用平台基 ...

随机推荐

  1. centos7.8 安装部署 k8s 集群

    centos7.8 安装部署 k8s 集群 目录 centos7.8 安装部署 k8s 集群 环境说明 Docker 安装 k8s 安装准备工作 Master 节点安装 k8s 版本查看 安装 kub ...

  2. neutron plugin 笔记

    neutron-plugin 分为 core-plugin 和 service-plugin 两类 L2-L3称为core plugin,包含network.subnet.portL4-L7称为ser ...

  3. AI and Neuroscience: A virtuous circle

    转载:https://deepmind.com/blog/article/ai-and-neuroscience-virtuous-circle AI领域最近取得了显著进展.人工系统现在优于人类专家A ...

  4. Bootstrap告警框(alert)实现弹出效果和短暂消失后上浮消失

    最近用到bootstrap的告警框时发现只有html的说明,就自己写了一个弹出告警框和弹出短暂显示后上浮消失的告警框. 直接上JS代码了,可以copy过去直接用(使用bootstrap的UI框架的情况 ...

  5. antdv时间选择a-date-picker设置日期可选范围(近一周、近半月、近一月等) - moment.js

    Vue->Template: <a-date-picker v-model="value" :disabled-date="disabledDate" ...

  6. 关键词seo优化的核心和重点

    http://www.wocaoseo.com/thread-197-1-1.html        网站SEO优化是很多站长所必须要面对的问题,但是很多新手站长对关键词应如何选择,关键词要如何布局一 ...

  7. 使用JS制作小游戏贪吃蛇

    先看效果图: 过程如下: 1.首先创建一张画布地图<div class="map"> </div>: 2.创建食物的自调用函数 (function (){ ...

  8. unimrcp plugin 分析

    摘要: unimrcp 访问媒体资源是通过插件实现,社区的代码给出了demo plugin,但是距离一个生产插件还是有一段的距离.这边文章介绍插件的整个逻辑过程,以及如何实现我们自己的插件.

  9. npm install @wepy/cli -g 出错

    npm install @wepy/cli -g 出错:npm ERR! Unexpected end of JSON input while parsing near '...1.0.0" ...

  10. 合并模拟器和真机的静态库动态库aggregate

    创建Aggregate的target 在Build Phases 添加Run Script,内容为 scriptFile=${SRCROOT}/universalA.shsh ${scriptFile ...