Spring Cloud Alibaba 笔记(nacos、sentinel)

2年前 (2022) 程序员胖胖胖虎阿
348 0 0

文章目录

  • Spring Cloud Alibaba
    • 一、简介
    • 二、环境搭建
    • 三、Nacos
      • 3.1、什么是Nacos
      • 3.2、安装nacos
      • 3.3、开发服务注册到nacos
      • 3.4、服务间通信
      • 3.5、使用nacos作为统一配置中心
        • 3.5.1、从nacos获取配置
        • 3.5.2、实现自动配置刷新
        • 3.5.3、DateId
        • 3.5.4、命名空间
        • 3.5.5、配置分组
      • 3.6、nacos持久化
      • 3.7、nacos集群搭建
    • 四、sentinel 流量卫兵
      • 4.1、什么是sentinel
      • 4.2、sentinel dashboard的安装
        • 普通安装
        • Docker方式安装
      • 4.3、sentinel 实时监控服务
      • 4.4、sentinel 流量控制
        • QPS限流
        • 线程数限流
        • 流控模式
        • 流控效果
      • 4.5、熔断降级
        • 降级策略
      • 4.6、SentinelResource注解
    • 总结

Spring Cloud Alibaba

一、简介

官网:https://spring.io/projects/spring-cloud-alibaba

Spring Cloud Alibaba provides a one-stop solution for distributed application development. It contains all the components required to develop distributed applications, making it easy for you to develop your applications using Spring Cloud.

With Spring Cloud Alibaba, you only need to add some annotations and a small amount of configurations to connect Spring Cloud applications to the distributed solutions of Alibaba, and build a distributed application system with Alibaba middleware.

Spring Cloud Alibaba 提供分布式应用开发的一站式解决方案。它包含开发分布式应用程序所需的所有组件,使您可以轻松使用 Spring Cloud 开发应用程序。

使用 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,即可将 Spring Cloud 应用连接到 Alibaba 的分布式解决方案,并通过 Alibaba 中间件构建分布式应用系统。

Spring Cloud Alibaba 笔记(nacos、sentinel)

微服务实战项目开发

  1. 服务注册中心 ===> Nacos
  2. 服务间通信 ===> Openfeign
  3. 服务流控与服务降级 ===> Sentinel
  4. 服务网关 ===> Gateway
  5. 统一配置中心 ===> Nacos

二、环境搭建

构建项目并引入依赖

<properties>
    <spring-cloud.version>Hoxton.SR6</spring-cloud.version>
    <spring.cloud.alibaba.version>2.1.2.RELEASE</spring.cloud.alibaba.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>${spring.cloud.alibaba.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

三、Nacos

3.1、什么是Nacos

官网:https://nacos.io/zh-cn/index.html

Spring Cloud Alibaba 笔记(nacos、sentinel)

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

Name Service(服务注册与发现) & Configurations Services(统一配置中心)

总结:Nacos就是微服务架构中服务注册中心以及统一配置中心,用来替换原来的(eureka,consul)以及config组件

3.2、安装nacos

这里选用linux环境,注意安装nacos前,要保证 jdk1.8+、maven3.2.x+ 环境

1.下载nacos

https://github.com/alibaba/nacos/releases

Spring Cloud Alibaba 笔记(nacos、sentinel)

2.解压缩安装包到指定位置

- [root@localhost ~]# tar -zxvf nacos-server-1.3.1.tar.gz 
- bin  			启动nacos服务的脚本目录
- conf 			nacos的配置文件目录
- target 		nacos的启动依赖存放目录
- data		  nacos启动成功后保存数据的目录

3.启动安装服务

- linux/unix/mac启动
	打开终端进入nacos的bin目录执行如下命令 
	./startup.sh -m standalone

4.访问nacos的web服务管理界面 http://localhost:8848/nacos/

- 用户名 和 密码都是 nacos

Spring Cloud Alibaba 笔记(nacos、sentinel)

3.3、开发服务注册到nacos

1、创建项目并引入依赖

<!--引入nacos client的依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2、配置注册地址

server.port=8789 			
spring.application.name=NACOSCLIENT
spring.cloud.nacos.server-addr=ip:8848								 #指定nacos服务总地址
spring.cloud.nacos.discovery.server-addr=${spring.cloud.nacos.server-addr}   #指定注册中心地址	

3、加入启动服务注册注解

注意:新版本springcloud只要引入依赖后,默认开启服务注册与发现,可以不写 @EnableDiscoveryClient

4、查看nacos的服务列表

Spring Cloud Alibaba 笔记(nacos、sentinel)

3.4、服务间通信

由于springcloud alibaba中没有提供服务间通信的组件,所以还采用 openFeign,方式与之前springcloud中一致,这里不再写

3.5、使用nacos作为统一配置中心

3.5.1、从nacos获取配置

1、创建项目并引入nacons配置中心依赖

<!--引入nacos client 依赖-->
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

<!--引入配置中心依赖-->
<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2、添加配置文件 bootstrap.properties

spring.cloud.nacos.server-addr=localhost:8848								# 远程配置中心的地址
spring.cloud.nacos.config.server-addr=${spring.cloud.nacos.server-addr}     # 去指定nacos地址读取配置
spring.cloud.nacos.config.group=DEFAULT_GROUP								# 读取配置的分组
spring.cloud.nacos.config.file-extension=properties					        # 指定读取文件后缀
spring.cloud.nacos.config.name=configclient-dev                             # 指定文件名

配置文件名称必须是bootstrap.properties|yml,否则会启动报错,让项目在启动时先预拉取远程配置

3、在nacos中创建配置

Spring Cloud Alibaba 笔记(nacos、sentinel)

Spring Cloud Alibaba 笔记(nacos、sentinel)

4、编写控制器测试配置读取情况

@RestController
public class ConfigClientController {
   
   private static final Logger log = LoggerFactory.getLogger(ConfigClientController.class);
   @Value("${user.name}")
   private String name;

   @GetMapping("/demo")
   public String demo() {
      log.info("username:{}", name);
      return name;
   }
}

3.5.2、实现自动配置刷新

默认情况下nacos已经实现了自动配置刷新功能,如果需要刷新配置直接在控制器中加入 @RefreshScope 注解即可

3.5.3、DateId

dateId = ${prefix}-${spring.profile.active}.${file-extension}

dateId = spring.cloud.nacos.config.name + spring.cloud.nacos.config.file-extension

读取远程配置中心的配置文件有两种方式:

  • ${prefix}-${spring.profile.active}.${file-extension}
- a. prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
	
- b. spring.profile.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}

- c. file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
  • ${name}.${file-extension}
- name 指的就是文件名,比如configclient-dev,可以通过配置项spring.cloud.nacos.config.name来设置

- file-exetension 文件后缀,即文件的数据格式

3.5.4、命名空间

https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config

用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下, 默认使用的是 Nacos 上 Public 这个namespae。如果需要使用自定义的命名空间,可以通过以下配置来实现:

Spring Cloud Alibaba 笔记(nacos、sentinel)

每个命名空间都有一个唯一id,这个id是读取配置时指定空间的唯一标识

spring.cloud.nacos.config.namespace=b3404bc0-d7dc-4855-b519-570ed34b62d7

注意:该配置必须放在 bootstrap.properties 文件中。

3.5.5、配置分组

Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。

Spring Cloud Alibaba 笔记(nacos、sentinel)

在没有明确指定 ${spring.cloud.nacos.config.group} 配置的情况下, 默认使用的是 DEFAULT_GROUP 。如果需要自定义自己的 Group,可以通过以下配置来实现:

spring.cloud.nacos.config.group=YinXue

注意:该配置必须放在 bootstrap.properties 文件中。并且在添加配置时 Group 的值一定要和 spring.cloud.nacos.config.group 的配置值一致。

3.6、nacos持久化

在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,具体的操作步骤:

  • 1.安装数据库,版本要求:5.6.5+
  • 2.初始化mysql数据库,数据库初始化文件:nacos-mysql.sql
    • https://github.com/alibaba/nacos/blob/master/config/src/main/resources/META-INF/nacos-db.sq
  • 3.修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=youdontknow

再以单机模式启动nacos,nacos所有写嵌入式数据库的数据都写到了mysql

3.7、nacos集群搭建

官网:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html

nacos集群架构图

Spring Cloud Alibaba 笔记(nacos、sentinel)

# 1.集群搭建注意事项
- 注意: 
	a.3个或3个以上Nacos节点才能构成集群。
	b.要求虚拟机内存分配必须大于2G以上

# 2.集群规划
-	node cluster:
	192.168.10.138:8845 nacos01
	192.168.10.138:8846 nacos02
	192.168.10.138:8847 nacos03
	192.168.10.138 80   nginx
	192.168.10.138 3306 mysql

# 3.搭建nacos集群
	1).将nacos安装包从新解压缩
	2).开启nacos mysql持久化
		 注意:数据库中不能存在原始数据
	3).复制三份 nacos 分别为
        nacos01
        nacos02
        nacos03
	3).修改nacos conf目录中cluster.conf文件添加所有集群节点
		192.168.10.138:8845
		192.168.10.138:8846 
		192.168.10.138:8847 
	4).修改nacos 各自端口号
		vim nacos01/conf/application.properties             8845
		vim nacos02/conf/application.properties             8846
		vim nacos03/conf/application.properties             8847
	5).分别启动三台机器
		./startup.sh

# 4.安装Nginx
- 0.安装必要依赖
	yum install -y gcc pcre-devel zlib-devel
- 1.下载Nginx
	http://nginx.org/en/download.html

- 2.将Nginx上传到linux中,并解压缩
	 tar -zxvf nginx-1.11.1.tar.gz

- 3.查看Nginx安装目录
	[root@localhost nginx-1.11.1]# ls
	auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src

- 4.在Nginx安装目录中执行如下命令:(指定安装位置)
	./configure --prefix=/usr/nginx

- 5.执行上述命令后,执行如下命令:
	make && make install

- 6.启动
	1. 进入sbin目录 ./nginx   查看nginx是否启动成功: ps aux|grep nginx 默认监听端口为80
	2. 关闭nginx服务 ./nginx -s stop

# 5.配置nginx conf配置文件
	a.加入如下配置:
	upstream  nacos-servers {
    	server 192.168.10.138:8845;
		server 192.168.10.138:8846;
		server 192.168.10.138:8847;
	}
	b.修改
	location / {
      proxy_pass http://nacos-servers/;
  	}

# 6.启动nginx进行测试即可

四、sentinel 流量卫兵

4.1、什么是sentinel

Spring Cloud Alibaba 笔记(nacos、sentinel)

As microservices become popular, the stability of service calls is becoming increasingly important. Sentinel takes “flow” as the breakthrough point, and works on multiple fields including flow control, circuit breaking and load protection to protect service reliability.

随着微服务的普及,服务调用的稳定性变得越来越重要。Sentinel 以“流量”为切入点,在流量控制、断路、负载保护等多个领域开展业务,保障业务可靠性。

  • https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/en-us/index.html#_how_to_use_sentinel

  • https://github.com/alibaba/Sentinel/wiki

特性:

  • 丰富场景:Sentinel 支持阿里巴巴双十一重点场景,如秒杀(即控制突发流量,使其在系统容量可接受范围内)、消息负载转移、不可靠的下游应用的断路。
  • 全面的实时监控: Sentinel 提供实时监控能力。您可以看到您的服务器的监控数据,精确到秒级,甚至可以看到少于 500 个节点的集群的整体运行状态。
  • 广泛的开源生态系统: Sentinel 提供开箱即用的模块,可以轻松与其他开源框架/库集成,例如 Spring Cloud、Dubbo 和 gRPC。使用 Sentinel,只需要引入相关依赖并做一些简单的配置即可。
  • Sound SPI Extensions: Sentinel 提供简单易用的声音 SPI 扩展接口。您可以使用 SPI 扩展快速自定义逻辑,例如,您可以定义自己的规则管理,或适应特定的数据源。

Spring Cloud Alibaba 笔记(nacos、sentinel)

sentinel提供了两个服务组件:

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

4.2、sentinel dashboard的安装

普通安装

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

Spring Cloud Alibaba 笔记(nacos、sentinel)

2、启动

  • 仪表盘是个jar包可以直接通过java命令启动 如: java -jar 方式运行 默认端口为 8858
  • java -jar sentinel-dashboard-1.7.2.jar

3、访问web界面 http://localhost:8858/

  • 用户名&密码: sentinel

Spring Cloud Alibaba 笔记(nacos、sentinel)

Spring Cloud Alibaba 笔记(nacos、sentinel)

注:这种启动方式要一直终端窗口开启

Docker方式安装

# 1. 搜索镜像
docker search sentinel-dashboard

# 2. 拉取镜像
docker pull bladex/sentinel-dashboard

# 3. 查看端口
docker inspect sentinel-dashboard
发现默认暴露端口为8719、8858

# 4. 启动
docker run --name sentinel -d -p 8858:8858 -p 8719:8719 -d bladex/sentinel-dashboard

4.3、sentinel 实时监控服务

1、创建项目引入依赖

<!--引入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>

2、配置

server.port=8789
spring.application.name=nacosclient
spring.cloud.nacos.server-addr=localhost:8848
spring.cloud.nacos.discovery.server-addr=${spring.cloud.nacos.server-addr}

spring.cloud.sentinel.enabled=true											 # 开启sentinel 默认开启
spring.cloud.sentinel.transport.dashboard=localhost:8858                    # 连接dashboard
spring.cloud.sentinel.transport.port=8719								 # 与dashboard通信的端口

3、启动后访问dashboard界面查看服务监控

  • 发现界面什么都没有?
  • 默认情况下sentiel为延迟加载,不会在启动之后立即创建服务监控,需要对服务进行调用时才会初始化

注意:dashboard信息必须在指定服务进行资源调用后才能进行初始化

4、开发服务

@RestController
public class DemoController {
    @GetMapping("/demo")
    public String demo() {
        return "demo ok!!!";
    }
}

注意: sentinel必须和项目需要在同一服务器上,否则会导致监控页面空白

解决方案:

  • sentinel必须和项目需要在同一服务器上
  • 在配置里面添加 spring.cloud.sentinel.transport.client-ip=localhost ,修改容器的时区

Spring Cloud Alibaba 笔记(nacos、sentinel)

# 五大规则

# 流控规则:流量控制(flow control)
	定义:其原理是监控应用流量的 QPS 或并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。
# 降级规则: 熔断降级(Degrade Service)
	定义:其原理是监控应用中资源调用请求,达到指定阈值时自动触发熔断降级
# 热点规则: 热点参数(ParamFlow)
	热点:何为热点? 热点即经常访问的数据
    定义:其原理很多时候我们希望统计某个热点数据中访问频次最高的Top K 数据,并对其访问进行限制。
# 系统规则: SystemFlow
	定义:其原理是 Sentinel 系统自适应限流从整体纬度对应用入口流量进行控制
# 授权规则: 黑白名单控制规则
	定义:很多时候,我们需要根据调用来源判断该次请求是否允许放行,这时候可以使用 Sentinel 的来源访问控制(黑白名单控制)的功能。 来源访问控制根据资源的请求来源(origin)限制资源是否通过,若配置白名单则只有请求来源位于白名单内时才可通过:若配置黑名单则请求来源位于黑名单时不通过,其余的请求通过。

4.4、sentinel 流量控制

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

  • QPS:每秒查询率(Queries-per-second)是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
    • 当每秒请求数超过指定阈值之后对当前请求进行限流
  • 并发线程数
    • 当服务器中创建线程数超过指定阈值之后对当前请求进行限流

同一个资源可以创建多条限流规则。FlowSlot 会对该资源的所有限流规则依次遍历,直到有规则触发限流或者所有规则遍历完毕。

一条限流规则主要由下面几个因素组成,我们可以组合这些元素来实现不同的限流效果:

  • resource:资源名,即限流规则的作用对象
  • count:限流阈值
  • grade: 限流阈值类型(QPS 或并发线程数)
  • limitApp: 流控针对的调用来源,若为 default 则不区分调用来源
  • strategy:调用关系限流策略 ( 直接 关联 链路 )
  • controlBehavior:流量控制效果(直接拒绝、Warm Up、匀速排队)

流量控制主要有两种统计类型,一种是统计并发线程数,另外一种则是统计 QPS

更多细节参见官网:https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6

QPS限流

1、配置QPS流量控制

Spring Cloud Alibaba 笔记(nacos、sentinel)

Spring Cloud Alibaba 笔记(nacos、sentinel)

2、测试

  • 每秒只能最大接收1个请求,超过1个报错

Spring Cloud Alibaba 笔记(nacos、sentinel)

线程数限流

1、配置线程数限流

Spring Cloud Alibaba 笔记(nacos、sentinel)

2、访问测试

这里通过压测工具 JMeter进行测试

流控模式

- 直接:标识流量控制规则到达阈值直接触发流量控制

- 关联: 当两个资源之间具有资源争抢或者依赖关系的时候,这两个资源便具有了关联。比如对数据库同一个字段的读操作和写操作存在争抢,读的速度过高会影响写得速度,写的速度过高会影响读的速度。如果放任读写操作争抢资源,则争抢本身带来的开销会降低整体的吞吐量。可使用关联限流来避免具有关联关系的资源之间过度的争抢,举例来说,read_db 和 write_db 这两个资源分别代表数据库读写,我们可以给 read_db 设置限流规则来达到写优先的目的:设置 strategy 为 RuleConstant.STRATEGY_RELATE 同时设置 refResource 为 write_db。这样当写库操作过于频繁时,读数据的请求会被限流。

- 链路限流: https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6

Spring Cloud Alibaba 笔记(nacos、sentinel)

流控效果

只适用于QPS

  • 直接拒绝:(RuleConstant.CONTROL_BEHAVIOR_DEFAULT)方式是默认的流量控制方式,当QPS超过任意规则的阈值后,新的请求就会被立即拒绝,拒绝方式为抛出FlowException。
  • Warm Up:(RuleConstant.CONTROL_BEHAVIOR_WARM_UP)方式,即预热/冷启动方式。当系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。通过"冷启动",让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮。
    • 更多:https://github.com/alibaba/Sentinel/wiki/%E9%99%90%E6%B5%81—%E5%86%B7%E5%90%AF%E5%8A%A8
  • 排队等待:(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER)方式会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法。 只能对请求进行排队等待
    • 更多:https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6-%E5%8C%80%E9%80%9F%E6%8E%92%E9%98%9F%E6%A8%A1%E5%BC%8F

4.5、熔断降级

https://github.com/alibaba/Sentinel/wiki/%E7%86%94%E6%96%AD%E9%99%8D%E7%BA%A7

除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。由于调用关系的复杂性,如果调用链路中的某个资源不稳定,最终会导致请求发生堆积。Sentinel 熔断降级会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误。当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断(默认行为是抛出 DegradeException)。

降级策略

  • 平均响应时间 (DEGRADE_GRADE_RT):当 1s 内持续进入 N 个请求,对应时刻的平均响应时间(秒级)均超过阈值(count,以 ms 为单位),那么在接下的时间窗口(DegradeRule 中的 timeWindow,以 s 为单位)之内,对这个方法的调用都会自动地熔断(抛出 DegradeException)。注意 Sentinel 默认统计的 RT 上限是 4900 ms,超出此阈值的都会算作 4900 ms,若需要变更此上限可以通过启动配置项 -Dcsp.sentinel.statistic.max.rt=xxx 来配置。

Spring Cloud Alibaba 笔记(nacos、sentinel)

  • 异常比例 (DEGRADE_GRADE_EXCEPTION_RATIO):当资源的每秒请求量 >= N(可配置),并且每秒异常总数占通过量的比值超过阈值(DegradeRule 中的 count)之后,资源进入降级状态,即在接下的时间窗口(DegradeRule 中的 timeWindow,以 s 为单位)之内,对这个方法的调用都会自动地返回。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。

Spring Cloud Alibaba 笔记(nacos、sentinel)

  • 异常数 (DEGRADE_GRADE_EXCEPTION_COUNT):当资源近 1 分钟的异常数目超过阈值之后会进行熔断。注意由于统计时间窗口是分钟级别的,若 timeWindow 小于 60s,则结束熔断状态后仍可能再进入熔断状态。

Spring Cloud Alibaba 笔记(nacos、sentinel)

4.6、SentinelResource注解

  • https://github.com/alibaba/Sentinel/wiki/%E6%B3%A8%E8%A7%A3%E6%94%AF%E6%8C%81

Spring Cloud Alibaba 笔记(nacos、sentinel)

@GetMapping("/sentinel/test1")
@SentinelResource(value = "aa",blockHandler = "fallBack",fallback = "fall")
public String test1(int id){
    log.info("sentinel test1");
    if(id<0){
        throw new RuntimeException("非法参数!!!");
    }
    return "sentinel test1 :"+id;
}
//降级异常处理
public String fallBack(int id,BlockException e){
    if(e instanceof FlowException){
        return "当前服务已被流控! "+e.getClass().getCanonicalName();
    }
    return "当前服务已被降级处理! "+e.getClass().getCanonicalName();
}
//异常处理
public String fall(int id){
    return "当前服务已不可用!";
}

总结

# 1.springcloud & springcloud alibaba

- springcloud 微服务工具集    微服务工具集
- springcloud alibaba       微服务一站式解决方案

# 2.springcloud中组件 五大组件

  a.服务注册中心 eureka  consul
  b.服务间通信组件(ribbon) Openfeign
  c.服务熔断  Hystrix、Hystrix DashBoard
  d.服务网关  zuul1.x zuul2.x  Gateway
  e.服务配置中心  config  + bus 自动配置刷新

# 3.springcloud alibaba组件

  a.服务注册中心 服务配置中心   nacos   ====>  替换 eureka consul  替换config+bus
  b.服务熔断、流控            sentinel(sentinel、sentinel dashBoard)====>替换原始 Hystrix(Hystrix、Hystrix DashBoard)

# 4.总结:五大组件

  a.服务注册中心      nacos
  b.服务间通信组件    1.RestTemplate+Ribbon  2.OpenFeign组件
  c.服务熔断、流控    sentinel
  d.服务网关         gateway
  e.服务配置中心      nacos

版权声明:程序员胖胖胖虎阿 发表于 2022年9月20日 上午9:56。
转载请注明:Spring Cloud Alibaba 笔记(nacos、sentinel) | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...