阿里开源的限流神器 Sentinel,轻松搞定接口限流!
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,轻松搞定接口限流!相关推荐
- 还在用Word写论文?收下这个排版神器,轻松搞定所有公式!
写论文一点也不可怕 可怕的是论文排版 稍微修改了下字体, 插图就不知道跑哪去了, 好不容易挪了回来, 文字又打乱了, 文字排好了 参考文献又乱了? 图片与公式显示又乱了 写论文只是费脑子 排版简直是要 ...
- 小红书图集神器,轻松搞定收藏
作为一名热爱摄影的小伙伴,小红书是我经常使用的社交平台.而在小红书上,最吸引人的莫过于那些精美的图集了.但是,想要收集自己喜欢的图集却不知道如何下手?别担心,今天我就来分享一款小红书图集采集器,希望能 ...
- 接收大文件流_一文搞定 Node.js 流 (Stream)
stream(流)是一种抽象的数据结构.就像数组或字符串一样,流是数据的集合. 不同的是,流可以每次输出少量数据,而且它不用存在内存中. 比如,对服务器发起 http 请求的 request/resp ...
- 阿里限流神器Sentinel夺命连环 17 问?,nginx请求转发原理
阿里限流神器Sentinel夺命连环 17 问?,nginx请求转发原理 前沿技术精品 2021-11-17 10:43:04 阅读数:77 评论数:0 点赞数:0 收藏数:0 标签:Sentinel ...
- 阿里云HBase发布冷存储特性,助你不改代码,1/3成本轻松搞定冷数据处理
9月27日,阿里云HBase发布了冷存储特性.用户可以在购买云HBase实例时选择冷存储作为一个附加的存储空间,并通过建表语句指定将冷数据存放在冷存储介质上面,从而降低存储成本.冷存储的存储成本仅为高 ...
- 一键加速去不掉加锁的_老旧油渍去不掉?这几款清洁神器帮你轻松搞定油污难题...
生活中,我们常常被油污困扰,经常因为一点点的油污毁掉本来非常完美的一身衣服,让开心的外出变成烦躁和不快.那么面对该死的"油污"我们真的束手无策了吗?"NO",有 ...
- 前端表单神器form-create,复杂表单轻松搞定
form-create 是一个可以通过 JSON 生成具有动态渲染.数据收集.验证和提交功能的表单生成组件.支持3个UI框架,并且支持生成Vue 组件.内置20种常用表单组件和自定义组件,再复杂的表单 ...
- 神器!用Python轻松搞定验证码!
转自:大邓和他的Python 大家好,今天给大家介绍一款通用验证码识别OCR库的神器,项目地址:https://github.com/sml2h3/ddddocr.市场上常见的点选类验证码图片如下图所 ...
- 轻松搞定阿里OSS文件上传和图片下载
轻松搞定阿里OSS文件上传和图片下载 目录 1. 阿里云oss账号准备 1.1 注册阿里云账号,并开通OSS存储服务 1.2 创建RAM子用户并使用子账户的AccessKeyId和Access ...
- 闲鱼引流怎么留微信,这些方法让你轻松搞定!
闲鱼引流怎么留微信,这些方法让你轻松搞定! 许多小伙伴都有做微商,要是可以通过闲鱼将客户引流到微信上,推销产品起来可以事半功倍,那么小伙伴们知道闲鱼引流怎么留微信吗?请跟小编一起往下看看有哪些方法吧. ...
最新文章
- 一份详细的“入坑Phd指南”---教你如何做笔记、整理参考书目、管理时间、如何写作、对自己和导师合理预期...
- 用泰勒级数来估计函数的近似值
- oracle if=,oracle中if/else的三种实现方式详解
- C#String与string大小写的区别
- java类加载过程_面试官:java类的加载过程
- cacti 忘记密码的方法
- java中p.name_spring如何使用命名空间p简化bean的配置
- 模拟登录(一次自动调转)
- 染色产品常见疵病分析
- java oop试题_java oop 试题
- yum rpm apt-get wget 辨析
- Inno Setup for Windows service
- SQL语言学习随手记——二进制与十六进制之间的转换
- Cadence工具系列介绍
- 云计算的核心技术,主要有哪些?
- Git版本控制基本使用知识整理
- BM3D、域变换与Non-Local
- 图像处理之双线性插值法
- 什么是光电耦合器?光耦有哪些类型
- eclipse Java Web项目自定义访问项目名称