4-sentinel整合dashboard
1. 序言
sentinel 默认加载到内存中,项目启动之后流控规则其实没办法改变了,sentinel这里提供了一个dashboard 服务,可以启动客户端查看对应的配置信息,也可以监控,十分方便
sentinel引入 服务端和客户端的概念
- 服务端:及控制台dashboard程序,需要单独启动项目
- 客户端:每一个用了sentinel且引入了连接包的服务
2. 基础工程
2.1. 工程搭建
2.1.1. 服务端
服务端直接从官方网站上下载即可:sentinel-dashboard
下载完成后启动jar 包
1 | java -jar sentinel-dashboard-1.8.1.jar --server.port=8847 |
默认的服务端口为8080,一般而言我们需要修改一下。
启动之后服务端就完成了
2.1.2. 客户端
客户端不需要做特殊改造,只需要引入依赖和加入配置即可
2.1.2.1. pom
1 | <dependency> |
2.1.2.2. 配置文件
classpath下新建文件sentinel.properties
1 | # dashboard显示的名称 |
引入后客户端会自动与服务端保持连接
2.1.3. 规则修改
规则修改可以在此处修改,修改后客户端的规则生效,默认保存在客户端内存中,重启后失效。
2.2. 原理简介
2.2.1. 启动原理
- dashboard为单独的一个工程,其数据维护在内存当中,当启动dashboard时数据为空。
- 客户端启动时不会马上调用接口注册到dashboard中,注册是一个懒加载过程:当第一次调用流控规则时才启动新的端口(一般为8719,由客户端自动检测,当检测到有占用时会寻找下一个,也可以自己配置),之后注册到dashboard中,然后dashboard中显示相关数据。
- 当修改数据后dashboard调用客户端的接口将数据传给客户端,客户端保存至内存中
2.3. 问题及解决
客户端无法注册
问题: 第一次引入的时候直接将sentinel-dashboard
工程放在云服务器上运行,本地启动工程注册到dashboard
中,出现了工程注册不上的问题
原因: 服务在心跳检测的时候是dashboard调用客户端的接口,不是客户端主动上报的模式,因此本地的服务是无法被dashboard调用到的`
解决: 本地启动dashboard工程,保持能互相调用客户端获取不到流控规则
问题: 注册上了但是没获取到流控规则,只有实时监控有监控数据
原因: 配置了sentinel.properties
中配置了csp.sentinel.app.type=1
导致检测到为网关服务,调用接口时以网关的模式调用,因此检测不到数据
解决: 配置文件就不要乱改,默认的为csp.sentinel.app.type=0
就是为普通工程
引用:
未检测到规则的记录
3. 进阶-数据同步持久化模式
dashboard和客户端通信包括三种模式原始模式、Pull模式、Pull模式,其优缺点如下
推送模式 | 描述 | 优点 | 缺点 | 是否适用生产环境 | 图片 |
---|---|---|---|---|---|
原始模式 | 规则推送到客户端并直接存储在内存 | 简单,无额外依赖 | 数据一致性差,服务重启时,内存中数据回消失 | 否 | ![]() |
Pull模式 | 客户端主动向某个规则管理中心(RDBMS,文件等)定期轮询拉起规则 | 简单,无额外依赖,规则持久化 | 一致性差,实时性差,拉取过于频繁时,可能存在性能问题 | 否 | ![]() |
Push模式 | 规则中心(Nacos、Zookeeper等配置中心)统一推送,客户端通过注监听器得方式时刻监听变化 | 持久化、一致化、快速 | 引入第三方依赖 | 是 | ![]() |
一般我们将配置交予第三方统一管理,选择push模式