springcloud(5)互联网架构服务降级熔断 Hystrix

目录

核心知识之熔断、降级

1、熔断:

2、降级:(有损的服务)

3、熔断和降级互相交集

Netflix开源组件断路器Hystrix

Feign结合Hystrix断路器开发实战(上)

熔断降级服务异常报警通知

分析Hystrix降级策略和调整

断路器Dashboard监控仪表盘



核心知识之熔断、降级


系统负载过高,突发流量或者网络等各种异常情况介绍,常用的解决方案

1、熔断:

       保险丝,熔断服务,为了防止整个系统故障,包含子和下游服务

       下单服务 -》商品服务

                      -》用户服务 (出现异常-》熔断)

干脆不调用用户服务器也能够完成下单的操作

2、降级:(有损的服务)

       抛弃一些非核心的接口和数据

       旅行箱的例子:只带核心的物品,抛弃非核心的(例如双十一商品中的商品搭配推荐等)等有条件的时候再去携带这些物品

             

3、熔断和降级互相交集

       相同点:

              1)从可用性和可靠性触发,为了防止系统崩溃

              2)最终让用户体验到的是某些功能暂时不能用

       不同点

              1)服务熔断一般是下游服务故障导致的,而服务降级一般是从整体系统负荷考虑,由调用方控制


Netflix开源组件断路器Hystrix


Hystrix基础知识和使用场景

文档地址:

              https://github.com/Netflix/Hystrix

              https://github.com/Netflix/Hystrix/wiki

1、什么是Hystrix?

       1)hystrix对应的中文名字是“豪猪”

       2)hystrix      英[hɪst'rɪks] 美[hɪst'rɪks]

2、为什么要用?

       在一个分布式系统里,一个服务依赖多个服务,可能存在某个服务调用失败,

       比如超时、异常等,如何能够保证在一个依赖出问题的情况下,不会导致整体服务失败,

       通过Hystrix就可以解决

       http://cloud.spring.io/spring-cloud-netflix/single/spring-cloud-netflix.html#_circuit_breaker_hystrix_clients

3、提供了熔断、隔离、Fallback、cache、监控等功能

4、熔断后怎么处理?

              出现错误之后可以 fallback 错误的处理信息

              兜底数据


Feign结合Hystrix断路器开发实战(上)


SpringCloud整合断路器的使用,用户服务异常情况

1、加入依赖

       注意:网上新旧版本问题,所以要以官网为主,不然部分注解会丢失

       最新版本 2.0

        <dependency>

            <groupId>org.springframework.cloud</groupId>

            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>

        </dependency>

2、增加注解

              启动类里面增加注解

              @EnableCircuitBreaker

              注解越来越多-》 SpringCloudApplication注解              

3、API接口编码实战

        熔断-》降级

       1)最外层api使用,好比异常处理(网络异常,参数或者内部调用问题)

              api方法上增加 @HystrixCommand(fallbackMethod = "  要处理的方法名")   

              编写fallback方法实现,方法签名一定要和api方法签名一致(注意点!!!)

      

补充: 修改maven仓库地址(本项目有效)

       pom.xml中修改

       <repositories>

        <repository>

            <id>nexus-aliyun</id>

            <name>Nexus aliyun</name>

            <layout>default</layout>

            <url>http://maven.aliyun.com/nexus/content/groups/public</url>

            <snapshots>

                <enabled>false</enabled>

            </snapshots>

            <releases>

                <enabled>true</enabled>

            </releases>

        </repository>

    </repositories>

 (下)用户服务异常情况


SpringCloud整合断路器的使用,用户服务异常情况

feign默认集成Hystrix

1、feign结合Hystrix

       1)开启feign支持hystrix  (注意,一定要开启,旧版本默认支持,新版本默认关闭)       

feign:
  hystrix:
    enabled: true

        2)FeignClient(name="xxx", fallback=xxx.class ), class需要继承当前FeignClient的类


注解中的内容

这里可以进行报警处理

进行处理


熔断降级服务异常报警通知


完善服务熔断处理,报警机制完善

1、加入redis依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

 2、配置redis链接信息

      redis:

           database: 0

           host: 127.0.0.1

           port: 6379

           timeout: 2000

3、使用      

把redis安装到本地节点/防止高并发多次发送短信同时可以快速知道down的服务器

  //监控报警

        String saveOrderKye = "save-order";
        String sendValue = redisTemplate.opsForValue().get(saveOrderKye);
        final String ip = request.getRemoteAddr();
        new Thread( ()->{
            if (StringUtils.isBlank(sendValue)) {
//返回为空
                System.out.println("紧急短信,用户下单失败,请离开查找原因,ip地址是="+ip);
                //发送一个http请求,调用短信服务 TODO
                redisTemplate.opsForValue().set(saveOrderKye, "save-order-fail", 20, TimeUnit.SECONDS);

            }else{
                System.out.println("已经发送过短信,20秒内不重复发送");
            }

        }).start();

             


分析Hystrix降级策略和调整


只改变feign中的超时是不行的,hystrix中也有默认的超时时间

1、查看默认讲解策略 HystrixCommandProperties

       1)execution.isolation.strategy   隔离策略

              THREAD 线程池隔离 (默认) 

    1000总的Thread 线程池分成不同的快5快  每一块有200  每块对应一个服务(不会由一个服务将整个系统耗尽线程  雪崩

              SEMAPHORE 信号量

     信号量适用于接口并发量高的情况,如每秒数千次调用的情况,导致的线程开销过高,通常只适用于非网络调用,执行速度快

       2)execution.isolation.thread.timeoutInMilliseconds  超时时间

                     默认 1000毫秒

       3)execution.timeout.enabled 是否开启超时限制 (一定不要禁用)

       4)execution.isolation.semaphore.maxConcurrentRequests 隔离策略为 信号量的时候,如果达到最大并发数时,后续请求会被拒绝,默认是10

官方文档:

       https://github.com/Netflix/Hystrix/wiki/Configuration#execution.isolation.strategy

2、调整策略

       超时时间调整

       hystrix:

         command:

           default:

             execution:

               isolation:

                 thread:

                   timeoutInMilliseconds: 4000

key的名称直接到源码中去查


断路器Dashboard监控仪表盘


断路器Dashboard基础使用和查看   (新旧版本)

1、加入依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
        </dependency>
<!--springboot中的一个监控依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

 2、启动类增加注解

           @EnableHystrixDashboard

 3、配置文件增加endpoint

management:

  endpoints:

    web:

      exposure:

        include: "*"

4、访问入口

           http://localhost:8781/hystrix

           Hystrix Dashboard输入: http://localhost:8781/actuator/hystrix.stream 

    参考资料

           默认开启监控配置

           https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-security-actuator

        配置文件类:

                  spring-configuration-metadata.json


断路器监控仪表盘参数和模拟熔断

1、sse  server-send-event推送到前端

资料:https://github.com/Netflix/Hystrix/wiki/Dashboard

trubine

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智达教育‍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值