Spring Cloud Alibaba - Sentinel入门案例(五)(授权规则 / 系统规则 )
回溯
什么是Sentinel?
Sentinel (分布式系统的流量防卫兵) 是阿里开源的一套用于服务容错的综合性解决方案。它以流量
为切入点, 从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。
本文主要讲解 Sentinel 容错功能之一 授权规则 ,以及简单说明 系统规则。
正文
授权规则
简单描述
很多时候,我们需要根据调用来源来判断该次请求是否允许放行,这时候可以使用 Sentinel 的来源访问控制(黑白名单控制)的功能。来源访问控制根据资源的请求来源(origin)限制资源是否通过,若配置白名单则只有请求来源位于白名单内时才可通过;若配置黑名单则请求来源位于黑名单时不通过,其余的请求通过。
开始测试
编辑一个资源名为 Origin 的资源,我们想让他流控应用为暗影岛的降级。
流控应用 这个位置要填写的是来源标识,Sentinel提供了 RequestOriginParser 接口来处理来源。
只要Sentinel保护的接口资源被访问,Sentinel就会调用 RequestOriginParser 的实现类去解析访问来源。
我们新增一个类交给容器管理。
@Component
public class RequestOriginParserDefinition implements RequestOriginParser {
@Override
public String parseOrigin(HttpServletRequest httpServletRequest) {
// 当前 流控应用 放在了请求参数里面,可以放到的地方有很多,比如 参数/请求头/session/等等
return httpServletRequest.getParameter("sourceName");
}
}
编写请求方法。
@RequestMapping("/testMessageFunctionOrigin")
@SentinelResource("/Origin")
public String testMessageFunctionOrigin(String sourceName) {
return sourceName;
}
当请求参数为艾欧尼亚的时候都可以正常访问。
当请求参数为暗影岛的时候触发降级。
ps: 当前 流控应用 放在了请求参数里面,可以放到的地方有很多,比如 参数/请求头/session/等等,这里不要和热点规则弄混了。
系统规则(简单描述)
系统保护规则是从应用级别的入口流量进行控制,从单台机器的总体 Load、RT、入口 QPS 、CPU使用率 和 线程数 五个维度监控应用数据,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。系统保护规则是应用整体维度的,而不是资源维度的,并且仅对入口流量 (进入应用的流量) 生效。
- Load(仅对 Linux/Unix-like 机器生效):当系统 load1 超过阈值,且系统当前的并发线程数超过系统容量时才会触发系统保护。系统容量由系统的 maxQps * minRt 计算得出。设定参考值一般是 CPU cores * 2.5。
- RT:当单台机器上所有入口流量的平均 RT 达到阈值即触发系统保护,单位是毫秒。
- 线程数:当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护。
- 入口 QPS:当单台机器上所有入口流量的 QPS 达到阈值即触发系统保护。
- CPU使用率:当单台机器上所有入口流量的 CPU使用率达到阈值即触发系统保护。
ps(为啥只是简单讲一下,因为!这个通常是运维的活,如果公司是小公司,你已经全栈了,后端前端数据库都干,可是连运维的活也干,那你就要多点心思了!)