文档简介:
-
架构图
-
介绍
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。 Sentinel以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
Sentinel具有以下特征:
· 丰富的应用场景: Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、实时熔断下游不可用应用等。
· 完备的实时监控: Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
· 广泛的开源生态: Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
· 完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展点。您可以通过实现扩展点,快速的定制逻辑。例如定制规则管理、适配数据源等。
-
规则的种类
Sentinel 的所有规则都可以在内存态中动态地查询及修改,修改之后立即生效。同时 Sentinel 也提供相关 API,供您来定制自己的规则策略。
Sentinel 支持以下几种规则:
流量控制规则、熔断降级规则、系统保护规则、授权规则 和 热点参数规则。
流量控制规则(FLowRule)
流量规则的定义
重要属性:
|
Field |
说明 |
默认值 |
|
resource |
资源名,资源名是限流规则的作用对象 |
|
|
count |
限流阈值 |
|
|
grade |
限流阈值类型,QPS 或线程数模式 |
QPS 模式 |
|
limitApp |
流控针对的调用来源 |
default,代表不区分调用来源 |
|
strategy |
判断的根据是资源自身,还是根据其它关联资源 (refResource),还是根据链路入口 |
根据资源本身 |
|
controlBehavior |
流控效果(直接拒绝 / 排队等待 / 慢启动模式) |
直接拒绝 |
同一个资源可以同时有多个限流规则。
熔断降级规则 (DegradeRule)
熔断降级规则包含下面几个重要的属性:
|
Field |
说明 |
默认值 |
|
resource |
资源名,即限流规则的作用对象 |
|
|
count |
阈值 |
|
|
grade |
降级模式,根据 RT 降级还是根据异常比例降级 |
RT |
|
timeWindow |
降级的时间 |
|
同一个资源可以同时有多个降级规则。
系统保护规则 (SystemRule)
规则包含下面几个重要的属性:
|
Field |
说明 |
默认值 |
|
highestSystemLoad |
最大的 load1,参考值 |
-1 (不生效) |
|
avgRt |
所有入口流量的平均响应时间 |
-1 (不生效) |
|
maxThread |
入口流量的最大并发数 |
-1 (不生效) |
|
qps |
所有入口资源的 QPS |
-1 (不生效) |
理解上面规则的定义之后,我们可以通过调用 SystemRuleManager.loadRules()方法来用硬编码的方式定义流量控制规则。
授权规则 (AuthorityRule)
很多时候,我们需要根据调用方来限制资源是否通过,这时候可以使用 Sentinel 的黑白名单控制的功能。黑白名单根据资源的请求来源(origin)限制资源是否通过,若配置白名单则只有请求来源位于白名单内时才可通过;若配置黑名单则请求来源位于黑名单时不通过,其余的请求通过。
授权规则,即黑白名单规则(AuthorityRule)非常简单,主要有以下配置项:
-
resource:资源名,即限流规则的作用对象
-
limitApp:对应的黑名单/白名单,不同 origin 用 ,分隔,如 appA,appB
-
strategy:限制模式,AUTHORITY_WHITE为白名单模式,AUTHORITY_BLACK为黑名单模式,默认为白名单模式
更多详情可以参考 黑白名单控制。
热点规则 (ParamFlowRule)
热点参数规则
热点参数规则(ParamFlowRule)类似于流量控制规则(FlowRule):
|
属性 |
说明 |
默认值 |
|
resource |
资源名,必填 |
|
|
count |
限流阈值,必填 |
|
|
grade |
限流模式 |
QPS 模式 |
|
paramIdx |
热点参数的索引,必填,对应 SphU.entry(xxx, args)中的参数索引位置 |
|
|
paramFlowItemList |
参数例外项,可以针对指定的参数值单独设置限流阈值,不受前面 count阈值的限制。仅支持基本类型 |
|
可以通过 ParamFlowRuleManager的 loadRules方法更新热点参数规则
详情可以参考 热点参数限流。
-
实现功能
1.限流规则配置在配置中心进行配置
2.应用端实现从配置中心获取限流规则和相关参数
3.Sentinel控制台可以看到限流参数配置(来自配置中心的数据)配置中心修改限流参数,控制台刷新后变为最新参数
-
配置中心
-
Sentinel控制台
-
应用端配置






