Sentinel 配置文件各字段详细说明

Sentinel 是一款功能强大的开源流量控制组件。它由阿里巴巴开发,旨在为分布式系统提供流量控制、熔断降级、系统负载保护等功能。Sentinel 可以有效地应对突发的流量高峰,防止系统因流量过大而崩溃。它通过实时监控系统的流量、并发线程数、响应时间等指标,自动调整系统的流量控制策略,确保系统的稳定性和可用性。

Sentinel 是一款功能强大的开源流量控制组件。它由阿里巴巴开发,旨在为分布式系统提供流量控制、熔断降级、系统负载保护等功能。

Sentinel 可以有效地应对突发的流量高峰,防止系统因流量过大而崩溃。它通过实时监控系统的流量、并发线程数、响应时间等指标,自动调整系统的流量控制策略,确保系统的稳定性和可用性。

在流量控制方面,Sentinel 提供了多种流量控制策略,如限流、流量整形、热点参数限流等。这些策略可以根据不同的业务场景进行灵活配置,满足不同系统的流量控制需求。

此外,Sentinel 还提供了熔断降级功能。当系统中的某个服务出现故障时,Sentinel 可以自动熔断该服务,防止故障扩散。同时,它还可以根据系统的负载情况自动降级一些非关键服务,以保证关键服务的正常运行。

Sentinel 配置说明

以下详细介绍你给出的 Sentinel 资源限流配置示例中各个字段的含义,并进一步展开讲解其他可配置的字段,同时给出不同场景下的配置示例。Sentinel 配置:

[
    {
        "resource": "/user/get",
        "limitApp": "default",
        "grade": 1,
        "count": 10,
        "strategy": 0,
        "controlBehavior": 0,
        "clusterMode": false
    }
]

这个 Sentinel 配置定义了一个流量控制规则,我们可以逐一分析每个字段的含义:

resource

这是资源的名称,代表你要对哪个资源进行限流控制。在代码里,你可以使用 @SentinelResource("yourResourceName") 这样的方式来定义资源。例如,若要对一个名为 getUserInfo 的接口进行限流,那么 resource 就可以设为 "getUserInfo"。

在 Sentinel 中,资源是流量控制、熔断降级等功能的基本单位,通常可以是一个方法名、URL 等。

limitApp

指定受限流规则影响的调用来源。"default" 表示对所有调用来源都生效。你也可以指定具体的应用名称,例如 "app1",这样就只会对来自 app1 的请求进行限流。

在实际应用中,你可以根据需要设置为特定的应用名,以实现更细粒度的流量控制。

注意:在使用 Sentinel 进行资源保护时,调用者可以通过 ContextUtil.enter 方法来设置调用来源。这个方法允许你在代码里明确指定当前调用的来源名称,从而与限流规则中的 limitApp 进行匹配。

grade

用于指定限流阈值的类型,在 Sentinel 中,grade 的取值通常为 0(线程数)或 1(QPS,即每秒查询率)。

  • 0:表示线程数限流,也就是限制同时处理该资源的线程数量。

  • 1:表示 QPS(每秒查询率)限流,即限制每秒通过的请求数量。

count

表示限流的阈值。它的具体含义会根据 grade 的值而有所不同。当 grade 为 1(QPS 限流)时,count 代表每秒允许通过的请求数量;当 grade 为 0(线程数限流)时,count 代表允许同时处理该资源的最大线程数量。

strategy

指定限流策略。Sentinel 支持多种流量控制模式,包括:

  • 0:直接限流,即对当前资源直接进行限流。

  • 1:关联限流,当关联资源的 QPS 超过阈值时,对当前资源进行限流。

  • 2:链路限流,只对指定链路入口的请求进行限流。

controlBehavior

流量控制效果。Sentinel 提供了多种流量控制效果,包括快速失败、Warm Up、排队等待等。取值如下:

  • 0:快速失败,当请求超过阈值时,直接抛出 FlowException 异常。

  • 1:Warm Up(预热),系统初始化时允许通过的请求较少,随着时间推移逐渐增加到阈值。

  • 2:排队等待,请求超过阈值时会进入队列排队等待,直到有可用的配额。

  • 3:Warm Up + 排队等待。

clusterMode

是否开启集群模式,true 表示开启,false 表示关闭。集群模式允许 Sentinel 在多个实例之间进行流量控制规则的共享和协同工作。

不同场景下的配置示例

线程数限流

[
   {
       "resource": "yourResourceName",
       "count": 5,
       "grade": 0,
       "limitApp": "default"
   }
]

此配置表示对 yourResourceName 资源进行线程数限流,最多允许 5 个线程同时处理该资源。

关联限流

[
   {
       "resource": "resourceA",
       "count": 20,
       "grade": 1,
       "limitApp": "default",
       "strategy": 1,
       "refResource": "resourceB"
   }
]

这里当关联资源 resourceB 的 QPS 超过 20 时,会对 resourceA 进行限流。

注意:refResource 用于指定一个关联的资源名称。在不同的限流策略下,它有着不同的意义和用途:

  • 关联限流:当采用关联限流策略时,refResource 所指定的资源的 QPS(每秒查询率)情况会影响当前资源的限流判断。如果关联资源的 QPS 超过了其自身的阈值,那么当前资源就会受到限流控制。

  • 链路限流(虽不直接用 refResource 语义,但有类似关联逻辑):链路限流关注的是请求的调用链路,虽然没有直接依赖 refResource 这个字段来定义,但整体上也是基于资源间的关联关系来进行限流的。

预热限流

[
   {
       "resource": "yourResourceName",
       "count": 100,
       "grade": 1,
       "limitApp": "default",
       "controlBehavior": 1,
       "warmUpPeriodSec": 10
   }
]

该配置表示对 yourResourceName 资源采用预热限流策略,初始阶段允许通过的请求较少,在 10 秒的预热期后逐渐增加到每秒 100 个请求。

注意:warmUpPeriodSec 用于指定这个预热过程的持续时间(单位为秒)。在预热期间,系统允许通过的请求数量会逐渐增加,直到达到预设的限流阈值。这样可以让系统有足够的时间进行资源初始化、缓存预热等操作,从而平稳地过渡到高负载运行状态。

排队等待限流

[
   {
       "resource": "yourResourceName",
       "count": 30,
       "grade": 1,
       "limitApp": "default",
       "controlBehavior": 2,
       "maxQueueingTimeMs": 500
   }
]

此配置下,当请求超过每秒 30 个时,会进入队列排队等待,最长等待时间为 500 毫秒。

当 Sentinel 采用 “排队等待”(controlBehavior 值为 2)这种流控效果时,若请求的数量超过了预设的限流阈值,这些超出的请求不会立即被拒绝(像 “快速失败” 策略那样),而是会被放入一个队列中进行排队等待处理。maxQueueingTimeMs 就是用来指定请求在队列中允许等待的最长时间,单位是毫秒(ms)。

如果一个请求在队列中等待的时间超过了 maxQueueingTimeMs 所设定的值,那么这个请求将会被拒绝,Sentinel 会抛出 FlowException 异常。通过设置 maxQueueingTimeMs,可以避免请求在队列中无限期地等待,防止资源长时间被占用,同时也能在一定程度上保证系统的响应性能。

与肝胆人共事,无字句处读书。——周恩来
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号