微服务守护神-Sentinel-热点-授权-系统规则

引言

书接上篇 微服务守护神-Sentinel-降级规则 ,上面介绍了Sentinel降级规则,本篇继续来Sentinel的热点、授权、系统规则。

热点规则

何为热点?热点即经常访问的数据。很多时候我们希望统计某些热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如:

  • 商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制

  • 用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制

热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种更细粒度的流量控制,细化到参数的控制。

需求:设置热点参数限制,当product=1进行流控,当product != 1 不处理

步骤1:在shop-order-server项目中新增HotSpotController.java

package cn.wolfcode.controller;
@RestController
@Slf4j
public class HotSpotController {
    @RequestMapping("/hotSpot1")
    @SentinelResource(value = "hotSpot1")
    public String hotSpot1(Long productId){
        log.info("访问编号为:{}的商品",productId);
        return "hotSpot1";
    }
}

注意:一定需要在请求方法上贴@SentinelResource直接,否则热点规则无效

步骤2:新增热点规则

微服务守护神-Sentinel-热点-授权-系统规则_第1张图片

步骤3:在热点规则中编辑规则,在编辑之前一定要先访问一下/hotSpot1,不然参数规则无法新增.  

步骤4:新增参数规则

微服务守护神-Sentinel-热点-授权-系统规则_第2张图片

 步骤5:点击保存,可以看到已经新增了参数规则.

步骤6:访问测试

访问http://localhost:8091/hotSpot?productId=1 访问会降级

访问http://localhost:8091/hotSpot?productId=2 访问不会降级

微服务守护神-Sentinel-热点-授权-系统规则_第3张图片

授权规则

 很多时候,我们需要根据客户端来源来判断当前请求是否允许放行,比如:项目有app,有pc,有小程序多需要往后端发起请求,为了防止一些非法请求进入,做了参数约定,带上来源标记。

 Sentinel 就有来源访问控制(黑白名单控制)的功能。来源访问控制根据资源的请求来源(origin)限制资源是否通过,若配置白名单则只有请求来源位于白名单内时才可通过;若配置黑名单则请求来源位于黑名单时不通过,其余的请求通过。

需求:约定来源标记:serviceName=pc 拦截,!= pc放行

步骤1:在shop-order-server中新建RequestOriginParser接口实现类
 

@Component
public class RequestOriginParserDefinition implements RequestOriginParser {
    @Override
    public String parseOrigin(HttpServletRequest request) {
        /**
         *  定义从请求的什么地方获取来源信息
         *  比如我们可以要求所有的客户端需要在请求头中携带来源信息
         */
        String serviceName = request.getParameter("serviceName");
        return serviceName;
    }
}

这个实现类目的用于解析请求来源中带有参数

步骤2:在shop-order-server中新建AuthController.java

@RestController
@Slf4j
public class AuthController {
    @RequestMapping("/auth1")
    public String auth1(String serviceName){
        log.info("应用:{},访问接口",serviceName);
        return "auth1";
    }
}

 步骤3:新增授权规则

微服务守护神-Sentinel-热点-授权-系统规则_第4张图片

 这里配置来源携带触发参数值:pc, 使用的黑名单,用于拦截。

步骤4:访问测试

访问http://localhost:8091/auth1?serviceName=pc 不能访问

访问http://localhost:8091/auth1?serviceName=app 可以访问

系统规则

系统保护规则是从应用级别的入口流量进行控制,从单台机器的 load、CPU 使用率、平均 RT、入口 QPS 和并发线程数等几个维度监控应用指标,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。

系统保护规则是应用整体维度的,而不是资源维度的,并且仅对入口流量生效。入口流量指的是进入应用的流量(EntryType.IN),比如 Web 服务或 Dubbo 服务端接收的请求,都属于入口流量。

系统规则支持以下的模式:

  • Load 自适应(仅对 Linux/Unix-like 机器生效):系统的 load1 作为启发指标,进行自适应系统保护。当系统 load1 超过设定的启发值,且系统当前的并发线程数超过估算的系统容量时才会触发系统保护(BBR 阶段)。系统容量由系统的 maxQps * minRt 估算得出。设定参考值一般是 CPU cores * 2.5

  • CPU usage(1.5.0+ 版本):当系统 CPU 使用率超过阈值即触发系统保护(取值范围 0.0-1.0),比较灵敏。

  • 平均 RT:当单台机器上所有入口流量的平均 RT 达到阈值即触发系统保护,单位是毫秒。

  • 并发线程数:当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护。

  • 入口 QPS:当单台机器上所有入口流量的 QPS 达到阈值即触发系统保护。

微服务守护神-Sentinel-热点-授权-系统规则_第5张图片

 注意:系统规则,针对的是整个项目控制规则,配置时一定要慎重。真实开发配置前必须需要严格、专业的压测,保证系统最适合。

到这,sentinel的所有配置规则就讲完了,下一节就是其他相关逻辑了,欲知后事如何,请听下回分解。

 看文字不过瘾可以切换视频版:SpringCloud Alibaba 极简入门

你可能感兴趣的:(SpringCloud,Alibaba极简入门,微服务,sentinel,java,热点,授权)