分类 Paas 下的文章

路由网关组件:zuul


网关简介

  • 网关统一服务入口,可方便实现对平台众多服务接口进行管控,对访问服务的身份认证、防报文重放与防数据篡改、功能调用的业务鉴权、响应数据的脱敏、流量与并发控制,甚至基于API调用的计量或者计费等等。

  • 网关 = 路由转发 + 过滤器

路由转发:接收一切外界请求,转发到后端的微服务上去;在服务网关中可以完成一系列的横切功能,例如权限校验、限流以及监控等,这些都可以通过过滤器完成

网关的作用:

  • 网关统一所有微服务入口

  • 网关可用实现请求路径转发以及请求过程负载均衡

  • 访问服务的身份认证、防报文重放与数据篡改、功能调用的业务鉴权、响应数据的脱敏、流量与并发控制,甚至基于API调用的计量或者计费等等

zuul组件简介

zuul是从设备和网站到Netflix流媒体应用程序后端的所有请求的前门。作为一个边缘服务应用程序,zuul被构建为支持动态路由监视弹性安全性

Zuul包含了对请求的路由(用来跳转的)和过滤两个最主要功能:

其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础,而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验,服务聚合等功能的基础。Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。

springcloud提供网关组件

  • netfilx zuul1.x(效率) zuul2.x

  • springcloud gateway 组件(Flux 异步非阻塞IO模型) 推荐使用

zuul组件设置路由网关

1、新建一个子模块springcloud-zuul-9527

image

2、添加相关依赖

<dependencies>
        <!--zuul依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        </dependency>
        <!--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>
        <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: 9527#微服务名称spring:
  application:
    name: springcloud-zuul-9527#集群eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
  instance:
    instance-id: zuul9527.com
    prefer-ip-address: true #显示ipinfo:
  app.name: # 项目名称
  company.name: 转身刹那的潇洒

4、修改电脑配置,添加一个网址

image

5、编写主启动类

package com.study.springcloud;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.zuul.EnableZuulProxy;@SpringBootApplication@EnableZuulProxy //开启zuul代理public class ZuulApplication_9527 {    public static void main(String[] args) {
        SpringApplication.run(ZuulApplication_9527.class,args);
    }
}

6、启动测试

1、启动eureka注册中心集群7001springcloud-eureka-7001
2、启动服务提供者springcloud-provider-dept-hystrix-8001
3、启动路由网关springcloud-zuul-9527

image

image

使用zuul路由
image

7、在application.yaml配置文件里添加以下设置zuul路由网关

#zuul路由配置zuul:
  routes:
    mydept.serverId: springcloud-provider-dept # eureka注册中心的服务提供方路由名称
    # 将eureka注册中心的服务提供方路由名称 改为自定义路由名称。
    mydept.path: /mydept/** # http://www.lxstudy.com:9527/springcloud-provider-dept/dept/get/1和http://www.lxstudy.com:9527/mydept/get/1两个都能访问
    #ignored-services: springcloud-provider-dept #不能在使用http://www.lxstudy.com:9527/springcloud-provider-dept/这个路径访问
    ignored-services: "*"
    prefix: /study # 设置公共的前缀


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;@Componentpublic 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("没有数据");
            }            @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.hystrixfeign:
  hystrix:
    enabled: true#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>
        <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: 9001hystrix:
  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);
    }    //添加一个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


Hystrix组件:服务熔断


服务雪崩

多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其他的微服务,这就是所谓的“扇出”,如果扇出的链路上某个微服务的调用响应时间过长,或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的“雪崩效应”。

imge

对于高流量的应用来说,单一的后端依赖可能会导致所有服务器上的所有资源都在几十秒内饱和。比失败更糟糕的是,这些应用程序还可能导致服务之间的延迟增加,备份队列,线程和其他系统资源紧张,导致整个系统发生更多的级联故障,这些都表示需要对故障和延迟进行隔离和管理,以达到单个依赖关系的失败而不影响整个应用程序或系统运行

Hystrix简介

Hystrix是一个应用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时,异常等,Hystrix 能够保证在一个依赖出问题的情况下,不会导致整个体系服务失败,避免级联故障,以提高分布式系统的弹性。

“断路器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控 (类似熔断保险丝) ,向调用方返回一个服务预期的,可处理的备选响应 (FallBack) ,而不是长时间的等待或者抛出调用方法无法处理的异常,这样就可以保证了服务调用方的线程不会被长时间,不必要的占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。

imge

hystrix 用来保护微服务系统 实现 服务降级 服务熔断

服务熔断

熔断机制是赌赢雪崩效应的一种微服务链路保护机制。

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

服务熔断解决如下问题:

  • 当所依赖的对象不稳定时,能够起到快速失败的目的;

  • 快速失败后,能够根据一定的算法动态试探所依赖对象是否恢复。

Hystrix实现服务熔断

1、新建一个服务提供者模块springcloud-provider-dept-hystrix-8001

2、添加依赖

 <dependencies>
        <!--我们需要拿到实体类,所以要配置api module-->
        <dependency>
            <groupId>org.study</groupId>
            <artifactId>springcloud-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <!--springboot-test-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
            <version>2.3.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.3.3.RELEASE</version>
        </dependency>
        <!--jetty-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</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>
        <dependency>
            <groupId>org.study</groupId>
            <artifactId>SpringCloud</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--Eureka-->
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>
        <!--完善监控信息-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
    </dependencies>

3、把springcloud-provider-dept-8001里所有文件都复制到项目

image

4、重命名主启动了类

image

5、修改DeptController

package com.study.springcloud.controller;import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;import com.study.springcloud.pojo.Dept;import com.study.springcloud.service.DeptService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;//提供Restful服务!@RestController@RequestMapping("/dept")public class DeptController {    @Autowired
    private DeptService deptService;    @GetMapping("/get/{id}")
    //熔断,假设调用这个方法出现错误或者异常导致失败了,就调用里面设置的备选方法
    @HystrixCommand(fallbackMethod = "hystrixGet")
    public Dept get(@PathVariable("id") Long id){        Dept dept = deptService.queryById(id);        if(dept==null){            throw new RuntimeException("id=>"+id+"不存在该用户,或者信息无法找到");
        }        return dept;
    }    //备选方法
    public Dept hystrixGet(@PathVariable("id") Long id){        return new Dept().setDeptno(id).setDname("id=>"+id+"没有对应信息,null~~@Hystrix").setDb_source("no this database in MySql");
    }
}

6、在主启动类添加熔断注解@EnableHystrix

image

7、修改applicaiton.yaml

image

8、启动测试

image


sentinel组件的流控规则


流控规则简介

其原理是监控应用流量的 QPS 并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。

QPS:当每秒的请求书超过一定阈值之后对当前请求进行限流
并发线程数:当服务器中创建线程数超过一定阈值之后对当前请求进行限流

流控规则的详解

QPS:当每秒的请求书超过一定阈值之后对当前请求进行限流
并发线程数:当服务器中创建线程数超过一定阈值之后对当前请求进行限流

高级选项

  • 1.直接:当配置资源在运行过程超过当前规则配置的阈值之后,对该资源请求做处理是什么

  • 2.关联模式:当配置资源在运行过程中超过当前规则配置的阈值之后,对他所关联的资源进行请求做什么处理

  • 3.链路模式:当配置资源在运行过程中超过当天规则配置的阈值之后,对他链路中资源请求做什么处理

流控效果 注意:只适用于QPS限流

  • 1.快速失败:方式是默认的流量控制方式,当QPS超过任意规则的阈值后,新的请求就会被立即拒绝,拒绝方式为抛出FlowException。这种方式适用于对系统处理能力确切已知的情况下,比如通过压测确定了系统的准确水位时。

  • 2.Warm Up(冷启动、预热、缓慢增长):即预热/冷启动方式。当系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。通过"冷启动",让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮。
    imge

  • 3.排队等待(始终匀速通过):这种方式,方式会严格控制请求通过的间隔时间,也就是让请求已均匀的速度通过,对应的是漏桶算法
    imge

流控规则的使用

一、

image

image

image

二、

image

三、

image


sentinel组件的安装和使用


Sentinel简介

随着微服务的普及,服务调用的稳定性变得越来越重要。Sentinel以“流量”为突破口,在流量控制、断路、负载保护等多个领域进行工作,保障服务可靠性。

通俗来讲:用来在微服务系统中保护微服务对的作用 如何 服务雪崩 服务熔断 服务降级 就是用来替换hystrix

特性

  • 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等

  • 完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。

  • 广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
    imge

sentinel提供了两个服务组件:

一个是 sentinel 用来实现微服务系统中服务熔断、降级等功能。 这点和hystrix 类似
一个是 sentinel dashboard 用来监控微服务系统中流量调用等情况 流控 熔断 降级 配置。 这点和hystrix dashboard类似

Sentinel的构建

1、下载Sentinel https://github.com/alibaba/Sentinel/

image

2、上传到linux服务器

3、启动

java -Dserver.port=9191 -jar  sentinel-dashboard-1.7.2.jar

4、访问9191端口的web管理页面

image

5、输入账号密码为sentinel进行登陆

image

Sentinel的使用

1、停止nacos集群

2、启动nacos单机模式

./nacos/bin/startup.sh -m standalone

3、新建一个子模块springcloudAlibaba-sentinel-8998

4、添加相关依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--nacos client-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--引入sentinel依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
    </dependencies>

5、编写配置文件

server.port=8998spring.application.name=SENTINEL#nacos server地址spring.cloud.nacos.server-addr=localhost:8848#开启sentinel保护spring.cloud.sentinel.enabled=true#指定sentinel dashboard web管理地址spring.cloud.sentinel.transport.dashboard=localhost:9191#指定sentinel组件与sentinel dashboard通信地址#dashboard端口号默认8719spring.cloud.sentinel.transport.port=8719

6、编写controller

package com.study.springcloudAlibaba.controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class DemoController {    @RequestMapping("/demo")
    public String demo(){        return "demo ok!!!";
    }
}

7、启动项目,调用一次/demo,再去观察sentinel

image
image

Sentinel中对系统保护的五大规则

一、流控规则:流量控制(flow control

  • 其原理是监控应用流量的 QPS 或并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。

二、降级规则:熔断降级(Degrade Service)

  • 其原理是监控应用中的资源调用请求,达到指定阀值时自动出发熔断降级

三、热点规则:热点参数规则(ParamFlow)

  • 其原理是很多时候我们希望统计某个热点数据中访问频次最高的 TOP K 数据,并对其进行限制

四、系统规则:系统自适应限流(SysetmFlow)

  • 其原理是 Sentinel 系统自适应限流从整体维度对应用入口流量进行控制

五、授权规则:来源访问控制(黑白名单)规则(AuthorityRule)

  • 很多时候,我们需要根据调用来源来判断次该请求是否允许放行,这时候可以使用 Sentinel 的来源访问控制(黑白名单控制)的功能。来源访问控制根据资源的请求(origin)限制资源是否通过,若配置白名单则只有请求来源白名单内时才可通过;若配置黑名单则请求所在黑名单时不通过,其余的请求通过。