美文网首页
18,熔断器Hystrix

18,熔断器Hystrix

作者: 滔滔逐浪 | 来源:发表于2019-01-21 17:22 被阅读154次

熔断器


雪崩效应

在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。雪崩效应是一种因“服务提供者”的不可用导致“服务消费者” 的不可用,并将不可用逐渐放大的过程。

如下图所示:a为服务提供者,b为a 的服务消费者,c和d是b 的服务消费者。A不可用引起了b的不可用,并将不可用像滚雪球一样放大到c和D时,雪崩效应就开始了。


hystrix-1.png

熔断器

熔断器的原理很简单,如同电力过载保护器,他可以实现快速失败,如果他在一段内侦测到许多类似的错误,会强迫其以后的多个调用快速失败,不在访问远程服务器,从而防止应用程序不断的尝试执行可能的失败的操作,从而使得应用程序执行而不用等待修正错误,或者浪费cpu时间去等到长时间的超时产生。熔断器可以使用程序能够诊断错误是否已经修正,,如果已经修正,应用程序会再次尝试调用操作。

熔断器模式就像是那些容易导致错误的操作的一种代理。这种代理能够记录最近调用发生的错误次数,然后决定使用允许操作继续,或者而立即返回错误。 熔断器开关相互转换的逻辑如下图;


hystrix-2.png

熔断器就是保护服务高可用的最后一道防线。

Hystrix特性

1,断路器机制

断路器很好理解,当Hystrix Command请求后端服务失败数量超过一定的比例(默认为50%)。断路器会切换到开路状态(open)。这时候所有的请求会直接失败而不会发送到后端服务。断路器保持在开路状态一段时间后(默认5秒)自动切换到版开路状态(HALF-OPEN),这时候会判断下一次请求的返回状况,如果请求成功,断路器切回闭路状态(CLOSED),否则重新切换到开路状态(OPEN),Hystrix的断路器就像我们家庭电路中的保险丝,一旦后端服务不可用,断路器会直接切断请求链接,避免发送大量无效请求影响吞吐量,并且断路器有我检测并恢复的能力。

2,fallback

Fallback相当于是降级操作,对于查询操作,我们可以实现一个fallback方法,当请求后端服务出现异常的时候,可以使用fallback方法返回的值。fallback方法返回的值一般设置默认值或者来自缓存。

资源隔离

在hystrix中,主要通过线程池来实现资源隔离,通常在使用的时候我们会根据调用的远程服务划分出等多个线程池,例如调用产品服务的Command放入A线程池,调用账户服务COMMAND放入B线程池,这样做的主要优点是运行环境被隔离开了,这样就算调用服务的代码存在存在Bug或者由于其他的原因导致自己所在线程池被耗尽时,不会对系统的其他服务造成影响,但是带来的代价就是维护多个线程池会对系统带来额外的性能开销。如果是对性能有严格要求而且确信自己调用服务客户端代码不会出现问题的话,可以使用hytrix 信号模式(Semaphores)来隔离资源。

Feign Hystrix


因为熔断只是作用在服务调用这端,因次我们需要添加配置
1,配置文件
application.properties添加

spring.application.name=spring-cloud-consumer
server.port=9001
eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
feign.hystrix.enabled=true     #熔断

2,feign的接口类

package com.taotao.consumer.sevice;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@FeignClient(name="spring-cloud-producer")
public interface HelloRemote {
    @RequestMapping("/hello")
    public String hello(@RequestParam(value = "name") String name);
    @RequestMapping("/getName")
    public String getName(@RequestParam("name") String name);  //必须加上@RequestParam("name") 才能传值
}



3,controller类

package com.taotao.consumer.controller;

import com.taotao.consumer.sevice.HelloRemote;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ConsumerController {
    @Autowired
    HelloRemote helloRemote;
    @RequestMapping("/index")
    public String index(String name){
        return  helloRemote.hello(name);
    }

    @RequestMapping("/getOrderName")
    public  String getOrderName(String name){
        return  helloRemote.getName(name);
    }
}

4,创建回调类
创建HelloRemoteHystrix类继承与HelloRemote实现回调的方法

@Component
public class HelloRemoteHystrix implements HelloRemote{

    @Override
    public String hello(@RequestParam(value = "name") String name) {
        return "hello" +name+", this messge send failed ";
    }
}

5,添加fallback属性
在HelloRemote类添加指定fallback类,在服务熔断的时候返回fallback类中的内容。

@FeignClient(name= "spring-cloud-producer",fallback = HelloRemoteHystrix.class)
public interface HelloRemote {

    @RequestMapping(value = "/hello")
    public String hello(@RequestParam(value = "name") String name);

}

4、测试
那我们就来测试一下看看效果吧。

依次启动spring-cloud-eureka、spring-cloud-producer、spring-cloud-consumer三个项目。

浏览器中输入:http://localhost:9001/hello/neo

返回:hello neo,this is first messge

说明加入熔断相关信息后,不影响正常的访问。接下来我们手动停止spring-cloud-producer项目再次测试:

浏览器中输入:http://localhost:9001/hello/neo

返回:hello neo, this messge send failed

根据返回结果说明熔断成功。

相关文章

  • SpringCloud 之Hystrix熔断器

    熔断器Hystrix 为什么要使用熔断器 什么是Hystrix Hystrix 中文意思就是豪猪 ,因其背上长满...

  • 本周学习(20211220-20211226)

    Hystrix提供的熔断器具有自我反馈,自我恢复的功能,Hystrix会根据调用接口的情况,让熔断器在closed...

  • 18,熔断器Hystrix

    熔断器 雪崩效应 在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的...

  • springcloud使用(四) 熔断器Hystrix

    熔断器的概念和优点参考 springcloud(四):熔断器Hystrix, 讲的很详细 基于feign的Hyst...

  • Feign调用报错:failed and no fallback

    timed-out and no fallback 这个错误基本是出现在Hystrix熔断器,熔断器的作用是判断该...

  • 熔断器 Hystrix

    熔断器Hystrix 版本 2.2.1.RELEASE 1. 介绍  Hystrix是一个延迟和容错工具,旨在隔离...

  • Hystrix的正确理解方式

    hystrix-logo-tagline-640.png 什么是熔断器 熔断器,原本是电路中在电器发生短路时的防止...

  • Hystrix熔断器执行机制

    本篇假设大家对Hystrix的执行过程及源码有一定的了解,这里介绍Hystrix的熔断器执行机制。 1.Hystr...

  • hystrix

    hystrix 三个设计原则 资源隔离利用线程池实现,每个依赖服务最多耗尽自己线程池的资源 熔断器熔断器 命令模式...

  • 熔断器---Hystrix

    Hystrix:熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能...

网友评论

      本文标题:18,熔断器Hystrix

      本文链接:https://www.haomeiwen.com/subject/gpecjqtx.html