史上最全 SpringCloud入门教程,从零开始带你深入♂学习(十)——Hystrix组件:服务降级和 Dashboard 流监控

33 篇文章 3 订阅
24 篇文章 22 订阅

SpringCloud(十)——Hystrix组件:服务降级和 Dashboard 流监控

服务降级

服务降级是指 当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理,或换种简单的方式处理,从而释放服务器资源以保证核心业务正常运作或高效运作。说白了,就是尽可能的把系统资源让给优先级高的服务

资源有限,而请求是无限的。如果在并发高峰期,不做服务降级处理,一方面肯定会影响整体服务的性能,严重的话可能会导致宕机某些重要的服务不可用。所以,一般在高峰期,为了保证核心功能服务的可用性,都要对某些服务降级处理。比如当双11活动时,把交易无关的服务统统降级,如查看蚂蚁深林,查看历史订单等等。

服务降级主要用于什么场景呢?当整个微服务架构整体的负载超出了预设的上限阈值或即将到来的流量预计将会超过预设的阈值时,为了保证重要或基本的服务能正常运行,可以将一些 不重要 或 不紧急 的服务或任务进行服务的 延迟使用 或 暂停使用。

降级的方式可以根据业务来,可以延迟服务,比如延迟给用户增加积分,只是放到一个缓存中,等服务平稳之后再执行 ;或者在粒度范围内关闭服务,比如关闭相关文章的推荐。

关闭微服务系统中某些边缘服务 保证系统核心服务正常运行
领取资料

使用服务降级

1、在springcloud-api中添加一个服务降级类FallbackFactory

package com.study.springcloud.service;

import com.study.springcloud.pojo.Dept;
import feign.hystrix.FallbackFactory;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
public class DeptClientServiceFallbackFactory implements FallbackFactory {
    @Override
    public Object create(Throwable throwable) {
        return new DeptClientService() {
            @Override
            public Dept queryById(Long id) {
                return new Dept()
                        .setDeptno(id)
                        .setDname("这个id=>"+id+"没有对应的信息,客户端提供降级的信息,这个服务已经被关闭")
                        .setDb_source("没有数据");
            }
			//加群1025684353一起吹水聊天-->
            @Override
            public List<Dept> queryAll() {
                return null;
            }

            @Override
            public boolean addDept(Dept dept) {
                return false;
            }
        };
    }
}

2、在DeptClientService中指定降级配置类DeptClientServiceFallBackFactory

image

3、在消费者springcloud-consumer-dept-openfeign中配置appllication.yaml配置熔断降级

server:
  port: 80

#开启降级openfeign.hystrix
feign:
  hystrix:
    enabled: true
# 加群1025684353一起吹水聊天-->
#EurekaClient配置
eureka:
  client:
    register-with-eureka: false #不像eureka中注册自己
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/

领取资料

4、运行测试

1、启动eureka集群注册中心springcloud-eureka-7001springcloud-eureka-7002
2、启动服务提供者springcloud-provider-dept-8001
3、启动消费者springcloud-consumer-dept-openfeign
image

4、关闭服务提供者springcloud-provider-dept-8001
image

服务熔断和降级的区别

  • 服务熔断—>服务端:某个服务超时或异常,引起熔断~,类似于保险丝(自我熔断)

  • 服务降级—>客户端:从整体网站请求负载考虑,当某个服务熔断或者关闭之后,服务将不再被调用,此时在客户端,我们可以准备一个 FallBackFactory ,返回一个默认的值(缺省值)。会导致整体的服务下降,但是好歹能用,比直接挂掉强。

  • 触发原因不太一样,服务熔断一般是某个服务(下游服务)故障引起,而服务降级一般是从整体负荷考虑;管理目标的层次不太一样,熔断其实是一个框架级的处理,每个微服务都需要(无层级之分),而降级一般需要对业务有层级之分(比如降级一般是从最外围服务开始)

  • 实现方式不太一样,服务降级具有代码侵入性(由控制器完成/或自动降级),熔断一般称为自我熔断。

Dashboard 流监控

Hystrix Dashboard的一个主要优点是它收集了关于每个HystrixCommand的一组度量。Hystrix仪表板以高效的方式显示每个断路器的运行状况

1、新建消费者模块springcloud-sonsumer-hystrix-dashboard

领取资料
image

2、添加相关依赖

 <dependencies>
        <!--Hystrix依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
        <!--引入hystrix dashboard 依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
        </dependency>
        <dependency>
            <groupId>org.study</groupId>
            <artifactId>springcloud-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
         <!--加群1025684353一起吹水聊天-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.3.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <version>2.3.3.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-ribbon -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>

3、编写application.yaml配置文件

server:
  port: 9001

hystrix:
  dashboard:
    proxy-stream-allow-list: localhost

4、编写主启动类,添加dashboard监控注解

package com.study.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;

@SpringBootApplication
@EnableHystrixDashboard//开启dashboard监控
public class DeptConsumerDashboard_9001 {
    public static void main(String[] args) {
        SpringApplication.run(DeptConsumerDashboard_9001.class,args);
    }
}

5、检查服务提供者是否都添加监控信息依赖

image

6、启动测试

image

7、给要被监控的服务提供者(springcloud-provider-dept-hystrix-8001模块)下的主启动类添加hystrix依赖和监控

领取资料
添加hystrix依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

添加监控

package com.study.springcloud;

import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;

//启动类
@SpringBootApplication
@EnableEurekaClient//在服务启动后自动注册到Eureka中!
@EnableDiscoveryClient //服务发现
public class DeptProvider_8001 {
    public static void main(String[] args) {
        SpringApplication.run(DeptProvider_8001.class,args);
    }
     //加群1025684353一起吹水聊天-->

    //添加一个Servlet
    @Bean
    public ServletRegistrationBean hystrixMetricsStreamServlet(){
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new HystrixMetricsStreamServlet());
        //访问该页面就是监控页面
        servletRegistrationBean.addUrlMappings("/actuator/hystrix.stream");
        return servletRegistrationBean;
    }
}

9、启动eureka集群springclou-eureka-7001,再启动服务提供者springcloud-provider-dept-hystrix-8001

1、
image

2、
image
领取资料
3、
image

4、
image

5、
image

6、
image

imge

最后,祝大家早日学有所成,拿到满意offer,快速升职加薪,走上人生巅峰。 可以的话请给我一个三连支持一下我哟,我们下期再见

领取资料

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud是一个用于构建分布式系统的开发工具集合,它基于Spring Boot框架,提供了一系列的解决方案和工具,用于简化分布式系统的开发和部署。下面是一个从零开始学习Spring Cloud的教程: 1. 学习Spring Boot:在学习Spring Cloud之前,首先需要掌握Spring Boot框架的基础知识。可以通过官方文档、教程或者相关书籍来学习Spring Boot的核心概念和使用方法。 2. 了解微服务架构Spring Cloud是基于微服务架构的开发工具集合,因此需要对微服务架构有一定的了解。可以学习微服务的概念、特点以及与传统单体应用的区别。 3. 搭建开发环境:在学习Spring Cloud之前,需要搭建好相应的开发环境。可以使用IDE工具如IntelliJ IDEA或Eclipse,并配置好Java开发环境和相关依赖。 4. 学习Spring Cloud组件Spring Cloud包含了多个组件,如服务注册与发现(Eureka、Consul)、负载均衡(Ribbon)、断路器(Hystrix)、网关(Zuul)等。可以逐个学习这些组件的使用方法和原理。 5. 实践项目:通过实践项目来巩固所学的知识。可以选择一个简单的项目,如搭建一个基于Spring Cloud微服务架构,实现服务的注册与发现、负载均衡、断路器等功能。 6. 深入学习:在掌握了基础知识后,可以深入学习Spring Cloud的高级特性和扩展功能。可以学习分布式配置中心(Spring Cloud Config)、消息总线(Spring Cloud Bus)等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值