Sentinel是阿里巴巴开源的限流器熔断器,并且带有可视化操作界面。

在日常开发中,限流功能时常被使用,用于对某些接口进行限流熔断,譬如限制单位时间内接口访问次数;或者按照某种规则进行限流,如限制ip的单位时间访问次数等。

之前我们已经讲过接口限流的工具类ratelimter可以实现令牌桶的限流,很明显sentinel的功能更为全面和完善。

来看一下sentinel的简介:

https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

Sentinel 具有以下特征:

  • 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、实时熔断下游不可用应用等。

  • 完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。

  • 广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。

  • 完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展点。您可以通过实现扩展点,快速的定制逻辑。例如定制规则管理、适配数据源等。

来简单使用一下Sentinel。

Sentinel包括服务端和客户端,服务端有可视化界面,客户端需引入jar后即可和服务端通信并完成限流功能。

启动服务端的jar

https://github.com/alibaba/Sentinel/releases

在这个地址,下载release的jar,然后启动即可。

这个jar是个标准的Springboot应用,可以通过

java -jar sentinel-dashboard-1.6.0.jar

来启动,这样就是默认的设置,启动在8080端口。

也可以加上一些自定义配置来启动:

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

更多运行 Spring Boot 应用的三种方式点击这里参考这篇文章。关注公众号互联网架构师回复2T获取更多 Spring Boot 教程,具体配置的解释,可以到 GitHub 上看一下文档。

不懂 Spring Boot 的看下这个,很全了:

https://github.com/javastacks/spring-boot-best-practice

这里我们直接使用默认 java -jar sentinel-dashboard-1.6.0.jar 来启动,之后访问localhost:8080。

可以看到界面:

输入账号密码sentinel后进入主界面

此时因为我们并没有启动客户端,所以界面是空的。

启动客户端

新建一个Springboot项目,pom如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.5.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.maimeng.baobanq</groupId><artifactId>baobanserver</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>baobanserver</name><description>Demo project for Spring Boot</description><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Finchley.SR1</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--sentinel--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><!--sentinel end--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>0.2.2.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

需要注意引用的SpringCloud-alibaba的版本是0.2.2,当前的最新版,如果是Springboot2.x的项目,需要引0.2.x的。Springboot1.x的引0.1.x的。

不懂 Spring Boot 的看下这个,很全了:

https://github.com/javastacks/spring-boot-best-practice

Sentinel的客户端依赖也很简单,spring-cloud-starter-alibaba-sentinel加这一个引用即可。

之后在application.yml里添加server的地址配置:

spring:application:name: baobanservercloud:sentinel:transport:dashboard: localhost:8080#eager: true

另外由于8080端口已被占用,自行设置一个端口,如8888.

做完这些,新建一个controller,

@RestControllerpublic class TestController {@GetMapping(value = "/hello")public String hello() {return "Hello Sentinel";}}

就是一个普通的controller接口。

之后启动该项目。启动后回到server的控制台界面:

发现并没有什么变化。然后我们调用一下hello接口。之后再次刷新server控制台。

界面已经出现了我们的项目,并且有一堆规则。

因为Sentinel采用延迟加载,只有在主动发起一次请求后,才会被拦截并发送给服务端。如果想关闭这个延迟,就在上面的yml里把eager的注释放掉。

然后在簇点链路里hello接口的流控那里设置限流规则,将单机阈值设为1.就代表一秒内最多只能通过1次请求到达该hello接口。

之后再次连续访问hello接口。

发现已经被拦截了,限流已经生效。

这样就完成了一次简单的限流操作,并且能看到各接口的QPS的统计。

本文链接:https://blog.csdn.net/tianyaleixiaowu/article/details/89916891

关注微信公众号:互联网架构师,在后台回复:2T,可以获取我整理的教程,都是干货。

猜你喜欢

1、GitHub 标星 3.2w!史上最全技术人员面试手册!FackBoo发起和总结

2、如何才能成为优秀的架构师?

3、从零开始搭建创业公司后台技术栈

4、程序员一般可以从什么平台接私活?

5、37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...

6、滴滴业务中台构建实践,首次曝光

7、不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事

8、15张图看懂瞎忙和高效的区别

9、2T架构师学习资料干货分享

阿里开源的限流神器 Sentinel,轻松搞定接口限流!相关推荐

  1. 还在用Word写论文?收下这个排版神器,轻松搞定所有公式!

    写论文一点也不可怕 可怕的是论文排版 稍微修改了下字体, 插图就不知道跑哪去了, 好不容易挪了回来, 文字又打乱了, 文字排好了 参考文献又乱了? 图片与公式显示又乱了 写论文只是费脑子 排版简直是要 ...

  2. 小红书图集神器,轻松搞定收藏

    作为一名热爱摄影的小伙伴,小红书是我经常使用的社交平台.而在小红书上,最吸引人的莫过于那些精美的图集了.但是,想要收集自己喜欢的图集却不知道如何下手?别担心,今天我就来分享一款小红书图集采集器,希望能 ...

  3. 接收大文件流_一文搞定 Node.js 流 (Stream)

    stream(流)是一种抽象的数据结构.就像数组或字符串一样,流是数据的集合. 不同的是,流可以每次输出少量数据,而且它不用存在内存中. 比如,对服务器发起 http 请求的 request/resp ...

  4. 阿里限流神器Sentinel夺命连环 17 问?,nginx请求转发原理

    阿里限流神器Sentinel夺命连环 17 问?,nginx请求转发原理 前沿技术精品 2021-11-17 10:43:04 阅读数:77 评论数:0 点赞数:0 收藏数:0 标签:Sentinel ...

  5. 阿里云HBase发布冷存储特性,助你不改代码,1/3成本轻松搞定冷数据处理

    9月27日,阿里云HBase发布了冷存储特性.用户可以在购买云HBase实例时选择冷存储作为一个附加的存储空间,并通过建表语句指定将冷数据存放在冷存储介质上面,从而降低存储成本.冷存储的存储成本仅为高 ...

  6. 一键加速去不掉加锁的_老旧油渍去不掉?这几款清洁神器帮你轻松搞定油污难题...

    生活中,我们常常被油污困扰,经常因为一点点的油污毁掉本来非常完美的一身衣服,让开心的外出变成烦躁和不快.那么面对该死的"油污"我们真的束手无策了吗?"NO",有 ...

  7. 前端表单神器form-create,复杂表单轻松搞定

    form-create 是一个可以通过 JSON 生成具有动态渲染.数据收集.验证和提交功能的表单生成组件.支持3个UI框架,并且支持生成Vue 组件.内置20种常用表单组件和自定义组件,再复杂的表单 ...

  8. 神器!用Python轻松搞定验证码!

    转自:大邓和他的Python 大家好,今天给大家介绍一款通用验证码识别OCR库的神器,项目地址:https://github.com/sml2h3/ddddocr.市场上常见的点选类验证码图片如下图所 ...

  9. 轻松搞定阿里OSS文件上传和图片下载

    轻松搞定阿里OSS文件上传和图片下载 目录 1. 阿里云oss账号准备   1.1 注册阿里云账号,并开通OSS存储服务   1.2 创建RAM子用户并使用子账户的AccessKeyId和Access ...

  10. 闲鱼引流怎么留微信,这些方法让你轻松搞定!

    闲鱼引流怎么留微信,这些方法让你轻松搞定! 许多小伙伴都有做微商,要是可以通过闲鱼将客户引流到微信上,推销产品起来可以事半功倍,那么小伙伴们知道闲鱼引流怎么留微信吗?请跟小编一起往下看看有哪些方法吧. ...

最新文章

  1. 一份详细的“入坑Phd指南”---教你如何做笔记、整理参考书目、管理时间、如何写作、对自己和导师合理预期...
  2. 用泰勒级数来估计函数的近似值
  3. oracle if=,oracle中if/else的三种实现方式详解
  4. C#String与string大小写的区别
  5. java类加载过程_面试官:java类的加载过程
  6. cacti 忘记密码的方法
  7. java中p.name_spring如何使用命名空间p简化bean的配置
  8. 模拟登录(一次自动调转)
  9. 染色产品常见疵病分析
  10. java oop试题_java oop 试题
  11. yum rpm apt-get wget 辨析
  12. Inno Setup for Windows service
  13. SQL语言学习随手记——二进制与十六进制之间的转换
  14. Cadence工具系列介绍
  15. 云计算的核心技术,主要有哪些?
  16. Git版本控制基本使用知识整理
  17. BM3D、域变换与Non-Local
  18. 图像处理之双线性插值法
  19. 什么是光电耦合器?光耦有哪些类型
  20. eclipse Java Web项目自定义访问项目名称

热门文章

  1. 移动商城第十四篇【收货地址查询、添加、更新】
  2. Git教程、python教程、ubuntu教程 收藏
  3. Selenium2Library(RF)浏览器打不开问题汇总
  4. linux系统网络命令(六)
  5. Firefox 37原生支持HTML5视频回放功能
  6. tiny_mce的本地图片上传插件
  7. 检查和安装过程中的常见的问题
  8. vim 的复制粘贴剪切
  9. Artstudio Pro Mac(绘图与图片编辑软件)特别版
  10. 苹果mac最好用的视频下载软件:Downie 4