当前位置:网站首页>【微服务|Sentinel】热点规则|授权规则|集群流控|机器列表
【微服务|Sentinel】热点规则|授权规则|集群流控|机器列表
2022-06-27 13:44:00 【步尔斯特】
热点规则
热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如:
商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制
用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制
热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。
Sentinel 利用 LRU 策略统计最近最常访问的热点参数,结合令牌桶算法来进行参数级别的流控。

目前 Sentinel 自带的 adapter 仅 Dubbo 方法埋点带了热点参数,其它适配模块(如 Web)默认不支持热点规则,可通过自定义埋点方式指定新的资源名并传入希望的参数。
注意自定义埋点的资源名不要和适配模块生成的资源名重复,否则会导致重复统计。
通过@SentinelResource注解使得热点参数限流生效。

系统规则

系统保护规则是从应用级别的入口流量进行控制,从单台机器的总体 Load、RT、入口 QPS 和线程数四个维度监控应用数据,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。
系统保护规则是应用整体维度的,而不是资源维度的,并且仅对入口流量生效。入口流量指的是进入应用的流量(EntryType.IN),比如 Web 服务或 Dubbo 服务端接收的请求,都属于入口流量。
系统规则支持以下的阈值类型:
- Load(仅对 Linux/Unix-like 机器生效):当系统 load1 超过阈值,且系统当前的并发线程数超过系统容量时才会触发系统保护。系统容量由系统的 maxQps * minRt 计算得出。设定参考值一般是 CPU cores * 2.5。
- CPU usage(1.5.0+ 版本):当系统 CPU 使用率超过阈值即触发系统保护(取值范围 0.0-1.0)。
- RT:当单台机器上所有入口流量的平均 RT 达到阈值即触发系统保护,单位是毫秒。
- 线程数:当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护。
入口 QPS:当单台机器上所有入口流量的 QPS 达到阈值即触发系统保护。
授权规则
黑白名单根据资源的请求来源(origin)限制资源是否通过,若配置白名单则只有请求来源位于白名单内时才可通过;若配置黑名单则请求来源位于黑名单时不通过,其余的请求通过。
调用方信息通过 ContextUtil.enter(resourceName, origin) 方法中的 origin 参数传入。
黑白名单规则(AuthorityRule)非常简单,主要有以下配置项:
- resource:资源名,即限流规则的作用对象
- limitApp:对应的黑名单/白名单,不同 origin 用 , 分隔,如 appA,appB
- strategy:限制模式,AUTHORITY_WHITE 为白名单模式,AUTHORITY_BLACK 为黑名单模式,默认为白名单模式。

origin的传入,可通过重写API接口重写origin的获取方式,请求参数和请求头皆可。
相关代码:
实现类
import com.alibaba.csp.sentinel.adapter.servlet.callback.RequestOriginParser;
import javax.servlet.http.HttpServletRequest;
/** * @author issavior */
public class MyRequestOriginParser implements RequestOriginParser {
@Override
public String parseOrigin(HttpServletRequest httpServletRequest) {
// 请求头的key,根据key值获取value值,此value值会赋予origin,完成流控规则校验
return httpServletRequest.getParameter("service-name");
}
}
配置类
import com.alibaba.csp.sentinel.adapter.servlet.CommonFilter;
import com.alibaba.csp.sentinel.adapter.servlet.callback.WebCallbackManager;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.servlet.Filter;
/** * @author issavior */
@Configuration
public class SentinelConfig {
@Bean
public FilterRegistrationBean<Filter> webCallbackFilter() {
FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>();
bean.setFilter(new CommonFilter());
bean.addUrlPatterns("/*");
bean.addInitParameter(CommonFilter.WEB_CONTEXT_UNIFY, "false");
bean.setName("sentinelFilter");
bean.setOrder(1);
WebCallbackManager.setRequestOriginParser(new MyRequestOriginParser());
return bean;
}
}
最后在每次发送请求的时候,在请求参数或者请求头上带上对应key和对应value就可以了~
边栏推荐
- How to set postman to Chinese? (Chinese)
- Quickly set up a website to visit foreign countries, set up SS and start BBR to quickly surf the Internet
- How to split microservices
- How to use 200 lines of code to implement Scala's Object Converter
- 每日3题(1):找到最近的有相同 X 或 Y 坐标的点
- [WUSTCTF2020]girlfriend
- POSIX AIO -- Introduction to glibc version asynchronous IO
- Awk concise tutorial
- 高德地图IP定位2.0备份
- 为什么 Oracle 云客户必须在Oracle Cloud 季度更新发布后自行测试?
猜你喜欢

【业务安全-02】业务数据安全测试及商品订购数量篡改实例

How to solve the problem of missing language bar in win10 system

Pytoch learning 2 (CNN)

IJCAI 2022 | greatly improve the effect of zero sample learning method with one line of code. Nanjing Institute of Technology & Oxford proposed the plug and play classifier module

buuctf misc 百里挑一

芯片供给过剩之际,进口最多的中国继续减少进口,美国芯片慌了

【PHP代码注入】PHP语言常见可注入函数以及PHP代码注入漏洞的利用实例

基于 xml 配置文件的入门级 SSM 框架整合

Crane: a new way of dealing with dictionary items and associated data

Axi bus
随机推荐
快速搭建一个自己的访问国外网站,搭建ss并开启bbr快速上网
[acwing] explanation of the 57th weekly competition
Axi bus
如何使用200行代码实现Scala的对象转换器
一道shell脚本的统计题
How to solve the problem of missing language bar in win10 system
How to set the compatibility mode of 360 speed browser
awk 简明教程
[a complete human-computer interface program framework]
【PHP代码注入】PHP语言常见可注入函数以及PHP代码注入漏洞的利用实例
Kyndryl与Oracle和Veritas达成合作
Daily question brushing record (6)
Number of printouts (solved by recursive method)
Summary of redis master-slave replication principle
命令行编辑器 sed 基础用法总结
[business security-02] business data security test and example of commodity order quantity tampering
Type 'image' is not a subtype of type 'imageprovider < object > solution
对半查找(折半查找)
IJCAI 2022 | 用一行代码大幅提升零样本学习方法效果,南京理工&牛津提出即插即用分类器模块
What else can PLM do?