点击上方蓝色“方志朋”,选择“设为星标”

回复“666”获取独家整理的学习资料!

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

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

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

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

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。

具体配置的解释,可以到GitHub上看一下文档。

这里我们直接使用默认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的。

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

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

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

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

做完这些,新建一个controller,

@RestController
public 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://urlify.cn/YjY322

热门内容:
  • 原来 Elasticsearch 还可以这么理解

  • 干掉Navicat:正版,MySQL官方客户端真香!

  • 并发测试神器,模拟一次超过 5 万的并发用户

  • 使用IntelliJ IDEA查看类图,内容极度舒适

最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
明天见(。・ω・。

轻松两步,我在 SpringBoot 服务上实现了接口限流相关推荐

  1. 微服务接口限流的设计与思考(附GitHub框架源码)

    http://www.infoq.com/cn/articles/microservice-interface-rate-limit?useSponsorshipSuggestions=true&am ...

  2. 微服务(八)——Hystrix服务降级、熔断、限流(上)

    目录 Hystrix服务降级.熔断.限流 Hystrix是什么 Hystrix停更进维 Hystrix的服务降级熔断限流相关概念 Hystrix支付微服务构建 JMeter高并发压测后卡顿 订单微服务 ...

  3. Hystrix断路器原理及实现(服务降级、熔断、限流)

    Hystrix断路器原理及实现(服务降级.熔断.限流) 分布式系统面临的问题 Hystrix重要概念(面试常考) Hystrix案例 Hystrix 服务提供者 Hystrix 服务消费者 原因与解决 ...

  4. 天弘基金首席架构师李鑫:微服务接口限流的算法及架构实现

    李鑫(码码的土狼) 读完需要 9 分钟 速读仅需 3 分钟 李鑫,著有<微服务治理:体系.架构及实践>一书,公众号"码码的土狼"分享技术干货及心得. 目前是天弘基金移动 ...

  5. 接口限流、服务降级、熔断

    接口限流 为什么需要限流 与用户打交道的服务 比如web服务.对外API,这种类型的服务有以下几种可能导致机器被拖垮 用户增长过快(这是好事) 因为某个热点事件(微博热搜) 竞争对象爬虫 恶意的刷单 ...

  6. 「微服务系列 13」熔断限流隔离降级

    我们知道微服务分布式依赖关系错综复杂,比方说前端的请求转化为后端调用的服务请求,一个前端请求会转为成很多个后端调用的服务请求,那么这个时候后台的服务出现不稳定或者延迟,如果没有好的限流熔断措施,可能会 ...

  7. 服务熔断、降级、限流、异步RPC -- HyStrix

    本人新书出版,对技术感兴趣的朋友请关注: https://mp.weixin.qq.com/s/uq2cw2Lgf-s4nPHJ4WH4aw 在今天,基于SOA的架构已经大行其道.伴随着架构的SOA化 ...

  8. 高并发之服务降级和服务熔断____服务降级、熔断、限流的区别

    高并发之服务降级和服务熔断 服务降级: 服务压力剧增的时候根据当前的业务情况及流量对一些服务和页面有策略的降级,以此环节服务器的压力,以保证核心任务的进行. 同时保证部分甚至大部分任务客户能得到正确的 ...

  9. Springboot 整合 Current-Limiting 实现接口限流

    该篇文章内容: 1.实现标题中提到的接口限流 2.使用压测工具jmeter给大家展现验证效果 第一部分,代码的实现 首先是导入依赖包: <dependency><groupId> ...

最新文章

  1. 推荐并简要分析一个silverlight的相册DEMO--ImageSnipper(V2)
  2. AMNO.6 给出一个不多于5位的整数,要求 1、求出它是几位数 2、分别输出每一位数字 3、按逆序输出各位数字,例如原数为321,应输出123 输入 一个不大于5位的数字
  3. 第五篇:协调和协定之选举算法
  4. [轉]c#简单调用DELPHI DLL封装窗体
  5. pku 2635 The Embarrassed Cryptographer 数论——素数筛选法+模拟大数除法
  6. 【网络安全工程师面试合集】—邮件协议是如何被安全人员利用的?
  7. 【NTC 热敏电阻与 Arduino 读取温度】
  8. Spring(二)控制层梳理
  9. 百度地图 雷达/地理编码 功能使用
  10. LeetCode 299. Bulls and Cows(公牛和母牛)
  11. AcWing 838.堆排序
  12. 基于单片机的语音风扇的设计与实现
  13. 微信提示已连接到服务器失败,微信提示无法连接到服务器如何解决
  14. 【C++】特殊类相关设计
  15. (23)利用Householder变换求A的QR分解
  16. python手记(四):pillow(四) ImageDraw模块 图片绘制(图片上自定义绘制)
  17. 拓扑排序在实际项目中应用
  18. fseek() 函数
  19. Hackable Projects (可拓展的项目)
  20. 内核里的猪头 -- piggy.o

热门文章

  1. Go 系列教程 —— 20. 并发入门
  2. idea中文乱码问题
  3. Android之View绘制流程源码分析
  4. Linux最大打开文件描述符数
  5. HTML5标签学习之~~~
  6. 【组队学习】【35期】SQL编程语言
  7. 【青少年编程竞赛交流】02月份微信图文索引
  8. LeetCode实战:字符串相乘
  9. Matlab与线性代数 -- 稀疏矩阵的图形显示
  10. tensorflow 1