sentinel分布式系统的流量防卫兵
目录
一、Sentinel 介绍
Sentinel 分为两个部分
Sentinel特征
二、Sentinel 部署
下载jar包,然后启动即可。
下载地址:https://github.com/alibaba/Sentinel/releases
使⽤v1.7.1
启动:
java -jar sentinel-dashboard-1.7.1.jar &
⽤户名/密码:sentinel/sentinel
三、微服务改造
1、pom
<!--sentinel 核⼼环境 依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
2、application.yml修改
配置sentinel dashboard,暴露断点依然要有,删除原
有hystrix配置,删除原有OpenFeign的降级配置
spring:
application:
name: lagou-service-autodeliver
cloud:
sentinel:
transport:
dashboard: 127.0.0.1:8080 # sentinel dashboard/console地址
port: 8719 # sentinel会在该端⼝启动http server,那么这样的话,控制台定义的⼀些限流等规则才能发送传递过来,
#如果8719端⼝被占⽤,那么会依次+1
# springboot中暴露健康检查等断点接口
完整版
server:
port: 8095
spring:
application:
name: lagou-service-autodeliver
cloud:
nacos:
discovery:
################ 配置nacos server地址
server-addr: 127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850
sentinel:
transport:
dashboard: 127.0.0.1:8080 # sentinel dashboard/console地址
port: 8719 # sentinel会在该端⼝启动http server,那么这样的话,控制台定义的⼀些限流等规则才能发送传递过来,
#如果8719端⼝被占⽤,那么会依次+1
# springboot中暴露健康检查等断点接口
main:
allow-bean-definition-overriding: true # 不加报错
management:
endpoints:
web:
exposure:
include: "*"
# 暴露健康接口的细节
endpoint:
health:
show-details: always
#针对的被调用方微服务名称,不加就是全局生效
lagou-service-resume:
ribbon:
#请求连接超时时间
ConnectTimeout: 2000
#请求处理超时时间
##########################################Feign超时时长设置
ReadTimeout: 6000
#对所有操作都进行重试
OkToRetryOnAllOperations: true
####根据如上配置,当访问到故障请求的时候,它会再尝试访问一次当前实例(次数由MaxAutoRetries配置),
####如果不行,就换一个实例进行访问,如果还不行,再换一次实例访问(更换次数由MaxAutoRetriesNextServer配置),
####如果依然不行,返回失败信息。
MaxAutoRetries: 0 #对当前选中实例重试次数,不包括第一次调用
MaxAutoRetriesNextServer: 0 #切换实例的重试次数
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #负载策略调整
logging:
level:
# Feign日志只会对日志级别为debug的做出响应
com.lagou.edu.config.ResumeFeignClient: debug
3、启动微服务
上述配置之后,启动⾃动投递微服务,使⽤ Sentinel 监控⾃动投递微服务。
此时我们发现控制台没有任何变化,因为懒加载,我们只需要发起⼀次请求触发即可
四、Sentinel 关键概念
概念名称 | 概念描述 |
---|---|
资源 | 它可以是 Java 应⽤程序中的任何内容,例如,由应⽤程序提供的服务,或由应⽤程序调⽤的其它应⽤提供的服务,甚⾄可以是⼀段代码。我们请求的API接⼝就是资源 |
规则 | 围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。 |
五、Sentinel 流量规则模块
(一)新增流量监控规则页面说明
(二)流控模式
1、直接限流
2、关联限流
关联的资源调⽤达到阈值时候限流⾃⼰,⽐如⽤户注册接⼝,需要调⽤身份证校验接⼝(往往身份证校验接⼝),如果身份证校验接⼝请求达到阈值,使⽤关联,可以对⽤户注册接⼝进⾏限流。
3、链路限流
链路指的是请求链路(调⽤链)
链路模式下会控制该资源所在的调⽤链路⼊⼝的流量。需要在规则中配置⼊⼝资源,即该调⽤链路⼊⼝的上下⽂名称。
(三)流控效果
- 快速失败:一般情况下使用
- warm up:适用于突然爆发的高水位流量
- 排序等待:适用于削峰填
1、快速失败
2、Warm up
当系统⻓期处于空闲的情况下,当流量突然增加时,直接把系统拉升到⾼⽔位可能瞬间把系统压垮,⽐如电商⽹站的秒杀模块。
通过 Warm Up 模式(预热模式),让通过的流量缓慢增加,经过设置的预热时间以后,到达系统处理请求速率的设定值。
Warm Up 模式默认会从设置的 QPS 阈值的 1/3 开始慢慢往上增加⾄ QPS 设置值。
3、排队等待
(四)降级规则
Hystrix:在活动窗口内,尝试放一个请求过去,看能否调用成功,尝试⾃我修复。
而Sentinel不一样,就是明明确确的按照时间窗⼝来,熔断触发后,时间窗⼝内拒绝请求,时间窗⼝后就恢复。
1、Hystrix中的熔断回顾
2、RT:平均响应时间
2、异常比例
与RT类似,只不过熔断的条件不一样,一个是根据平均响应时间,一个是根据异常比例。
异常,比如。1/0。
3、异常数
异常的数据有多少个。
当资源近 1 分钟的异常数⽬超过阈值之后会进⾏熔断。注意由于统计时间窗⼝是分钟级别的,若 timeWindow ⼩于 60s,则结束熔断状态后仍可能再进⼊熔断状态。
时间窗⼝ >= 60s
六、
本文地址:https://blog.csdn.net/qq_37931744/article/details/112577617