springcloud第4季 springcloud-alibaba之sentinel(热点参数限流,黑白名单,配置持久化)

本文通过实例介绍Sentinel在分布式服务中的应用,阐述其在流量路由、控制、熔断降级等方面的功效,旨在提升服务的稳定性和应对复杂架构挑战。
摘要由CSDN通过智能技术生成

一 sentinel实操实例

1.1 sentinel作用

sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障服务的稳定性。

1.2 blockhandler与fallback的区别

1.fallback:对jvm抛出的业务异常进行处理

2.blockhandler:对在sentinel管控端配置的服务流量策略(是否违规)起作用。

1.3 热点的定义

热点即经常访问的数据,很多时候我们希望统计某个热点数据中访问频次最高的top k 数据,并对其访问进行限制,比如:用户id为参数,针对一段时间内参数频繁访问的用户id进行限制。

热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。

二  热点资源限流案例

2.1  案例1:是否含有某参数

1.业务代码

2.配置规则

@SentinelResource 的value对应配置页面的 【资源名称】

页面中索引序号,对应着请求参数的索引

表达意思: 对第一个请求参数,滑动窗口内【1s内请求阈值超过2个】则触发热点限流规则,触发blockhandler处理

3.验证

a)含有第一个参数,不停刷新,则触发限流熔断异常

b)不含有第一个参数,不停刷新,则不会触发限流熔断异常,一直正常访问

2.2 案例2: 参数等于某个值进行额外限流

1.业务代码配置

2.sentinel配置

表达含义是,针对请求中的第一个参数的值不是5时,在滑动窗口【1秒内超过阈值2】触发热点限流,如果参数值是5,为参数例外项,滑动窗口【1秒内超过阈值20】才触发热限流。

3.验证

a)第一个参数不为666

b) 第一个参数为666.手工请求演示不出效果,暂时都是正常访问,实际1秒请求超过阈值20,则触发热点限流。

三  sentinel配置进行持久化

3.1 pom依赖添加

        <!--SpringCloud ailibaba sentinel-datasource-nacos -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>

3.2 nacos进行配置 

 

配置案例

[{
"resource":"/testA",
"limitApp":"default",
"grade":1,
"count":2,
"strategy":0,
"controlBehavior":0,
"clusterMode":false
}]

3.nacos配置,设置namespace,dataid,groupid,见图

3.3 配置文件的配置

按照nacos定义的namespace,dataid,groupid进行配置

3.4 验证

1.进行访问:http://localhost:8888/testA

进行多次访问后,显示限流提示:

2.关闭sentinel,nacos后,再次访问,还是如此,说明持久化成功!

3.重启电脑,再次启动相应服务,查看sentinel,规则还在,如图:

四  sentinel进行黑白名单配置

4.1 黑白名单配置

4.1.1.创建handler

1.创建hanlder

@Component
public class MyRequestOriginParser implements RequestOriginParser
{
    @Override
    public String parseOrigin(HttpServletRequest request)
    {
        return request.getParameter("serverName");
    }
}

4.1.2.controller

package com.jurf.ms.alibaba.sentinel.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @auther zzyy
 * @create 2024-01-04 10:40
 */
@RestController
@Slf4j
public class EmpowerController //Empower授权规则,用来处理请求的来源
{
    @GetMapping(value = "/empower")
    public String requestSentinel4()
    {
        log.info("测试Sentinel授权规则empower");
        return "Sentinel授权规则";
    }
}

4.1.3 启动服务

1.nacos: startup.cmd -m  standalone

2.sentinel

4.1.4 验证服务

配置黑白名单

 

2.进行访问

http://localhost:8888/empower?serverName=eee

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值