图片描述
️ Pic by Alibaba Tech on Facebook

集群限流 可以限制某个资源调用在集群内的总 QPS,并且可以解决单机流量不均导致总的流控效果不佳的问题,是保障服务稳定性的利器。

图片描述

Sentinel 从 1.4.0 版本开始提供集群流控特性,但使用 Sentinel 集群限流需要对一系列的动态数据源进行相关配置,并且需要对开源控制台进行一些改造,有一定的使用成本。为了大家更好地理解集群流控并快速地使用,我们提供了云上版本的 Sentinel 集群限流控制台示例。只需要简单的几步即可快速接入 AHAS Sentinel 集群限流控制台,无需手动配置动态数据源。

注:本控制台示例位于云上环境,需要使用阿里云账号登录。

  1. 引入依赖

我们只需要在 Maven 中引入以下依赖:

<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>ahas-sentinel-client</artifactId>
<version>1.1.0</version>
</dependency>
ahas-sentinel-client 中会包含 sentinel-core 以及集群限流等必要依赖(基于 Sentinel 1.4.1 版本),以及连接阿里云 AHAS Sentinel 控制台所需模块(鉴权、通信等)。同时 ahas-sentinel-client 实现了 push 模式的数据源并且会自动注册所有规则配置和集群配置数据源,在控制台推送即可实时生效:

图片描述

若之前接入了开源 Sentinel 控制台,则需要将相关的通信依赖(如 sentinel-transport-simple-http 或 sentinel-transport-netty-http)替换成此依赖,否则将无法正确连接 AHAS Sentinel 控制台。若希望从 AHAS Sentinel 控制台切换到开源 Sentinel 控制台,只需要将依赖替换回来,修改一下启动参数即可。

注意:ahas-sentinel-client 1.1.x 仅兼容 Sentinel 1.4.1 及以上版本。

  1. 开通 AHAS,获取启动参数

引入依赖后,我们需要到 阿里云控制台 开通 AHAS 功能(免费)。可以根据 开通 AHAS 文档 和 Sentinel 流控降级 Demo 快速入门 里面的指引进行开通。注意若应用运行在非阿里云 ECS 环境或本地,需要在左上角选择切换 公网 环境。

开通后我们可以点击左侧侧边栏的 流控降级,进入 Sentinel 控制台应用总览页面。在页面右上角,单击 应用接入,选择 Java SDK 接入页签,到 配置启动参数 页签拿到需要的 JVM 启动参数(详情请参考 SDK 接入文档),类似于:

-Dproject.name=AppName -Dahas.license=<License>
其中 project.name 代表应用名(会显示在控制台),ahas.license 代表自己的授权 license。

注意:若应用运行在非阿里云 ECS 环境或本地,需要在左上角切换到 公网 环境。

详细接入步骤可以参考 AHAS Sentinel 控制台文档。

  1. 启动应用实例

接下来我们就可以在本地启动应用了,启动应用时需要加上拿到的启动参数。若要在本地体验集群限流功能,需要在本机启动多个应用实例,并额外添加 -Dcsp.sentinel.log.use.pid=true 参数(用于区分同个应用多个实例)。启动之后,我们就可以在对应应用的机器列表页面看到接入的机器了:

图片描述

  1. 分配 Token Server

集群限流中共有两种身份:

Token Client 即集群流控客户端,用于向所属 Token Server 通信请求 token。集群限流服务端会返回给客户端结果,决定是否限流。Sentinel 集群流控的通信底层采用 Netty 实现。
Token Server 即集群流控服务端,处理来自 Token Client 的请求,根据配置的集群规则判断是否应该发放 token(是否允许通过)。
本示例中 Token Server 模式为嵌入模式,即作为内置的 Token Server 与应用在同一进程中启动,无需单独部署:

图片描述

我们需要通过特定的 URL 来进入 AHAS 集群流控 Demo 页面(其中 appName 后面的参数替换成我们的应用名):

https://ahas.console.aliyun.c...

然后我们就进入到了集群流控 Token Server 列表页面:

图片描述

我们可以点击右上角的 新增 Token Server 按钮来新增 Token Server 并执行分配。我们首先需要在新增 Token Server 对话框内选择一台 Token Server,并配置该 Token Server 的端口以及最大的 QPS 配额(用于限制资源使用,防止嵌入模式下影响应用本身)。接下来我们就在下面的选择框中为该 Token Server 分配 Token Client。在上面图中的例子中,我们的应用共有两个实例,其中一个指定为 Token Server,另一个指定为 Token Client。选择完成后点击“保存”按钮保存分配。

图片描述

保存成功后,我们就能在 Token Server 列表页面看到刚刚分配的 Token Server 了:

图片描述

点击左侧的下拉按钮,可以看到该 Token Server 和所管理的 Token Client 的实时信息:

图片描述

  1. 配置规则,查看效果

接下来我们去流控规则页面给我们的应用配置流控规则。先对某个资源配置普通的流控规则,单机 QPS 阈值设置为 10:

图片描述

然后分别持续请求两台机器对应的资源,可以在监控页面看到总 QPS 为 20(每个单机 QPS 各为 10):

图片描述

接下来我们编辑刚才新建的规则,开启集群模式,阈值模式选择“总体阈值”,代表对该资源限制集群内的调用总量为 10。保存规则:

图片描述

等待一段时间,我们可以在监控页面看到资源的总 QPS 被限到了 10:

图片描述

有关 Sentinel 集群流控的更多特性和用法,可以参考 Sentinel 集群流控文档 以及之前的集群流控的文章。我们同时提供了嵌入模式下应用配置集群流控配置源的 Demo,可以参考:sentinel-demo-cluster-embedded。

本文作者:
宿何,社区昵称sczyh30,阿里巴巴高可用架构组开发工程师,目前主要负责Sentinel 开源项目的开发和社区维护。

快速体验 Sentinel 集群限流功能,只需简单几步相关推荐

  1. Sentinel 集群限流设计原理

    本节目录 1.集群限流使用场景 2.集群限流与单机限流的异同思考 3.探究集群限流实现原理 3.1 ClusterBuilderSlot 详解 3.2 集群限流模式实现原理 3.2.1 Default ...

  2. sentinel 集群限流

    sentinel 集群限流 官网:https://sentinelguard.io/zh-cn/docs/cluster-flow-control.html 集群限流 集群限流:一个服务在多个机器上部 ...

  3. Sentinel v1.4.2 发布,更好用的集群限流功能

    Sentinel 发布 v1.4.2 正式发布,该版本主要变更如下: 特性/功能改进 新增 Zuul 1.x 适配模块(sentinel-zuul-adapter),结合集群限流特性可以更好地在 AP ...

  4. 更好用的集群限流功能,Sentinel 发布 v1.4.2

    Sentinel 发布 v1.4.2 正式发布,该版本主要变更如下: 特性/功能改进 新增 Zuul 1.x 适配模块(sentinel-zuul-adapter),结合集群限流特性可以更好地在 AP ...

  5. 解决sentinel结合nacos实现集群限流(嵌入式)

    本文将为您介绍什么是集群流控,如何使用阿里的开源项目 Sentinel实现动态配置的集群流控的详细内容,以下是详情内容,希望我们能共同学习进步 Why? 为什么要用集群流控? 相对于单机流控而言,我们 ...

  6. 单机快速体验k8s集群的测试环境

    快速指南 以下为快速体验k8s集群的测试.开发环境–单节点部署(aio),国内环境下比官方的minikube方便.简单很多. 1.基础系统配置 准备一台虚机配置内存2G/硬盘30G以上 最小化安装Ub ...

  7. Sentinel初始化监控_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0031

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们开始配置sentinel的初始化监控功能,其实就是对我们访问的微服务进行一个保护 这个保护 ...

  8. Sentinel系统规则_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0044

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后咱们来说一下这个系统规则怎么用 可以看到系统规则,又叫系统自适应限流,就是说,sentinel ...

  9. Sentinel热点Key降级下_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0043

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 先复习一下 可以看到我们配置的是testHotKey,这个资源名,就是 @SentinelReso ...

最新文章

  1. centos iptables关于ping
  2. 传统的Linux中IPC通信原理
  3. vue 的elementui中select下拉框多选项-multiple属性
  4. vxworks的default boot line说明
  5. LinkedList源码阅读笔记(1.8)
  6. w10查看端口_win10系统查看端口是否打开的操作方法
  7. linux常用之必备基础命令一
  8. 如何将720P的mp4视频转换成1080P的视频?视频分辨率如何修改?
  9. 小程序开发用什么编程语言_微信小程序开发教程是什么?费用多少?
  10. 电梯导航a链接锚点跳转生硬
  11. kbhit linux windows通用,_kbhit() for Linux
  12. 成功靠奋斗,奋斗靠坚持
  13. FFmpeg添加x265/hevc编码器支持
  14. CWE 4.7中的新视图:工业控制系统的安全漏洞类别
  15. axis=0与axis=1
  16. JavaScript # 前端 js、html中的单引号、双引号及其转义使用
  17. 数据库备份-XtraBackup
  18. 蓝桥杯单片机数码管动态显示_关于蓝桥杯训练小程序 中断控制数码管显示数字的左右移动...
  19. Python装逼指南——五行代码实现批量抠图
  20. umeditor+粘贴word图片

热门文章

  1. Leaflet中使用MovingMarker插件实现标记移动(轨迹回放效果)
  2. IDEA中启动SpringBoot项目时提示:“Error java:程序包xxx不存在”,但实际上是存在的
  3. 信息系统项目管理师-项目风险管理考点笔记
  4. ElementUI中的el-table怎样实现绑定对象数组时每一列不同控件的动态数据绑定
  5. SpringBoot中将thymeleaf升级到3.0或以上版本
  6. Jquery中对常用控件赋值的方法
  7. springboot使用webjars引入jquery
  8. ShardingSphere 系列
  9. 苹果雪豹操作系统正式版_苹果文件泄密?3 款新 iPhone 正式命名曝光
  10. cad2016中选择全图字体怎么操作_LOL无限火力凯隐全图W技能BUG怎么卡 无限火力凯隐全图W技能BUG卡法介绍...