SpringCloud Netflix Hystrix服务容错保护如何实现?

摘要:1. 什么是雪崩效应? 微服务环境,各服务之间是经常相互依赖的,如果某个不可用,很容易引起连锁效应,造成整个系统的不可用,这种现象称为服务雪崩效应。 如图,引用国外网站的图例:https:www.javatpoint.comfault
1. 什么是雪崩效应? 微服务环境,各服务之间是经常相互依赖的,如果某个不可用,很容易引起连锁效应,造成整个系统的不可用,这种现象称为服务雪崩效应。 如图,引用国外网站的图例:https://www.javatpoint.com/fault-tolerance-with-hystrix#,如图系统各种服务相互调用,一旦一个服务出现问题,假如系统没有熔断器,很容易影响其它模块使用 可用自己画图表示这种情况,如图:A作为服务提供者,B为A的服务消费者,C和D是B的服务消费者。A不可用引起了B的不可用,像滚雪球一样放大到C和D时,雪崩效应就形成了。当然也不一定是服务提供者出现问题,也有可能是消费者出现问题 从两个方面来分析服务雪崩产生的原因: 服务提供者 服务提供者出现问题,一般都是影响调用的服务消费者,然后造成连锁反应 服务消费者 服务消费者方面,主要表现在同步调用等待结果导致资源紧张,ps:还有一种特殊情况是,服务既是服务提供者,又是服务消费者 2. 什么是熔断器模式 熔断器(CircuitBreaker),英文是CircuitBreaker,软件设计中的熔断器模式实现,思路是用一个函数调用在断路器保护对象,对故障监控。失败达到一定阈值后,断路器工作,接口调用返回一个错误,以达到保护系统,预防线程资源被大量占用,造成系统雪崩的情况 引用https://martinfowler.com/bliki/CircuitBreaker.html的图例,如图给出了一个简单的软件中的熔断器模式设计方案: 服务的健康状况 = 请求失败数 / 请求总数 ps:熔断器的开关状态转换是通过当前服务健康状况和设定阈值比较决定的 服务健康状况低于设定的阈值时,熔断器开关是关闭的,如果当前服务健康状况大于设置阈值,开关打开 熔断器的开关打开后,所有请求都会被拦截,过一段时间后,开关状态变为半开(half open) 熔断器半开(half open)状态是允许一个请求通过的,当该请求调用成功时, 熔断器恢复到关闭状态.,若该请求失败, 熔断器继续保持打开状态 3. 什么是Netflix Hystrix? Hystrix 是由 Netflix 发布的针对微服务分布式系统的熔断保护中间件,是一种很好地预防服务雪崩的中间件,其实比较像电路中的保险丝,一旦某个服务不可用,导致暂用了线程资源等情况发生时,熔断器开启,不允许其它服务继续调用,导致系统雪崩 引用官网Wiki的解释: In a distributed environment, inevitably some of the many service dependencies will fail. Hystrix is a library that helps you control the interactions between these distributed services by adding latency tolerance and fault tolerance logic. Hystrix does this by isolating points of access between the services, stopping cascading failures across them, and providing fallback options, all of which improve your system’s overall resiliency. 中文翻译:在分布式环境中,不可避免的一些很多服务依赖关系将会失败。Hystrix是一个库,可以帮助你控制这些分布式服务之间的交互通过添加延迟宽容和容错逻辑。Hystrix通过孤立点之间的访问服务,停止在级联故障,并提供后备选项,所有这些改善您的系统的整体弹性。
阅读全文