Hystrix简介

客官°小女子只卖身不卖艺 2022-05-22 11:25 223阅读 0赞

本文主要参考:

https://github.com/Netflix/Hystrix/wiki

https://github.com/Netflix/Hystrix/wiki/Configuration

https://github.com/Netflix/Hystrix/wiki/How-it-Works

先简要的说一下什么是hystrix。

在分布式环境中,很多依赖的服务不可避免的会出现不可用的状态。hystrix是一个帮助你在分布式服务中添加延迟和容错逻辑的库。hystrix通过隔离服务间的访问,防止级联出错导致服务雪崩,同时提供了降级处理来实现容错。

hystrix有什么功能

  • 保护和控制依赖第三方访问的延迟和错误。
  • 防止在复杂的分布式环境中出现级联错误(服务雪崩)。
  • 快速失败,快速恢复。
  • 回退和优雅的降级
  • 接近实时的监控,报警和操作控制。

hystrix为了解决什么问题

在复杂的分布式架构下,会有很多的依赖,每一个依赖的服务都不可避免的出现错误。如果这些服务能够和依赖的服务进行隔离,那么失败的可能性就会降低很多。

比如:一个应用依赖30个服务,每一个服务的可靠性是99.99%,那么就是这样的

99.9930 = 99.7% uptime
0.3% of 1 billion requests = 3,000,000 failures
2+ hours downtime/month even if all dependencies have excellent uptime.

这样是很糟糕的。

尽管每个服务的出错的可能只在0.01%,但是很多的服务依赖的情况下,整个服务的可用性还是很低。(每个月1个小时的故障时间)。

那么在这样的情况下,hystrix的设计原则是什么呢?

  • 防止任何单个依赖用尽容器(tomcat等)的所有线程。
  • 减少负载和快速失败,而不是排队。
  • 在可行的情况下提供退路,保证用户不受故障影响
  • 采用隔离技术(比如仓壁、泳道和断路器模式)来限制单个依赖产生的影响。
  • 通过近乎实时的度量、监控和报警来优化发现时间
  • 通过低延迟的配置更改hystrix的大多数动态属性来优化恢复时间,这允许使用低延迟反馈循环进行实时操作修改。
  • 防止整个依赖客户端执行失败,而不仅仅是在网络通信中。

hystrix如何实现他的目标呢?

  • 包装调用到外部系统也就是HystrixCommand或者是HystrixObservableCommand,这些命令是执行在一个独立的线程中。
  • 调用时间超过你定义的阈值被认为是超时调用,超时时间有默认值,但是大部分可以通过自定义设置超时时间。
  • 为每一个依赖管理一个小的线程池,如果线程池满了,那么依赖当前依赖的请求会直接拒绝然后返回,而不是排队。
  • 度量成功数、失败数、超时数和线程拒绝数。
  • 手动开启断路器一段时间阻止所有请求特定服务的请求,或者自动的等待失败率超过设置的阈值。
  • 执行降级逻辑当请求出现错误,这些错误指的是拒绝、超时和短路。
  • 近实时的监控配置和变化。

发表评论

表情:
评论列表 (有 0 条评论,223人围观)

还没有评论,来说两句吧...

相关阅读