Hystrix
概述
Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统、服务或者第三方库,防止级联失败,从而提升系统的可用性、容错性与局部应用的弹性,是一个实现了超时机制和断路器模式的工具类库。雪崩效应
微服务化产品线,每一个服务专心于自己的业务逻辑,并对外提供相应的接口,看上去似乎很明了,其实还有很多的东西需要考虑,比如:服务的自动扩充,熔断和限流等,随着业务的扩展,服务的数量也会随之增多,逻辑会更加复杂,一个服务的某个逻辑需要依赖多个其他服务才能完成。一但一个依赖不能提供服务很可能会产生雪崩效应
,最后导致整个服务不可访问。 微服务之间进行rpc
或者http
调用时,我们一般都会设置调用超时
,失败重试
等机制来确保服务的成功执行,看上去很美,如果不考虑服务的熔断和限流,就是雪崩的源头。 假设我们有两个访问量比较大的服务A和B,这两个服务分别依赖C和D,C和D服务都依赖E服务A和B不断的调用C,D处理客户请求和返回需要的数据。当E服务不能供服务的时候,C和D的
超时
和重试
机制会被执行由于新的调用不断的产生,会导致C和D对E服务的调用大量的积压,产生大量的调用等待和重试调用,慢慢会耗尽C和D的资源比如内存或CPU,然后也down掉。
A和B服务会重复C和D的操作,资源耗尽,然后down掉,最终整个服务都不可访问。
常见的导致雪崩的情况有以下几种:
· 程序bug导致服务不可用,或者运行缓慢
· 缓存击穿,导致调用全部访问某服务,导致down掉
· 访问量的突然激增。
· 硬件问题。
· 重试加大流量,因为请求失败,调用方可能会不断重试。
· 服务调用者同步等待造成资源耗尽。
虽然雪崩效应的产生千万条,保证服务的不挂机,和流畅运行是我们不可推卸的责任,对应雪崩效应还是有很多保护方案的。