您的当前位置:首页正文

SpringCloudAlibaba使用Sentinel实现接口限流

来源:好兔宠物网
SpringCloudAlibaba使⽤Sentinel实现接⼝限流

最近管点闲事浪费了不少时间,感谢⽹友 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来使⽤是最稳妥的。下载地址:其他版本:

同以往的Spring Cloud教程⼀样,这⾥也不推荐⼤家跨版本使⽤,不然可能会出现各种各样的问题。通过命令启动:

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模块:

org.springframework.boot spring-boot-starter-web

org.springframework.cloud

spring-cloud-starter-alibaba-sentinel

org.projectlombok lombok 1.18.2 true

org.springframework.boot spring-boot-starter-test test

第⼆步:在Spring Cloud应⽤中通过 spring.cloud.sentinel.transport.dashboard 参数配置sentinel dashboard的访问地址,⽐如:

spring.application.name=alibaba-sentinel-rate-limitingserver.port=8001

# sentinel dashboard

spring.cloud.sentinel.transport.dashboard=localhost:8080

第三步:创建应⽤主类,并提供⼀个rest接⼝,⽐如:

@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 接⼝。

$ curl localhost:8001/hellodidispace.com

此时,在上⼀节启动的Sentinel Dashboard中就可以当前我们启动的 alibaba-sentinel-rate-limiting 这个服务以及接⼝调⽤的实时监控了。具体如下图所⽰:

配置限流规则

在完成了上⾯的两节之后,我们在 alibaba-sentinel-rate-limiting 服务下,点击 簇点链路 菜单,可以看到如下界⾯:

其中 /hello 接⼝,就是我们上⼀节中实现并调⽤过的接⼝。通过点击 流控 按钮,来为该接⼝设置限流规则,⽐如:

这⾥做⼀个最简单的配置:

阈值类型选择:QPS单机阈值:2

综合起来的配置效果就是,该接⼝的限流策略是每秒最多允许2个请求进⼊。点击 新增 按钮之后,可以看到如下界⾯:

其实就是左侧菜单中 流控规则 的界⾯,这⾥可以看到当前设置的所有限流策略。验证限流规则

在完成了上⾯所有内容之后,我们可以尝试⼀下快速的调⽤这个接⼝,看看是否会触发限流控制,⽐如:

$ curl localhost:8001/hellodidispace.com

$ curl localhost:8001/hellodidispace.com

$ curl localhost:8001/hello

Blocked by Sentinel (flow limiting)

可以看到,快速的调⽤两次 /hello 接⼝之后,第三次调⽤被限流了。代码⽰例

本⽂介绍内容的客户端代码,⽰例读者可以通过查看下⾯仓库中的 alibaba-sentinel-rate-limiting 项⽬:参考资料

下⾯是Sentinel的仓库地址与官⽅⽂档,读者也可以⾃⼰查阅⽂档学习:

以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

因篇幅问题不能全部显示,请点此查看更多更全内容