Netflix近日发布了Hystrix, 该库旨在通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。Hystrix具备拥有回退机制和断路器功能的线程和 信号隔离,请求缓存和请求打包(request collapsing,即自动批处理,译者注),以及监控和配置等功能。Hystrix源于Netflix API团队在2011年启动的弹性工程工作,而目前它在Netflix每天处理着数百亿的隔离线程以及数千亿的隔离信号调用。Hystrix是基于 Apache License 2.0协议的开源的程序库,目前托管在GitHub上。
复杂分布式架构通常都具有很多依赖。如果一个应用不能对来自依赖的故障进行隔离,那该应用本身就处在被拖垮的风险中。在一个高流量的网站中,某个单一的后端一旦发生延迟,将会在数秒内导致所有应用资源被耗尽。
Hystrix对来自依赖的延迟和故障进行防护和控制——这些依赖通常都是通过网络访问的。这样可以阻止故障的连锁反应,并允许你快速失败并迅速恢复,或者回退并优雅降级。
下面将显示Hystrix是如何工作的。你需要在HystrixCommand对象中对依赖调用进行包装。HystrixCommand遵照命令模 式,而且通常都是在一个单独的线程中执行。当一次调用耗时超过了预定义的阈值时,一个超时事件将发生。Hystrix为每个依赖都维护着一个线程池(信 号),如果线程池被耗尽它将拒绝请求(而不是让请求排队)。它提供断路器功能以阻止所有对某依赖的请求。当请求失败、被拒绝、超时或短路时,你也可以用代 码实现回退的逻辑。Hystrix同样支持请求缓存和请求打包。
这是HystrixCommand一个简单的Hello World实现。
public class HelloWorldCommand extends HystrixCommand { public HelloWorldCommand() { super(HystrixCommandGroupKey.Factory.asKey("MyGroup")); } @Override protected String run() { return "Hello World"; } @Override protected String getFallback() { return "Hello Fallback"; } }
出于对报告和提醒的目的,group这个键用于对命令进行分组。可以通过添加getFallback()实现来达到优雅降级的目的,所有类型的故障 都可以触发getFallback(),比如异常,超时,线程池(信号)拒绝和断路器短路。Hystrix命令可以用execute()方法同步 (synchronously)执行。
String s = new HelloWorldCommand().execute();
Hystrix命令也可以用queue()方法异步(asynchronously)执行。
java.util.concurrent.Future future = new HelloWorldCommand().queue(); String s = future.get();
Hystrix使用舱壁模式(bulkhead pattern)来隔离依赖和限制并发访问。每个依赖使用独立的线程池以保证并发请求是受约束的。底层执行的延迟将只会在对应线程池中耗尽所有的可用线 程。使用信号来取代线程池也是一种选择,这样可以进行降载(load shedding)而非超时。针对使用线程池处理依赖这一方式的利弊的深度讨论,请进一步阅读 Hystrix隔离性是如何工作的。
Hystrix提供了一个监控的控制面板,该面板和Netflix内部使用的是一模一样的。 Hystrix控制面板提供了近实时的监控,提醒和操作控制。它显示成功,故障(由客户端抛出的异常),超时和线程拒绝。用户可以动态的修改配置,比如手动短路某个依赖。
想要开始使用Hystrix的话,请访问Hystrix的文档http://github.com/Netflix/Hystrix/wiki,这里包含了入门指南和使用方法。你需要安装Java6或更新版本的Java。Maven用户可以查找Maven工件:com.netflix.hystrix hystrix-core。更多的信息,请阅读Netflix API 性能和故障容错介绍以及官方的Hystrix FAQ。需要注意的是在本文撰写时,Hystrix对异步依赖的支持尚未被实现。
查看英文原文:Netflix Hystrix - Latency and Fault Tolerance for Complex Distributed Systems
相关推荐
Netflix(一家在线影片租赁商)近日开源了其Hystrix库,这是一个针对分布式系统的延迟和容错库。 Hystrix 供分布式系统使用,提供延迟和容错功能,隔离远程系统、访问和第三方程序库的访问点,防止级联失败,保证...
hystrix-py, 分布式系统的延迟和容错性 hystrix-py 一个用于 python的Netflix Hystrix端口。这是一个正在进行中的工作,请你放心 ! 什么是 Hystrix?有关更多信息,请参见 [Netflix Hystrix] ( https
gobreak 延迟和容错库,如Netflix的Hystrix支持prometheus和gobreaker
spring-cloud-netflix-hystrix应用
熔断器组件Netflix Hystrix
详细讲解了Hystrix的执行流程,以及对应流程中的一些组件的概念
spring-cloud-netflix-hystrix-dashboard-2.2.3.RELEASE.jar
hystrix原理
厚脸皮 受 Netflix 的 Hystrix 启发的延迟和容错 Python 库。 自由软件:MIT 许可证 安装 pip install thickskin 文档 发展 要运行所有测试,请运行: tox
Hystrix是一个通过添加延迟容忍和容错逻辑来帮助您控制这些分布式服务之间的交互的库。Hystrix通过隔离服务之间的访问点来实现这一点,停止跨级的级联故障,并提供备用选项,这些工作都提高了系统的整体弹性。
主要介绍了了解spring中的CloudNetflix Hystrix弹性客户端,客户端弹性模式是在远程服务发生错误或表现不佳时保护远程资源(另一个微服务调用或者数据库查询)免于崩溃。,需要的朋友可以参考下
spring-cloud-netflix-hystrix-2.1.0.RELEASE
spring-cloud-starter-netflix-hystrix-2.1.0.RELEASE
Hystrix是Netflix开源的一款容错框架,包含常用的容错方法:线程隔离、信号量隔离、降级策略、熔断技术。 在高并发访问下,系统所依赖的服务的稳定性对系统的影响非常大,依赖有很多不可控的因素,比如网络连接变慢...
spring-cloud-starter-netflix-hystrix-dashboard-2.1.0.RELEASE
Spring Cloud Netfix Hystrix断路器例子工程。使用Spring Cloud Netflix Hystrix以及Spring RestTemplate或Spring Cloud Netflix Feign实现断路器模式。
hystrix-metrics-event-stream-1.5.18.jarhystrix-metrics-event-stream-1.5.18.jar
* 分布式系统开发的成本高(容错、分布式事务等) Spring Cloud 发展前景 Spring Cloud 对于中小型互联网公司来说是一种福音,因为这类公司往往没有实力或者没有足够的资金投入去开发自己的分布式系统基础设施。...
如何使用断路器是Hystrix中的主要概念,它们可以通过组和命令键来标识,它们是任意字符串,以支持结构化和组织我们在应用程序中使用的各种断路器。 每个断路器在超时,后备机制,错误阈值等方面可以有自己的配置。 ...
netflix官方提供的监控hystrix-dashboard的war包,可以直接拷贝到web服务下运行,方便大家下载学习,该版本为1.5.12