文章目录
- sentinel
- 使用
- 依赖
- 暴露端点
- sentinel 控制台
- 簇点链路
- 流控规则
- 降级规则
- 热点规则
- 系统规则
- 授权规则
- 代码配置规则
- 流控规则
- Sentinel与控制台通信
- 相关源码
- 心跳
- 通信
- Sentinel & Console 配置项
- Sentinel
- Sentine-Console配置项
- Sentinel API
- Sphu.entry
- 异常统计
- 针对来源
- 总结
- @SentinelResource
- blockHandlerClass
- 相关源码
- Sentinel 整合 RestTemplate
- 相关源码
- Fegin 整合 Sentinel
- 异常处理
- 获取异常
- Sentinel 暂时性总结
- 规则持久化
- 拉模式
- 推模式
- 懒人包-其他规则改造
- 生产环境中的Sentinel
- 集群流控
- 集群流控慕课网版本没有对应学习资料.请自学
- 独立模式
- 嵌入模式
- Sentinel错误页优化
- UrlBlockHandler
- 区分来源
- Sentinel 支持 RestfulUrl
- UrlCleaner
- CommonFilter
- 配置项总结
sentinel
sentinel 主要是 基于面板进行配置的sentinel. 后面会实现配置持久化.
使用
依赖
加上 sentinel 就可以直接使用了 . 但是后期可以和 fegin,restTemplate 进行整合
暴露端点
配合 actuator 可以看到 Sentinel 的状态. 这时候可以配置 actuator 开启 Sentinel 端点
actuator 可以看到 服务的端点. 但是sentinel 的端点是隐藏的. 这里可以 使用 配置暴露sentinel的端点
sentinel 控制台
使用可视化面板对 sentinel 进行配置
sentinel 是懒加载. 额 Ribbon 一样
Ribbon 可以配置饥饿加载
簇点链路
查看服务的API 以及 配置流控规则
流控规则
1
2
3
4
5
6
7
8
9
10
11
12
13
14资源名: API名称(唯一的名称) 针对来源: 服务名. 不区分为 default 阈值类型: QPS: 线程数: 流控模式: 直接: 关联: 关联资源. 当关联资源达到阈值,就限流自己. 保护关联资源.例如: 一个资源即读又修改. 链路: 配个 @SentinelSource 注解使用. 设置阈值或者线程数目.进行使用 流控效果: 快速失败: 直接抛出异常 warm Up: 预热.
warm up 使流量缓慢增加. 在经过 预热时长后才达到阈值
原理分析的文章
1
2
3排队等待: 只能设置阈值. 如果这个请求过了规定的超时时间,则直接丢弃. 匀速排队. 请求排队.
每秒一次 . 超时直接丢弃
降级规则
上一个讲解的是(流控)限流.这一个讲解的是降级(断路器模式)
RT: 平均响应时间
1
2
3
4
5平均响应时间超出阈值 并且 在时间窗口内通过的请求 >= 5,则触发降级. 降级时间为 5秒. 1. sentinel 默认最大降级时间为 4900ms 2. 可通过 -Dcsp.sentinel.statistic.rt=xxx 修改任意值
异常比例
同上
异常数
1
2异常数统计是分钟级别. 时间窗口 < 60 s 会出现异常
1
2其他同上
热点规则
又叫热点参数限流规则
需要自己写代码实现
1
2
3// 此字符串会出现在 sentinel 控制台中 @SentinelResource("hot")
给第一个参数设置热点规则
对具体值进行限流
系统规则
Load
系统Load1超过阈值,切并发线程数超过系统容量时触发.
Linux 下查看 Load
1
2uptime
系统容量
1
2系统容量 = maxQPS * minRt
其他
授权规则
白名单
1
2/shares/1 这个API 只允许 test 微服务 访问
黑名单
不允许 对应的微服务访问
代码配置规则
使用代码配置流程,降级,热点等规则
这里的代码配置规则是提供一个API,访问即可对 Sentinel 增加规则
参考:
慕课网
sentinel GitHub STEP 3. 定义规则
动态规则扩展
流控规则
具体配置这段代码即可
调用
Sentinel与控制台通信
Sentinel 注册到 Sentinel Console
定时发送心跳. 之后 Sentinel Console 定时发送请求获得微服务中的数据
具体可以看 actuatorsentinel 中的各项数据
相关源码
心跳
通信
Sentinel & Console 配置项
Sentinel
微服务中 Sentinel-Console 的配置项
1
2
3
4
5
6
7
8
9spring: cloud: sentinel: transport: dashboard: client-ip: port: 8719 heartbeat-interval-ms: 10000
在 Sentinel 中配置 与 Sentinel-Console 通信的配置
Sentine-Console配置项
在启动 Sentinel.jar 时候可以指定的配置
这些配置在启动 sentinel-dashboard-1.6.2.jar 的时候指定 -DparamName=value 进行指定
Sentinel API
开启 Spring MVC 端点保护
1
2
3
4
5sentinel: filter: # enabled: false
Sphu.entry
1
2
3
4
5
6
7
8// 名称随便写,保持唯一 Sphu.entry("test-sentinel-api"); // 业务逻辑开始 // 业务逻辑结束 catch(BlockException e){ // 此API被保护或者降级,会触发此异常 }
异常统计
对于 额外的异常.
因为 Sphu.entry 只针对 BlockException 进行拦截
所以这里不拦截
针对来源
ContextUtil.enter(resourceName,“来源微服务名称”);
总结
Sphu: 定义资源,监控,保护资源
Tracer: 异常统计
ContextUtil: 调用来源,标记调用
@SentinelResource
手记 文章内有简单的记载.
慕课网
代码
1
2
3
4在代码上加注解. 1. value="要保护的API名称". 2. blockHandler="资源被限流或降级触发的方法"
这里的block 的方法 返回值和参数和 @SentinelResource 标注的方法一致
@SentinelResource 注解可以区分限流和降级
1
2
3
4
5fallback: 1.5 处理降级 1.6 可以加 Throwable 参数.在 对应的fallback 方法上 添加 Throwable 参数 去处理异常 blockHandler:
具体请看上面那篇手记
指定静态方法
1
2
3blockHandlerClass = xxx fallbackClass = xxx.class
blockHandlerClass
可以将 处理 block 的东西写到单独的类中,在指定它
相关源码
Sentinel 整合 RestTemplate
使用 @SentinelRestTemplate 注解即可
注解开关
1
2
3
4
5resttemplate: sentinel: # 关闭 @SentinelTempalte 注解 enabled: false//ture
相关源码
Fegin 整合 Sentinel
1
2
3
4fegin: sentinel: enabled: true
异常处理
1
2定义一个class,实现 UserCenterFeginClient. 重写方法即可
获取异常
使用 fallBackFacotory ,可以获得异常
fallBack 和 fallBackFactory 二选一
Sentinel 暂时性总结
因为后面还有别的内容
规则持久化
sentinel console 规则是在内存中的
持久化,保证规则不丢失
拉模式
慕课网手记
console 推动规则给 微服务. 微服务写入到缓存中,定时持久化到 文件中
步骤
1
21. 依赖
1
22. 代码
请看慕课网手记
推模式
慕课网手记
具体请查看慕课网手记
Nacos 作配置中心
1
2
3console 将规则推送到 Nacos. Nacos 内规则变化时,sentinel 微服务从 Nacos 获取更新后的配置
步骤
1
21. 依赖
1
2
32. 配置 添加数据源
1
23. 控制台改造
1
21. 依赖
1
22. 目录拷贝
懒人包-其他规则改造
慕课网手记最后即可看到
生产环境中的Sentinel
视频
集群流控
集群流控慕课网版本没有对应学习资料.请自学
引入新的组件: TokenServer. 微服务和 TokenServer通信. 进而实现集群流控
独立模式
嵌入模式
Sentinel错误页优化
UrlBlockHandler
对错误进行处理的接口
1
2
3
4
5
6
7public abstract class MyUrlBlockHandler implements UrlBlockHandler{ @Override public void blocked(HttpServletRequest request,HttpServletResponse response){ // 逻辑 } }
区分来源
Sentinel 提供了区分来源的接口. RequestOriginParser
1
2
3
4
5
6
7
8@Component class MyRequestOriginParser implements RequestOriginParser{ @Override public String parseOrigin(HttpServlerRequest request){ // 逻辑 } }
代码
使用
Sentinel 支持 RestfulUrl
sentinel 扩展,支持 fegin Url
UrlCleaner
1
2
3
4
5
6
7
8@Component public class myUrlClenaer implements UrlCleaner{ @Override public String clean(String originUrl){ return originUrl; } }
手动实现,fegin 请求的url 具体值
CommonFilter
可以对 CommonFilter 进行修改.
1
21. 首先,关闭 Sentinel Filter 过滤器.
1
2
3
4sentinel: filter: enabled: false
配置项总结
慕课网手记
最后
以上就是着急小熊猫最近收集整理的关于sentinel笔记就是代码第一份.照着笔记学习sentinel写代码sentinel使用sentinel 控制台簇点链路降级规则热点规则系统规则授权规则代码配置规则Sentinel与控制台通信Sentinel & Console 配置项Sentinel API@SentinelResourceSentinel 整合 RestTemplateFegin 整合 SentinelSentinel 暂时性总结规则持久化生产环境中的Sentinel集群流控Sentinel错误页优化区分来源Sentine的全部内容,更多相关sentinel笔记就是代码第一份.照着笔记学习sentinel写代码sentinel使用sentinel内容请搜索靠谱客的其他文章。
发表评论 取消回复