1 sentinel
1.1介绍
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。
Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。
Sentinel 具有以下特性
- 丰富的应用场景
Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
- 完备的实时监控
Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况
- 广泛的开源生态
Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
- 完善的 SPI 扩展点
Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。
1.2 sentinel的基本组成
-
核心库(Java 客户端):不依赖任何框架/库,能够运行于 Java 7 及以上的版本的运行时环境,可以结合springcloud一起使用
-
控制台(Dashboard):控制台主要负责管理推送规则、监控、集群限流分配管理等,使用账号密码登录,初始账号密码都是sentinel
1.3 sentinel的生态
1.4 启动sentinel
下载好的sentinel就是一个打包好的jar包,可以直接用控制台启动
java -jar sentinel-dashboard-1.7.2.jar --server.port=自定义端口号
1.5 配置客户端
1.5.1 已有项目 引入pom依赖
只需要在需要引入sentinel的项目中加入依赖,具体使用的版本号会自动与当前springcloud的版本号对应,比如在springcloud项目的父模块的pom文件中加入该依赖,也可以在项目的子模块中引入该依赖,即单独为模块引入
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
通过查看GitHub上alibaba提供的springcloud说明文档可以找到组件和主版本的对应关系,其中seata是做分布式事务的,dubbon是做服务调用的,rocketMQ是消息队列,nacos是做注册中心,sentinel是做流量监控的
1.5.2 新项目 springboot骨架创建时启用
如果是新项目,那么可以在springboot骨架创建项目时就引入这个组件
1.5.3 配置yml
如果是手动引入的sentinel,需要配置sentinel
spring:
application:
name: nacos-order
cloud:
sentinel:
transport:
port: 8719
dashboard: 127.0.0.1:8080
如果是基于springboot-alibaba骨架创建的,那么yml已经配置好了,我们只需要修改部分参数
1.6 控制台页面
1.6.1 布局
启动springboot项目,并访问一次配置了sentient客户端的模块后,就可以通过控制台查看到项目,具体使用规则可以看官方在GitHub上的文档说明
1.6.2 降级规则
可以在控制台新增降级规则,在什么时候进行服务降级,和Hystrix提供的设置很相似
资源名 就是controller的方法的请求路径
异常比例 就是Hystrix提供的错误率
时间窗口 就是降级多少秒才恢复
1.6.3 流控规则
QPS即每秒查询数
资源名 就是controller的方法的请求路径
单机阈值 就是单台机器最多发送几个查询
1.7 springboot项目中的sentinel实际就是个过滤器
在服务器上启动sentinel,然后启动配置了sentinel的springboot项目,此时sentinel在springboot上就是一个过滤器
sentient提供一个网页端控制台,运维或者开发通过控制台设定规则,然后把控制台上设定好的规则推送到所有装了sentinel的客户端上,此时各个客户端上的sentient就以过滤器的角色执行这些规则,这也就是为什么sentient是低侵入的原因