zoukankan      html  css  js  c++  java
  • 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引发延时。 

  • 相关阅读:
    HDOJ2066 一个人的旅行 floyd
    手动添加数据源时DataGridViewComboBoxCell值出问题解决方法
    可伸缩的Form窗体!
    SharpMap项目Web控件学习!
    MVC和MVP的初步理解
    ArcEngine编辑功能(五)
    胡言乱语:实体具有继承关系的空间数据库设计方法?
    WinForm单例窗体的实现
    4. 模板模式和建造者模式
    Oracle笔记(0):在Win2008系统上安装Oracle11g实践
  • 原文地址:https://www.cnblogs.com/zhangwanhua/p/8084945.html
Copyright © 2011-2022 走看看