最近管点闲事浪费了不少时间,感谢网友 libinwalan
的留言提醒。及时纠正路线,继续跟大家一起学习spring cloud alibaba。
nacos作为注册中心和配置中心的基础教程,到这里先告一段落,后续与其他结合的内容等讲到的时候再一起拿出来说,不然内容会有点跳跃。接下来我们就来一起学习一下spring cloud alibaba下的另外一个重要组件:sentinel。
sentinel是什么
sentinel的官方标题是:分布式系统的流量防卫兵。从名字上来看,很容易就能猜到它是用来作服务稳定性保障的。对于服务稳定性保障组件,如果熟悉spring cloud的用户,第一反应应该就是hystrix。但是比较可惜的是netflix已经宣布对hystrix停止更新。那么,在未来我们还有什么更好的选择呢?除了spring cloud官方推荐的resilience4j之外,目前spring cloud alibaba下整合的sentinel也是用户可以重点考察和选型的目标。
sentinel的功能和细节比较多,一篇内容很难介绍完整。所以下面我会分多篇来一一介绍sentinel的重要功能。本文就先从限流入手,说说如何把sentinel整合到spring cloud应用中,以及如何使用sentinel dashboard来配置限流规则。通过这个简单的例子,先将这一套基础配置搭建起来。
使用sentinel实现接口限流
sentinel的使用分为两部分:
- sentinel-dashboard:与hystrix-dashboard类似,但是它更为强大一些。除了与hystrix-dashboard一样提供实时监控之外,还提供了流控规则、熔断规则的在线维护等功能。
- 客户端整合:每个微服务客户端都需要整合sentinel的客户端封装与配置,才能将监控信息上报给dashboard展示以及实时的更改限流或熔断规则等。
下面我们就分两部分来看看,如何使用sentienl来实现接口限流。
部署sentinel dashboard
本文采用的spring cloud alibaba版本是0.2.1,可以查看依赖发现当前版本使用的是sentinel 1.4.0。为了顺利完成本文的内容,建议挑选同版本的sentinel dashboard来使用是最稳妥的。
下载地址: sentinel-dashboard-1.4.0.jar
其他版本: sentinel/releases
同以往的spring cloud教程一样,这里也不推荐大家跨版本使用,不然可能会出现各种各样的问题。
通过命令启动:
1
|
java -jar sentinel-dashboard- 1.4 . 0 .jar |
sentinel-dashboard不像nacos的服务端那样提供了外置的配置文件,比较容易修改参数。不过不要紧,由于sentinel-dashboard是一个标准的spring boot应用,所以如果要自定义端口号等内容的话,可以通过在启动命令中增加参数来调整,比如: -dserver.port=8888
。
默认情况下,sentinel-dashboard以8080端口启动,所以可以通过访问: localhost:8080
来验证是否已经启动成功,如果一切顺利的话,可以看到如下页面:
整合sentinel
第一步:在spring cloud应用的 pom.xml
中引入spring cloud alibaba的sentinel模块:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-alibaba-sentinel</artifactid> </dependency> <dependency> <groupid>org.projectlombok</groupid> <artifactid>lombok</artifactid> <version> 1.18 . 2 </version> <optional> true </optional> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-test</artifactid> <scope>test</scope> </dependency> </dependencies> |
第二步:在spring cloud应用中通过 spring.cloud.sentinel.transport.dashboard
参数配置sentinel dashboard的访问地址,比如:
1
2
3
4
5
|
spring.application.name=alibaba-sentinel-rate-limiting server.port= 8001 # sentinel dashboard spring.cloud.sentinel.transport.dashboard=localhost: 8080 |
第三步:创建应用主类,并提供一个rest接口,比如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
@springbootapplication public class testapplication { public static void main(string[] args) { springapplication.run(testapplication. class , args); } @slf4j @restcontroller static class testcontroller { @getmapping ( "/hello" ) public string hello() { return "didispace.com" ; } } } |
第四步:启动应用,然后通过postman或者curl访问几下 localhost:8001/hello
接口。
1
2
|
$ curl localhost: 8001 /hello didispace.com |
此时,在上一节启动的sentinel dashboard中就可以当前我们启动的 alibaba-sentinel-rate-limiting
这个服务以及接口调用的实时监控了。具体如下图所示:
配置限流规则
在完成了上面的两节之后,我们在 alibaba-sentinel-rate-limiting
服务下,点击 簇点链路
菜单,可以看到如下界面:
其中 /hello
接口,就是我们上一节中实现并调用过的接口。通过点击 流控
按钮,来为该接口设置限流规则,比如:
这里做一个最简单的配置:
- 阈值类型选择:qps
- 单机阈值:2
综合起来的配置效果就是,该接口的限流策略是每秒最多允许2个请求进入。
点击 新增
按钮之后,可以看到如下界面:
其实就是左侧菜单中 流控规则
的界面,这里可以看到当前设置的所有限流策略。
验证限流规则
在完成了上面所有内容之后,我们可以尝试一下快速的调用这个接口,看看是否会触发限流控制,比如:
1
2
3
4
5
6
|
$ curl localhost: 8001 /hello didispace.com $ curl localhost: 8001 /hello didispace.com $ curl localhost: 8001 /hello blocked by sentinel (flow limiting) |
可以看到,快速的调用两次 /hello
接口之后,第三次调用被限流了。
代码示例
本文介绍内容的客户端代码,示例读者可以通过查看下面仓库中的 alibaba-sentinel-rate-limiting
项目:
github:https://github.com/dyc87112/springcloud-learning/
gitee: https://gitee.com/didispace/springcloud-learning/
参考资料
下面是sentinel的仓库地址与官方文档,读者也可以自己查阅文档学习:
github
sentinel官方文档
spring cloud alibaba sentinel文档
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://blog.didispace.com/spring-cloud-alibaba-sentinel-1/