在分布式环境下,不免出现许多服务之间调用失败的场景, Hystrix是一个经过添加延迟容忍和容错逻辑帮助您控制这些分布式服务之间交互的库。 Hystrix经过隔离服务之间的访问点来实现应用之间连锁故障(因下游服务失败,致使上游服务不可用),出现故障提供备选方案来提升应用总体的可用性。后端
举例:抢购活动中,因为库存服务超时或者崩掉,能够经过提示抢购失败,请稍后重试等预防抢购应用不可用tomcat
Hystrix能够作一些事情:服务器
复杂的分布式应用有许多依赖调用,在某一时刻它们之间必然会出现失败,这就是致使应用总体故障的风险。网络
例如,对于一个依赖于30个服务的应用程序,每一个服务的正常运行时间为99.99%,下面是您能够预期的结果。架构
99.99 的30次方= 99.7% (意味着有0.3%的失败)运维
10亿*0.3% = 300万(10亿次请求会有300万次请求失败)分布式
即便每月在很好的正常运行的时间,也会有2个小时的停机。一般状况会被这个更糟糕。性能
当全部请求都很正常的状况下,请求流就会像下图同样:优化
当不少后端系统有一个不稳定时,就会阻塞整个请求,以下图:spa
在大量请求下,一个后端不理想的依赖都会成为阻塞整个应用请求的潜在风险
应用中任何一个经过网络或者客户端发出的请求都有可能成为网络请求失败的潜在风险,比请求失败更糟糕的是,应用调用依赖之间的延迟增长,更甚应用中的队列、线程池、其余系统资源形成的连锁故障
当经过第三方客户端进行网络访问,就是一个不清楚实现细节以及随时可能发生改变的黑盒执行,对于每一个客户端,网络和资源配置都是不同的,因此很难监控和更改。
更糟糕的是,依赖调用之间,在不被应用显示调用的状况下,执行昂贵和容易出错的网络调用
网络链接失败或者降级、服务与服务之间调用失败或者延迟,新库或服务部署改变方式或者性能特性
全部这些失败和延迟的状况都须要被隔离或者管理,这样就不会由于单个依赖的失败摧毁整个应用和系统。
当您使用Hystrix来包装每一个基础依赖项时,图中所示的架构会发生变化,以下图所示。每一个依赖项都是相互隔离的,当延迟发生时,它可能会被限制在资源中,而且在熔断器中覆盖,当任何类型的故障发生在依赖项中时,它决定了要作出什么响应