当前位置:网站首页>【微服务|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就可以了~
边栏推荐
- [dynamic programming] - Knapsack Problem
- 命令行编辑器 sed 基础用法总结
- 基于 xml 配置文件的入门级 SSM 框架整合
- 【每日3题(3)】盒子中小球的最大数量
- Summary of redis master-slave replication principle
- Infiltration learning diary day20
- After the deployment is created, the pod problem handling cannot be created
- Using FRP tool to realize intranet penetration
- POSIX AIO -- glibc 版本异步 IO 简介
- Crane: a new way of dealing with dictionary items and associated data
猜你喜欢

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

Journal quotidien des questions (6)

《预训练周刊》第51期:重构预训练、零样本自动微调、一键调用OPT

国产数据库乱象

Number of printouts (solved by recursive method)

Using FRP tool to realize intranet penetration

Quick news: Huawei launched the Hongmeng developer competition; Tencent conference released the "Wanshi Ruyi" plan

赛迪顾问发布《“十四五” 关键应用领域之数据库市场研究报告》(附下载)

重读经典:《The Craft of Research(1)》

OpenHGNN发布0.3版本
随机推荐
MySQL locking mechanism and four isolation levels
ensp云朵配置
现在开户有优惠吗?网上开户是否安全么?
my.ini文件配置
OpenHGNN发布0.3版本
enable_ if
How to split microservices
快速搭建一个自己的访问国外网站,搭建ss并开启bbr快速上网
AGCO AI frontier promotion (6.27)
万物互联时代到来,锐捷发布场景化无线零漫游方案
美国芯片再遭重击,继Intel后又一家芯片企业将被中国芯片超越
[problem solving] which nodes are run in tensorflow?
#yyds干货盘点# 解决剑指offer:剪绳子(进阶版)
同花顺能开户炒股吗?安全吗?
新华三的千亿企业梦,还得靠吃ICT老本来实现?
Kotlin函数使用示例教程
【mysql进阶】MTS主从同步原理及实操指南(七)
Why must Oracle cloud customers self test after the release of Oracle cloud quarterly update?
【OS命令注入】常见OS命令执行函数以及OS命令注入利用实例以及靶场实验—基于DVWA靶场
Realization of hospital medical record management system based on JSP