Hystrix 介绍

简介: Hystrix

Hystrix 是什么


在分布式系统,我们一定会依赖各种服务,那么这些个服务一定会出现失败的情况,Hystrix就是这样的一个工具,它通过提供了逻辑上延时和错误容忍的解决力来协助我们完成分布式系统的交互。Hystrix 通过分离服务的调用点,阻止错误在各个系统的传播,并且提供了错误回调机制,这一系列的措施提高了系统的整体服务弹性。

Hystrix 的历史

Hystrix 是2011 从Netflix API 团队发展而来。 2012 Hystrix持续发展并且成熟,并且有非常多的团队开始采用Hystrix.现在在Netflix每天有数十万的线程,数百万的独立信号量通过Hystrix执行,这几大增强了服务的弹性和服务时间。

Hystrix 是干嘛的


Hystrix 被设计用来做了下面几件事:

  • 保护系统间的调用延时以及错误,特别是通过第三方的工具的网络调用
  • 阻止错误在分布式系统之前的传播
  • 快速失败和迅速恢复
  • 错误回退和优雅的服务降级
  • 提供近乎实时的系统监控,报警和动态操控

Hystrix 解决了什么问题


应用在复杂的分布式系统中存在非常多的依赖,这其中一些服务不可避免的会失败,如果主应用程序没有和依赖的服务隔离开来,那么它的服务成功率就会下降

举个例子, 一个服务依赖30个不同的服务,每个服务的服务成功率为99.99%,这个服务的成功率就可以这样计算:

99.99*99.99。。。。。30 = 99.7 这样算来 1000个请求中就有3个是失败的, 这样一来 每个月基本上会有差不多2个小时的停机时间

这只是一个计算值,现实情况可以比这个更糟糕

尽管我们我们可以将每个服务的成功率再往上提升,比如现在没1万个请求才会失败一个,但是还是任然每个月了数小时的停机,


当每个服务都是健康的时候,服务间的依赖调用关系如下图:

当其中的某一个服务变得延时较大时,这个服务将成为系统的瓶颈:

当有大量的网络流量依赖于一个后端的服务时,瞬间就会导致整个系统的资源都受到影响.

在应用程序中,每一个通过网络或者使用第三方客户端发送出去的请求都有可能会失败,比失败更糟糕的是,这会增加服务间的调用延时。

上面的这些问题会变得更加的严重,当我们通过第三方客户端发送网络请求,因为第三方客户端对于我们而言是“黑盒”,并且它的实现是随时可能改变的。并且每一个客户端的资源配置都是不同的,这样就非常的难监控和改变。

。。。。。。

网络连接失败或者降级,服务或者服务机器停机或者变慢,新的客户端或者部署的新的服务改变了原有的行为,亦或者客户端有bugs。

上面的所有错误形式都需要被单独隔离出来,这样不至于一个简单的错误导致整个系统的失败。

Hystrix 的设计原则是什么


Hystrix工作方式如下:

  • 阻止一个单独的依赖耗尽系统的所有线程,比如(tomcat)
  • 使用快速失败代替将这个请求排队
  • 在任何可能失败的地方提供后退机制来确保用户不会看到错误
  • 使用隔离技术(比如:隔板,泳道,环路切断 模式)降低一个依赖的失败对整个系统的影响
  • 优化使得系统可以近乎实时的收集,监控,报警
  • 优化使得系统可以近乎实时的修改,并且可以近乎实时生效
  • 保护系统不仅仅在网络层面,也包括客户端层面的依赖执行的失败

Hystrix 是怎样的实现这些目标

Hystrix 通过如下的方式实现了这些目标:

  • 通过使用命令模式包装所有的调用外部系统的请求,这些个请求都单独的运行在不同的线程中,在Hystrix中主要通过 "HystirxCommand","HystixObservableCommand"实现
  • 调用超时比我们自定义的超时时间更久,所以我们在使用的过程中最好自定义网络调用的超时时间,在Hystrix中,提供了配置可以修改默认的超时时间,那么超时间到底应该定义为多少? 就一般经验值而言,设置为服务成功率为99.5%时的平均时间
  • 每一个服务都维护着一个小的线程池或者信号量,一旦线程池或者信号量饱和了,那么采取的策略是拒绝请求而不是将请求排队
  • 记录成功,失败,超时,线程拒绝数据
  • 提供一个回调接口,当一个请求失败,或者被拒绝,超时亦或者因为短路而拒绝
  • 监控系统运行数据并且可以近乎实时的修改系统配置
  • 一段时间内当短路发生时,拒绝所有的请求,或者当错误率超过了阀值

当你使用Hystrix包装所有的依赖时,系统的整体架构和上面的那张图差不多一致的,每一个依赖之间都是相互隔离的,这样可以为每一服务提供失败回滚逻辑等等。

目录
相关文章
|
弹性计算 Apache 云计算
产品动态丨阿里云计算巢月刊-2025年第4期
让优秀的企业软件生于云、长于云
|
算法 API 数据安全/隐私保护
电商 API 双平台实战:淘宝 item.get + 京东 item_detail 对接指南(附可复用代码 + 问题排查)
本文详细解析了淘宝和京东双平台API对接的核心流程,涵盖资质申请、凭证获取、签名生成、高频接口调用及常见问题解决方案,助力开发者高效实现商品数据同步与管理。
|
7月前
|
安全 关系型数据库 MySQL
阿里云云数据库RDS功能、优势、应用场景及收费标准与最新活动参考
阿里云的云数据库RDS是一款安全稳定、便捷易用、可弹性伸缩的关系型数据库服务,支持MySQL、SQL Server、PostgreSQL和MariaDB等主流数据库引擎。它提供高可用架构、自动化运维、安全防护及弹性扩展等核心功能,满足企业不同业务场景需求,如高可用与容灾、读写分离与负载均衡、安全与合规等。此外,阿里云还提供多款特惠云数据库产品及云服务器优惠活动,助力企业轻松上云,实现数据高效管理与业务创新提速。
|
监控 Java 编译器
限流、控并发、减GC!一文搞懂Go项目资源优化的正确姿势
本章介绍Go语言项目在构建与部署阶段的性能调优和资源控制策略,涵盖编译优化、程序性能提升、并发与系统资源管理、容器化部署及自动化测试等内容,助力开发者打造高效稳定的生产级应用。
|
Python
Numpy学习笔记(一):array()、range()、arange()用法
这篇文章是关于NumPy库中array()、range()和arange()函数的用法和区别的介绍。
1373 6
Numpy学习笔记(一):array()、range()、arange()用法
|
设计模式 前端开发 JavaScript
揭秘!前端大牛们如何巧妙利用JavaScript,打造智能交互体验!
【10月更文挑战第30天】前端开发领域充满了无限可能与创意,JavaScript作为核心语言,凭借强大的功能和灵活性,成为打造智能交互体验的重要工具。本文介绍前端大牛如何利用JavaScript实现平滑滚动、复杂动画、实时数据更新和智能表单验证等效果,展示了JavaScript的多样性和强大能力。
518 4
|
数据采集 测试技术 Swift
666条数据,训练LongWriter模型,写万字长文!模型&数据集均开源!
大模型的上下文(Context)支持越来越长的背景下,让通用的大模型遵循指令来保障长文本输出的长度,依然是一个挑战。
|
SQL 数据库 索引
SQL语句实现投影连接:技巧与方法详解
在SQL数据库操作中,投影连接(Projection Join)是一种常见的数据查询技术,它结合了投影(Projection)和连接(Join)两种操作
|
负载均衡 应用服务中间件 API
location` 块的语法、匹配规则、配置示例及其应用场景
location` 块的语法、匹配规则、配置示例及其应用场景
634 2
|
SQL
SQL Server如何编辑超过前200行的数据
原文:SQL Server如何编辑超过前200行的数据 从SQL Server 2008开始,微软为了提高查询效率等原因,右键点击表时弹出菜单中默认没有“显示所有行”,而以“选择前1000行”替代。这有时会为我们带来一些不便。
2752 0