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