大家好,我是方木

前言

限流一直就是一个比较热门而又老旧的话题,但是作为应对高并发的手段之一,限流的热度一直都在。

提到限流框架,很多人可能会想到GuavaRatelimiter,或者Netflixconcuurency-limits,又或者Spring官方出品的Hystrix(已经停止维护了)和替代Hystrix的Resilience4j

那么,如果必须要我选择一款限流的框架,那就是它 - Sentinel

Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。

Sentinel 2012年诞生,至今已有10个年头,在阿里内部积累了大量的流量生产实践经验。目前的社区活跃度很高,很多公司都在使用。

sentinel的主要功能有

  • 流量控制:直接限流、冷启动、排队等
  • 熔断降级:通过并发线程数、响应时间进行限制降级
  • 系统负载保护:提供系统维度的自适应保护能力

基础使用

让我们先从简单的例子入手

1. 引入 Sentinel 依赖

使用 Maven引入,在pom.xml文件中加入sentinel依赖:

<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-core</artifactId><version>1.8.3</version>
</dependency>

2. 定义规则和资源

规则

private static void initFlowRules() {List<FlowRule> rules = new ArrayList<>();FlowRule rule = new FlowRule();rule.setResource("HelloWorld");rule.setGrade(RuleConstant.FLOW_GRADE_QPS);// QPS 20.rule.setCount(20);rules.add(rule);FlowRuleManager.loadRules(rules);
}

资源

public static void main(String[] args) {// 配置规则initFlowRules();while (true) {// 1.5.0 版本开始可以直接利用 try-with-resources 特性try (Entry entry = SphU.entry("HelloWorld")) {// 被保护的逻辑System.out.println("hello world");} catch (BlockException ex) {// 处理被流控的逻辑System.out.println("blocked!");}}
}

也可以直接使用注解

@SentinelResource("HelloWorld")
public void helloWorld() {// 资源中的逻辑System.out.println("hello world");
}

3. 运行

可以看到,当我们设置了QPS为20的时候,SphU.entry()模拟请求跑了20次就会报错

我们可以查看日志~/logs/csp/${appName}-metrics.log.xxx,日志中也记录了详情,其中 p 代表通过的请求, block 代表被阻止的请求, s 代表成功执行完成的请求个数, e 代表用户自定义的异常, rt 代表平均响应时长。

可以看到,这个程序每秒稳定输出 "hello world" 20 次,和规则中预先设定的阈值是一样的。说明sentinel的限流策略生效了。

1646746567000|2022-03-08 21:36:07|HelloWorld|20|6863|20|0|1|0|0|0
1646746568000|2022-03-08 21:36:08|HelloWorld|20|109154|20|0|0|0|0|0
1646746569000|2022-03-08 21:36:09|HelloWorld|20|115142|20|0|0|0|0|0
1646746570000|2022-03-08 21:36:10|HelloWorld|20|134763|20|0|0|0|0|0

Sentinel 控制台

Sentinel 提供一个轻量级的开源控制台,它提供机器发现以及健康情况管理、监控(单机和集群),规则管理和推送的功能。

Sentinel 控制台包含如下功能:

  • 查看机器列表以及健康情况:收集 Sentinel 客户端发送的心跳包,用于判断机器是否在线。
  • 监控 (单机和集群聚合):通过 Sentinel 客户端暴露的监控 API,定期拉取并且聚合应用监控信息,最终可以实现秒级的实时监控。
  • 规则管理和推送:统一管理推送规则。
  • 鉴权:生产环境中鉴权非常重要。这里每个开发者需要根据自己的实际情况进行定制。

需要注意的是:

Sentinel 控制台目前仅支持单机部署。官方表示Sentinel 控制台不作为开箱即用的生产环境控制台,若希望在生产环境使用要根据文档自行进行定制和改造。

使用sentinel控制台,首先需要下载控制台 jar 包

sentinel 控制台 release 下载页面

ps:也可以自己下载源码打jar包

接着就是启动控制台

java -Dserver.port=8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

访问http://localhost:8080/就可以看到sentinel的控制台了,默认用户名和密码都是 sentinel

此时控制台空空如也,是因为现在我们的程序是没有接入到dashboard的,

此时我们需要按照以下步骤接入到控制台

  1. 引入JAR包

引入 Transport 模块来与 Sentinel 控制台进行通信

<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-transport-simple-http</artifactId><version>1.8.3</version>
</dependency>
  1. 配置dashboard参数
server:port: 8081spring:application:name: testcloud:#sentinel控制台的请求地址sentinel:transport:dashboard: localhost:8080   

编写测试接口

@GetMapping("/test")
public String testSentinel() {String resourceName = "test";Entry entry = null;String retVal;try {entry = SphU.entry(resourceName, EntryType.IN);retVal = "passed";} catch (BlockException e) {retVal = "blocked";} finally {if (entry != null) {entry.exit();}}return retVal;
}

客户端配置好了与控制台的连接参数之后,并不会主动连接上控制台,需要触发一次客户端的规则才会开始进行初始化,并向控制台发送心跳和客户端规则等信息。所以测试项目启动后访问http://localhost:8081/test,可以看到,此时的sentinel控制台已经有我们项目启动的信息了

客户端连接上dashboard之后,我们就可以为我们定义的资源配置规则了,有两种方式可以配置规则:

  • 流控规则页面中新增
  • 簇点链路中添加

我们可以在流控规则页面中新增,点击流控规则进入页面,如下图所示:

也可以在簇点链路的页面中找到我们埋点的资源名,然后直接对该资源进行增加流控规则的操作

通过这些资源的配置,就可以简单的实现项目接口的流控了。

以上就是sentinel的基本操作了,后续的文章里方木会继续讲解sentinel的深度使用以及二次开发,感兴趣的朋友可以点个关注~

欢迎关注我的公众号:Java架构师进阶编程,回复 面试 ,获取上百份面试资源!

阿里开源流控框架 - Sentinel入门介绍相关推荐

  1. Django框架之入门介绍

    Python下有许多款不同的Web框架.Django(发音:[`dʒæŋɡəʊ]) 是重量级选手中最有代表性的一位,许多成功的网站和APP都基于Django. 作为Python最重要的框架之一,Dja ...

  2. 分布式事物框架--EasyTransaction的入门介绍

    分布式事物框架--EasyTransaction的入门介绍 柔性事务,分布式事务,TCC,SAGA,可靠消息,最大努力交付消息,事务消息,补偿,全局事务,soft transaction, distr ...

  3. 分布式事物框架Easy-Transaction--使用入门介绍

    分布式事物框架Easy-Transaction--使用入门介绍 The origin This framework is inspired by a PPT (<大规模SOA系统的分布式事务处理 ...

  4. symfony入门学习资料之十六:Symfony框架启动过程介绍

    symfony入门学习资料之十六:Symfony框架启动过程介绍 Symfony框架的核心本质是把Request转换成Response的一个过程.从入口文件(web_dev.php)的源码可以看个大概 ...

  5. matlab 写入 MYSQL_阿里开源MySQL中间件Canal快速入门

    前言 距离上一篇文章发布又过去了两周,这次先填掉上一篇秒杀系统文章结尾处开的坑,介绍一下数据库中间件Canal的使用. 「Canal用途很广,并且上手非常简单,小伙伴们在平时完成公司的需求时,很有可能 ...

  6. Go语言Web框架:Beego框架快速入门

    文章目录 Beego框架快速入门 1.beego框架了解 2.MVC架构 3.环境搭建 4.beego的项目结构分析 5.Beego快速体验 6.Beego运行流程分析 7.Post案例实现 7.1前 ...

  7. 十九、Beego框架快速入门

    Beego框架快速入门 1.框架了解 go语言的web框架:beego,gin,echo等等,那为什么我们选择beego呢? 第一,beego是中国人开发的,开发文档比较详细,beego官网网址: h ...

  8. 美团小程序框架mpvue入门教程

    美团小程序框架mpvue入门教程 自打写了 美团小程序框架mpvue蹲坑指南, 一发不可收拾,今天趁周末空闲,来写个mpvue(没朋友)的简单入门教程,本教程只针对新手,老鸟勿喷. 另外,我还专门为本 ...

  9. Expression Blend实例中文教程(3) - 布局控件快速入门Grid

    上一篇对Blend 3开发界面进行了快速入门介绍,本篇将基于Blend 3介绍Silverlight控件.对于微软开发工具熟悉的朋友,相信您很快就熟悉Blend的开发界面和控件. XAML概述 Sil ...

最新文章

  1. 视频系列:RTX实时射线追踪(上)
  2. 操作系统学习:Linux0.12初始化详细流程-进程退出与系统进入怠速
  3. 交换机端口隔离技术应用
  4. 在URL地址栏中显示ico
  5. Spring MVC的框架组件
  6. Android如何实现TCP和UDP传输
  7. 科幻电影系列-计算机技术
  8. java面试题7 牛客:关于AWT和Swing说法正确的是?
  9. 上海交大MBA学费与资助
  10. 这就是即将发布的苹果刘海屏MacBook Pro样机?
  11. C#中的深度学习:ML.NET中具有预训练模型的硬币识别
  12. AI队列长度检测:使用Keras进行对象检测
  13. socket网络字节序相关概念
  14. centos进程php-fpm,CentOS 6.x 开启Nginx和Php-fpm状态统计
  15. CSS大美集(关于细节)
  16. 进字节一年了,分享一下当初刷的一百多篇算法题解
  17. cpu(s)和%CPU的的区别
  18. Linux双系统安装指南
  19. DEMAC电机驱动型电缆卷筒—上海班品智能
  20. mysql高效查询_mysql 高效率查询背景

热门文章

  1. macbook历代_盘点历代苹果笔记本,简直就是一部MacBook瘦身史
  2. 计算机叫醒服务英语,关于酒店叫醒服务的英文口语
  3. 【区块链论文阅读】计算机网络顶会INFOCOM(二)
  4. Infocom2022视频相关文章
  5. 在Wifi网络中嗅探明文密码(HTTP POST请求、POP等)
  6. p2p半分布式开源项目调研:
  7. 30了,程序员中的老司机们,30后的路该开向哪里?
  8. 微软中间语言—MSIL(转载)
  9. 鱼骨图和甘特图图表合集PPT模板-优页文档
  10. nyoj528 找球号(三) set容器的应用