Hystrix是什么?
在分布式环境中,许多服务依赖项中的一些将不可避免地失败。Hystrix是一个库,通过添加延迟容差和容错逻辑来帮助您控制这些分布式服务之间的交互。Hystrix通过隔离服务之间的访问点,停止其间的级联故障以及提供回退选项,从而提高系统的整体弹性。
文章篇幅过长。感兴趣的朋友可以提前收藏加关注,后续会有类似文章更新。分享一下个人整理的架构进阶学习路线以及学习资料,需要的朋友可以自行领取:Java高级架构学习资料分享+架构师成长之路
Hystrix旨在执行以下操作:
1、对通过第三方客户端库访问(通常通过网络)的依赖关系提供保护并控制延迟和故障。
2、隔离复杂分布式系统中的级联故障。
3、快速发现故障,尽快恢复。
4、回退,尽可能优雅的降级
5、启用近实时监控、警报和操作控制
为什么使用Hystrix?
大型分布式系统中,一个客户端或者服务依赖外部服务,如果一个服务宕了,那么由于我们设置了服务调用系统超时时间,势必会影响相应时间,在高并发的情况下大多数服务器的线程池就出现阻塞(BLOCK),影响整个线上服务的稳定性。
当一切都正常时,看起来是这样:
当后端服务系统中的一个宕掉时,整个用户请求:
当多个客户端调用同一个异常服务的时候,出现的情况是:
三:Hystrix解决什么问题?
分布式架构中的应用程序具有几十个依赖关系,每个依赖关系在某个时刻将不可避免的出现异常。如果应用程序不与这些外部故障隔离,则可能出现线程池阻塞,引起系统雪崩。
例如,对于依赖30个服务的应用程序,每个服务的正常运行时间为99.99%,您可以:
99.99%的30次方 = 99.7%正常运行时间
0.3%的10亿次请求= 3,000,000次故障
2+小时宕机/月,即使所有依赖关系正常运行时间。
当使用Hystrix进行熔断后,每个依赖关系彼此隔离了,限制了当发生延迟时的阻塞。
四:Hystrix结合Feign使用
创建一个工程eureka_feign_hystrix_client
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency