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
2. **Netflix Hystrix**: Netflix Hystrix是一款开源的Java库,用于处理分布式系统中的延迟和故障,通过隔离服务间的调用、回退、超时、熔断和降级等策略,提高了系统的容错能力。尽管Go-gobreak不是Hystrix的直接...
其中,Spring Cloud Netflix Hystrix是一款至关重要的组件,它为企业级应用提供了强大的容错保护,实现了服务间的熔断和降级策略,极大地提升了系统的稳定性和可靠性。 Hystrix的核心概念包括: 1. **熔断器模式**...
Spring Cloud Netflix Hystrix 是一个强大的熔断器和断路器库,旨在帮助开发者构建弹性、容错的服务架构,以应对分布式系统中的延迟和故障。Hystrix 的设计目标是隔离服务之间的调用,防止服务级联失败,从而增强...
它旨在解决复杂分布式环境中的核心问题:服务之间的调用延迟、依赖服务的故障以及由此引发的系统级故障蔓延。通过引入资源隔离、快速失败与恢复、优雅降级等策略,Hystrix确保了服务的稳定性和整体系统的可用性。 1...
Hystrix是Netflix开源的一个用于构建弹性微服务架构的库,它主要目标是提供容错机制,防止服务雪崩,确保系统的稳定性和高可用性。在本篇文章中,我们将深入剖析Hystrix的工作原理,理解其执行流程,并探讨其中的...
例如,Google的搜索索引、Facebook的照片存储和推荐系统,以及Netflix的流媒体服务都是分布式系统设计的典范。 总结来说,分布式系统设计原理与实践涉及的内容广泛且深入,涵盖数据存储、计算、服务架构、通信协议...
熔断器组件Netflix Hystrix
为了解决这个问题,Netflix开源了一款名为Hystrix的库,其主要目标就是提供延迟容忍和容错能力,从而保障分布式系统在面对故障时能够保持韧性。 Hystrix的核心理念是通过隔离服务调用、降级策略以及断路器模式来...
分布式系统是一种由多台计算机通过网络互相连接,协同工作以实现共同目标的系统。李西宁老师的这门课程,...通过学习,你将能够理解分布式系统的核心理念,熟悉相关工具和技术,并有能力解决实际项目中的分布式问题。
Hystrix 是一个用于处理分布式系统中延迟和故障的库,通过断路器模式来隔离服务间的调用,防止服务雪崩,提高系统的容错性。而Hystrix Dashboard 提供了可视化界面,帮助开发者实时监控这些断路器的状态,了解服务的...
在分布式系统中,服务间的调用异常是难以避免的,Hystrix是一个由Netflix开源的延迟和容错库,设计目标是提供控制回路、断路器、隔离、线程和信号量,以及缓存等功能,以防止服务雪崩,确保系统的稳定性。...
- Spring Cloud Netflix提供了Eureka、Zuul、Hystrix等组件,用于实现微服务的注册发现、API网关和服务容错。 5. **分布式数据库与数据一致性** - 分布式数据库如Cassandra、HBase,可以处理大规模数据并提供高...
分布式系统原理和范型是计算机科学中的重要领域,尤其对于中高级程序员来说,深入理解这一概念至关重要。在当今云计算和大数据的时代,分布式系统的应用已经无处不在,从搜索引擎到社交媒体,从在线购物平台到物联网...
spring-cloud-netflix-hystrix-dashboard-2.2.3.RELEASE.jar
Hystrix作为Netflix开源的一个用于控制分布式系统服务容错的工具,其设计理念在于通过隔离、降级、熔断机制来防止分布式系统中个别服务的故障蔓延到整个系统,从而保障整体系统的高可用性。Hystrix能够帮助开发者在...
9. **容错机制**:分布式系统需要应对节点故障,常见的容错机制包括备份、心跳检测、故障恢复和冗余等。 10. **分布式事务**:在分布式系统中,事务的处理变得复杂,ACID(原子性、一致性、隔离性和持久性)属性的...
首先,Hystrix是Netflix开发的一个用于处理分布式系统中的延迟和故障的库,它提供了一个命令式和异步的编程模型,可以防止服务雪崩,实现服务之间的隔离,以及提供回退逻辑,确保系统在部分组件失败时仍能正常运行。...
总之,Hystrix通过断路器模式和资源隔离,提供了一种高效且灵活的策略来应对分布式系统中的服务故障,提高了系统的健壮性和用户体验。通过与OpenFeign和Ribbon等组件的结合,开发者可以在服务调用链中轻松地实现容错...