️ Pic by Alibaba Tech on Facebookhtml
集群限流 能够限制某个资源调用在集群内的总 QPS,而且能够解决单机流量不均致使总的流控效果不佳的问题,是保障服务稳定性的利器。git
Sentinel 从 1.4.0 版本开始提供集群流控特性,但使用 Sentinel 集群限流须要对一系列的动态数据源进行相关配置,而且须要对开源控制台进行一些改造,有必定的使用成本。为了你们更好地理解集群流控并快速地使用,咱们提供了云上版本的 Sentinel 集群限流控制台示例。只须要简单的几步便可快速接入 AHAS Sentinel 集群限流控制台,无需手动配置动态数据源。github
注:本控制台示例位于云上环境,须要使用阿里云帐号登陆。web
咱们只须要在 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 控制台,只须要将依赖替换回来,修改一下启动参数便可。app
注意:ahas-sentinel-client 1.1.x 仅兼容 Sentinel 1.4.1 及以上版本。阿里云
引入依赖后,咱们须要到 阿里云控制台 开通 AHAS 功能(免费)。能够根据 开通 AHAS 文档 和 Sentinel 流控降级 Demo 快速入门 里面的指引进行开通。注意若应用运行在非阿里云 ECS 环境或本地,须要在左上角选择切换 公网 环境。spa
开通后咱们能够点击左侧侧边栏的 流控降级,进入 Sentinel 控制台应用总览页面。在页面右上角,单击 应用接入,选择 Java SDK 接入页签,到 配置启动参数 页签拿到须要的 JVM 启动参数(详情请参考 SDK 接入文档),相似于:3d
-Dproject.name=AppName -Dahas.license=<License>
其中 project.name
表明应用名(会显示在控制台),ahas.license
表明本身的受权 license。
注意:若应用运行在非阿里云 ECS 环境或本地,须要在左上角切换到 公网 环境。
详细接入步骤能够参考 AHAS Sentinel 控制台文档。
接下来咱们就能够在本地启动应用了,启动应用时须要加上拿到的启动参数。若要在本地体验集群限流功能,须要在本机启动多个应用实例,并额外添加 -Dcsp.sentinel.log.use.pid=true
参数(用于区分同个应用多个实例)。启动以后,咱们就能够在对应应用的机器列表页面看到接入的机器了:
集群限流中共有两种身份:
本示例中 Token Server 模式为嵌入模式,即做为内置的 Token Server 与应用在同一进程中启动,无需单独部署:
咱们须要经过特定的 URL 来进入 AHAS 集群流控 Demo 页面(其中 appName
后面的参数替换成咱们的应用名):
https://ahas.console.aliyun.com/#/SystemGuardClusterServerPage?appName=web-demo®ionId=public
而后咱们就进入到了集群流控 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 的实时信息:
接下来咱们去流控规则页面给咱们的应用配置流控规则。先对某个资源配置普通的流控规则,单机 QPS 阈值设置为 10:
而后分别持续请求两台机器对应的资源,能够在监控页面看到总 QPS 为 20(每一个单机 QPS 各为 10):
接下来咱们编辑刚才新建的规则,开启集群模式,阈值模式选择“整体阈值”,表明对该资源限制集群内的调用总量为 10。保存规则:
等待一段时间,咱们能够在监控页面看到资源的总 QPS 被限到了 10:
有关 Sentinel 集群流控的更多特性和用法,能够参考 Sentinel 集群流控文档 以及以前的集群流控的文章。咱们同时提供了嵌入模式下应用配置集群流控配置源的 Demo,能够参考:sentinel-demo-cluster-embedded。
宿何,社区昵称sczyh30,阿里巴巴高可用架构组开发工程师,目前主要负责Sentinel 开源项目的开发和社区维护。
有关 Sentinel 的更多信息:
原文连接 更多技术干货 请关注阿里云云栖社区微信号 :yunqiinsight