Spring Cloud中的Sentinel框架是一个轻量级的流量控制框架,它提供了两种主要的限流模式:流量控制和熔断降级。以下是对这两种模式的详细介绍:
流量控制
直接限流模式
Sentinel中的直接限流模式是一种比较简单的限流模式,在该模式下,Sentinel会限制每个资源对应的请求流量不得超过预定的阈值,一旦超过这个阈值,Sentinel就会拒绝请求并返回带有错误码和错误信息的消息。
在这里,我们假设要对一个名叫/api/doSomething
的RESTful API进行流量控制。我们可以通过在application.yml
中配置以下参数来完成直接限流:
spring.cloud.sentinel.datasource.ds.nacos.server-addr=${nacos.server-addr}
spring.cloud.sentinel.datasource.ds.nacos.data-id=${nacos.data-id}
spring.cloud.sentinel.datasource.ds.nacos.group-id=${nacos.group-id}
spring.cloud.sentinel.filter.order=2147483647
spring.cloud.sentinel.filter.url-patterns=/*
spring.cloud.sentinel.filter.enabled=true
spring.cloud.sentinel.filter.block-page-url=/
spring.cloud.sentinel.flow.rule-type=1
spring.cloud.sentinel.flow.nacos.namespace=${spring.cloud.nacos.config.namespace}
spring.cloud.sentinel.flow.nacos.groupId=${nacos.group-id}
spring.cloud.sentinel.flow.nacos.dataId=sentinel-flow
spring.cloud.sentinel.flow.nacos.server-addr=${nacos.server-addr}
spring.cloud.sentinel.flow.nacos.rule-type=1
spring.cloud.sentinel.flow.nacos.data-type=json
spring.cloud.sentinel.flow.nacos.auto-refresh=true
# 配置限流规则
spring.cloud.sentinel.flow.nacos.rule-value=[\n {\n \"resource\": \"/api/doSomething\",\n \"grade\": 1,\n \"count\": 10.0,\n \"strategy\": 0,\n \"controlBehavior\": 0,\n \"clusterMode\": false\n }\n]
上述配置通过spring.cloud.sentinel.flow.nacos.rule-value
指定了一个JSON格式的限流规则。该规则指定了对/api/doSomething
资源的最大流量为10个/秒。这意味着在任意1秒内,该API的请求次数不得超过10次。如果超过这个次数,Sentinel将进入阻止模式并拒绝请求。
关联限流模式
在Sentinel的关联限流模式中,我们可以将多个资源关联在一起进行限流控制。例如,我们可以将/api/doSomething
和/api/doOtherThing
这两个API资源视为相关资源,并进行限流控制。如果这两个API的请求次数总和超过规定阈值,Sentinel将进入阻止模式。
我们可以使用如下配置来实现关联限流模式:
# 配置限流规则
spring.cloud.sentinel.flow.nacos.rule-value=[\n {\n \"resource\": \"/api/doSomething\",\n \"grade\": 1,\n \"count\": 5.0,\n \"strategy\": 0,\n \"controlBehavior\": 0,\n \"clusterMode\": false,\n \"refResource\": [\"/api/doOtherThing\"]\n },\n {\n \"resource\": \"/api/doOtherThing\",\n \"grade\": 1,\n \"count\": 3.0,\n \"strategy\": 0,\n \"controlBehavior\": 0,\n \"clusterMode\": false\n }\n]
在上述配置中,我们使用refResource
参数将/api/doSomething
和/api/doOtherThing
进行关联。这两个API的最大请求数分别为5和3个/秒。
熔断降级
Sentinel的熔断降级模式一般用于当某个资源出现异常时,通过降低访问频率来避免系统崩溃。
慢调用比例模式
慢调用比例模式主要是用于避免因超时请求而导致的系统瘫痪情况。如果某个资源的请求超时次数超过配置的比例阈值,Sentinel将会进入熔断模式并返回错误信息。
以下是实现慢调用比例模式的部分配置:
# 配置熔断规则
spring.cloud.sentinel.degrade.rule-value=[\n {\n \"resource\": \"/api/doSomething\",\n \"grade\": 1,\n \"count\": 10.0,\n \"timeWindow\": 10,\n \"minRequestAmount\": 10,\n \"slowRatioThreshold\": 0.5,\n \"statIntervalMs\": 10000\n }\n]
在上述配置中,我们通过slowRatioThreshold
参数指定了慢调用的比率阈值为50%。这意味着如果超过一半的请求是慢调用,Sentinel将会进入熔断模式并返回错误信息。
错误比例模式
错误比例模式用于避免因资源异常而导致系统崩溃情况。如果某个资源在一段时间内的异常比例超过配置的阈值,Sentinel将会进入熔断模式并返回错误信息。
以下是实现错误比例模式的配置:
# 配置熔断规则
spring.cloud.sentinel.degrade.rule-value=[\n {\n \"resource\": \"/api/doSomething\",\n \"grade\": 1,\n \"count\": 10.0,\n \"timeWindow\": 10,\n \"minRequestAmount\": 10,\n \"errorRatioThreshold\": 0.5,\n \"statIntervalMs\": 10000\n }\n]
在上述配置中,我们通过errorRatioThreshold
参数指定了错误比率阈值为50%。这意味着如果超过一半的请求出现异常,Sentinel将会进入熔断模式并返回错误信息。
注意:以上的示例仅作为参考,实际的参数配置根据自己的情况进行调整。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Cloud中Sentinel的两种限流模式介绍 - Python技术站