多语言展示
当前在线:1069今日阅读:152今日分享:13

经典Java面试题:什么是 Hystrix?

在分布式系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是依赖服务,有的时候某些依赖服务出现故障也是很常见的。 Hystrix  可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制。 Hystrix 通过将依赖服务进行资源隔离,进而阻止某个依赖服务出现故障时在整个系统所有的依赖服务调用中进行蔓延;同时Hystrix 还提供故障时的   fallback 降级机制。 Hystrix 通过这些方法帮助我们提升分布式系统的可用性和稳定性。
方法/步骤
1

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

2

Hystrix 是2011 从Netflix API 团队发展而来。 2012 Hystrix持续发展并且成熟,并且有非常多的团队开始采用Hystrix.现在在Netflix每天有数十万的线程,数百万的独立信号量通过Hystrix执行,这几大增强了服务的弹性和服务时间 Hystrix 被设计用来做了下面几件事:     保护系统间的调用延时以及错误,特别是通过第三方的工具的网络调用     阻止错误在分布式系统之前的传播     快速失败和迅速恢复     错误回退和优雅的服务降级

3

应用在复杂的分布式系统中存在非常多的依赖,这其中一些服务不可避免的会失败,如果主应用程序没有和依赖的服务隔离开来,那么它的服务成功率就会下降 举个例子, 一个服务依赖30个不同的服务,每个服务的服务成功率为99.99%,这个服务的成功率就可以这样计算。

5

对依赖服务调用时出现的调用延迟和调用失败进行控制和容错保护。     在复杂的分布式系统中,阻止某一个依赖服务的故障在整个系统中蔓延。比如某一个服务故障了,导致其它服务也跟着故障。     提供 fail-fast(快速失败)和快速恢复的支持。     提供 fallback 优雅降级的支持。     支持近实时的监控、报警以及运维操作。

6

有一个分布式系统,服务A依赖于服务B,服务B依赖于服务C/D/E。在这样一个成熟的系统内,比如说最多可能只有100个线程资源。正常情况下,40个线程并发调用服务C,各30个线程并发调用 D/E。      调用服务 C,只需要 20ms,现在因为服务C故障了,比如延迟,或者挂了,此时线程会吊住2s左右。40个线程全部被卡住,由于请求不断涌入,其它的线程也用来调用服务 C,同样也会被卡住。这样导致服务B的线程资源被耗尽,无法接收新的请求,甚至可能因为大量线程不断的运转,导致自己宕机。服务A也挂了。      Hystrix可以对其进行资源隔离,比如限制服务B只有40个线程调用服务C。当此40个线程被hang住时,其它60个线程依然能正常调用工作。从而确保整个系统不会被拖垮。

7

阻止任何一个依赖服务耗尽所有的资源,比如 tomcat 中的所有线程资源。     避免请求排队和积压,采用限流和 fail fast 来控制故障。     提供 fallback 降级机制来应对故障。     使用资源隔离技术,比如 bulkhead(舱壁隔离技术)、swimlane(泳道技术)、circuit breaker(断路技术)来限制任何一个依赖服务的故障的影响。     通过近实时的统计/监控/报警功能,来提高故障发现的速度。     通过近实时的属性和配置热修改功能,来提高故障处理和恢复的速度。     保护依赖服务调用的所有故障情况,而不仅仅只是网络故障情况。

推荐信息