2020-12-17Hystrix学习

Hystrix学习

1.是什么?
断路器
在这里插入图片描述
2.能干嘛?
服务降级,服务熔断,接近实时的监控,限流,隔离等等
服务降级:服务器忙,请稍后再试,不让客户端等待,并立即返回一个友好的提示。(程序运行异常;超时;服务熔断触发服务降级;线程池/信号量打满也会导致服务降级)
服务熔断:类比保险丝达到最大服务访问后,直接拒绝访问,拉闸限电,然后调用服务降级的方法并返回友好提示。
服务限流:秒杀高并发等操作,严禁一窝蜂过来拥挤,大家排队。
3.新建一个支付和订单模块测试功能
写pom yml 主启动类 业务类 之后进行功能测试
正确 ——>错误——>降级熔断——>恢复
在高并发多线程环境下,客户端响应慢,一直转圈圈,出现故障,由此我们才出现了降级,容错,限流等技术的诞生。
那么如何解决呢?
以书写案例80 以及 8001 为例:
1.对方服务(8001)超时了,调用者(80)不能一直卡死等待,必须有服务降级
2.对方服务(8001)down机了,调用者(80)不能一直等待卡死,必须有服务降级
3.对方服务(8001)OK,调用者(80)自己出故障或有自我要求(自己的等待时间小于服务提供者),自己处理降级
**服务降级:**注解@HystrixCommand
配置文件中设置自身调用超时时间的峰值,峰值内可以正常运行,超过了需要有兜底方法处理,作服务降级fallback。
代码膨胀和混乱问题的解决
代码膨胀:设置一个全局的兜底方法代替一个一个的兜底方法,使用注解实现,一般对全局,特殊对个别

@DefaultProperties(defaultFallback = "payment_Global_FallbackMethod")

代码混乱:在接口中写一个实现接口的实现类(PaymentFallbackService),并在接口上方加入如下注解,解决代码混乱问题

@FeignClient(value = "CLOUD-PROVIDER-HYSTRIX-PAYMENT" , fallback = PaymentFallbackService.class)

**服务熔断:**断路器:相当于保险丝
熔断机制:熔断机制是应对雪崩效应的一种微服务链路保护机制。当扇出链路的某个微服务出错不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回错误的响应信息。
当检测到该节点微服务调用响应正常后,恢复调用链路。
在Spring Cloud框架里,熔断机制通过Hystrix实现。Hystrix会监控微服务间调用的状况,当失败的调用到一定阈值,缺省是5秒内20次调用失败,就会启动熔断机制。熔断机制的注解是@HystrixCommand。
基于注解实现服务熔断:

//服务熔断
    @HystrixCommand(fallbackMethod = "paymentCircuitBreaker_fallback" , commandProperties = {
            @HystrixProperty(name = "circuitBreaker.enable" , value = "true") ,//是否开启断路器
            @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold" , value = "10") ,//请求次数
            @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds" , value = "10000") ,//时间窗口期
            @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage" , value = "60") //失败率达到多少后跳闸
    })

服务熔断 就是 服务降级 进而 服务熔断 慢慢 恢复调用链路。(保险丝)
熔断原理图:在这里插入图片描述
熔断类型
1.熔断打开:请求不再进行调用当前服务,内部设置时钟一般为MTTR(平均故障处理时间),当打开时长达到所设时钟则进入半熔断状态。
2.熔断关闭:熔断关闭不会对服务进行熔断
3.熔断半开:部分请求根据规则调用当前服务,如果请求成功且符合规则则认为当前服务恢复正常,关闭熔断。
在这里插入图片描述
服务限流
4.hystrix工作流程
在这里插入图片描述
5.服务监控hystrixDashboard
是什么 概述
在这里插入图片描述
仪表盘9001测试 填写可进行监控
在8001主启动类中添加如下代码
并在pom文件中添加相应依赖,即可进行监控

 /**
     *此配置是为了服务监控而配置,与服务容错本身无关,springcloud升级后的坑
     *ServletRegistrationBean因为springboot的默认路径不是"/hystrix.stream",
     *只要在自己的项目里配置上下面的servlet就可以了
     */
    @Bean
    public ServletRegistrationBean getServlet() {
        HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
        ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
        registrationBean.setLoadOnStartup(1);
        registrationBean.addUrlMappings("/hystrix.stream");
        registrationBean.setName("HystrixMetricsStreamServlet");
        return registrationBean;
    }
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

下图为9002监控8001
在这里插入图片描述
由图则为监控结果。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值