springboot集成与使⽤Sentinel的⽅法
前⾔
在上⼀篇中,我们初步了解了Sentinel的基本概念,以及其有关限流⽅⾯的基础理论,本篇将通过简单的与框架进⾏整合,看看Sentinel如何在实际项⽬中进⾏使⽤
控制台安装与部署
在实际的⼩微服务中,使⽤Sentinel做限流还有另⼀个强⼤的利器,就是其提供的dashboard,尽管我们可以通过编写Sentinel提供的⼀些API限流规则封装⼀些通⽤的⽅法,但是这对于很多初次接触Sentinel的同学来说,学习成本仍然不⼩,⽽提供的dashboard可以很⽅便的通过界⾯配置的⽅式达到上⼀篇中我们追求的效果,甚⾄更加灵活,⽽开发⼈员⽆⾮要做的就是,在程序代码中,只需要捕获限流后的异常并抛给页⾯提醒调⽤者即可,
进⼊Sentinel的git,点击下载提供的dashboard,最新的为1.8
下载到本地之后,其实就是⼀个springboot打成的jar包,windows环境下,cmd窗⼝,直接通过下⾯的命令启动即可,
java -jar -Dserver.port=9100 sentinel-dashboard-1.8.0.jar
启动成功后,访问⼀下吧,初次访问,需要登录⽤户名和密码,均为 : sentinel/sentinel
但是进来之后发现空空如也,别紧张,这个dashboard默认是懒加载的,意思就是没有应⽤接⼊进来,它就不展⽰任何信息,等到我们将本地的服务通过配置接⼊的时候就能看到效果了
springboot⼯程快速接⼊dashboard
1、导⼊基本的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-java.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2、yml配置
server:
port: 8082
spring:
datasource:
driver-class-name: sql.cj.jdbc.Driver
url: jdbc:mysql://IT:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
username: root
password: root
#logging:
# config: l #⽇志
application:
name: service-order
#注册中⼼使⽤nacos
cloud:
nacos:
discovery:
server-addr: IP:8848
#连接sentinel的dashboard
sentinel:
transport:
dashboard: localhost:9100
#设置单个⽂件最⼤上传⼤⼩
servlet:
multipart:
max-file-size: 20MB
mybatis-plus:
mapper-locations: classpath*:mapper/*.xml
global-config:
db-column-underline: true #开启驼峰转换
db-config:
id-type: uuid
field-strategy: not_null
refresh: true
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句便于调试
#暴露的健康检查服务端点
management:
endpoints:
web:mysql下载后的初次使用
exposure:
include: '*'
3、编写简单的controller接⼝
@RestController
public class FlowController {
@Autowired
private FlowService flowService;
@GetMapping("/testFlow")
public String testFlow(){
return flowService.doFlow();
}
}
浏览器访问⼀次:localhost:8082/testFlow 之后,这次再观察dashboard,发现相关的可配置菜单和可视化界⾯的参数就都展⽰了出来
dashboard使⽤简单说明
其实在上⼀篇中,我们谈到了使⽤Sentinel提供的API配置的多种限流规则,⽐如基于QPS下的快速失败,预热,匀速队列,关联链路等,⽽dashboard上⾯的配置则正好对应其底层的各种配置规则,下
⾯我们演⽰⼏种常⽤的场景吧
在簇点链路这⼀栏,图中可以看到我们的后端服务接⼝即刚刚调⽤过的接⼝就会展⽰在这⾥,配置限流规则可以通过加号中的”添加流控“进⾏配置,
规则1:QPS,如上所⽰,我们配置了针对访问testFlow这个接⼝的所有来源的请求进⾏QPS的限流,每秒最⼤允许通过2个请求,
配置完毕后,当我们再次快速访问接⼝时,会出现下⾯的结果,很明显,我们的配置规则⽣效了
在上⾯的演⽰中,其实我们⽤到的就是最基本的降级策略,就是基于QPS的快速降级,我们不妨点开⾼级选项,是不是发现这⾥有了更多的配置,其实在可视化界⾯下,使⽤它做限流规则配置时就是使⽤它提供的不同配置项组合使⽤
关联配置
链路配置,⽐如多个微服务之间存在多级调⽤时,请求第⼀个服务接⼝,⽽第⼀个服务再调⽤第⼆个
服务接⼝,第⼀个服务请求接⼝失败了,这时候再访问第⼆个服务接⼝时就会快速失败,通过这种配置规则可以避免服务的雪崩
关于流控效果,在前⼀篇中我们通过简单的demo演⽰了效果,就不再赘述了
关于降级
还以前⾯的 /testFlow接⼝为例:
服务降级可能⼤家并不陌⽣,即在⼀个应⽤中,当请求到某个服务接⼝长时间没有响应时,为了避免更多的请求进来造成服务的雪崩,我们采取⼀种机制,让程序快速返回结果,或者⼲脆抛出友好的提⽰,让调⽤者知道当前的服务不可⽤,这样就不⾄于出现服务端的线程资源被耗尽的情况
对于上述图中的配置,解释起来就是:超过了每秒请求的阈值之后,后⾯的请求再过来的时候,在5秒之内,服务处于不可⽤的状态,5秒之后,服务恢复,我们通过快速刷新接⼝,可以看到效果
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论