首页 > 其他分享 >SpringCloud学习Day4

SpringCloud学习Day4

时间:2024-06-23 20:30:03浏览次数:26  
标签:SpringCloud Day4 alibaba 学习 Sentinel 限流 demo sentinel com

熔断与限流:Sentinel

1.概念

Sentinel是面向分布式、多语言异构化服务架构的流量治理组件

2.基本使用

1.在应用中导入相关jar包,即在pom.xml添加以下依赖

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-core</artifactId>
    <version>1.8.6</version>
</dependency>

2.定义资源:需要控制流量的代码用 Sentinel API SphU.entry() 和 entry.exit() 包围起来即可

public static void main(String[] args) {
    initFlowRules();
    while (true) {
        Entry entry = null;
        try {
	    entry = SphU.entry("HelloWorld");
            /*您的业务逻辑 - 开始*/
            System.out.println("hello world");
            /*您的业务逻辑 - 结束*/
	} catch (BlockException e1) {
            /*流控逻辑处理 - 开始*/
	    System.out.println("block!");
            /*流控逻辑处理 - 结束*/
	} finally {
	   if (entry != null) {
	       entry.exit();
	   }
	}
    }
}

3.定义规则:通过规则来指定允许该资源通过的请求次数,例如下面的代码定义了资源 HelloWorld 每秒最多只能通过 20 个请求

private static void initFlowRules(){
    List<FlowRule> rules = new ArrayList<>();
    FlowRule rule = new FlowRule();
    rule.setResource("HelloWorld");
    rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
    // Set limit QPS to 20.
    rule.setCount(20);
    rules.add(rule);
    FlowRuleManager.loadRules(rules);
}

4.启动Sentinel控制台:实时监控各个资源的运行情况,并且可以实时地修改限流规则

3.流量控制

流量控制:其原理是监控应用流量的 QPS并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。

1.基于并发数的流量控制

https://github.com/alibaba/Sentinel/blob/master/sentinel-demo/sentinel-demo-basic/src/main/java/com/alibaba/csp/sentinel/demo/flow/FlowThreadDemo.java

2.基于QPS流量控制

当 QPS 超过某个阈值的时候,则采取措施进行流量控制,效果包括以下几种:直接拒绝Warm Up匀速排队

2.1 直接拒绝方式是默认的流量控制方式,当QPS超过任意规则的阈值后,新的请求就会被立即拒绝
https://github.com/alibaba/Sentinel/blob/master/sentinel-demo/sentinel-demo-basic/src/main/java/com/alibaba/csp/sentinel/demo/flow/FlowQpsDemo.java
2.2 Warm Up方式,即预热/冷启动方式,让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮。
https://github.com/alibaba/Sentinel/blob/master/sentinel-demo/sentinel-demo-basic/src/main/java/com/alibaba/csp/sentinel/demo/flow/WarmUpFlowDemo.java
2.3匀速排队方式会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法
https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6-%E5%8C%80%E9%80%9F%E6%8E%92%E9%98%9F%E6%A8%A1%E5%BC%8F

4.集群流控

1.FlowRule 添加了两个字段用于集群限流相关配置:

private boolean clusterMode; // 标识是否为集群限流配置
private ClusterFlowConfig clusterConfig; // 集群限流相关配置项

2.要想使用集群限流功能,必须引入集群限流 client 相关依赖:

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-cluster-client-default</artifactId>
    <version>1.8.5</version>
</dependency>

3.要想使用集群限流服务端,必须引入集群限流 server 相关依赖:

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-cluster-server-default</artifactId>
    <version>1.8.5</version>
</dependency>

4.嵌入模式和独立模式
独立模式:https://github.com/alibaba/Sentinel/blob/master/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/src/main/java/com/alibaba/csp/sentinel/demo/cluster/ClusterServerDemo.java
嵌入模式:https://github.com/alibaba/Sentinel/tree/master/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-embedded

5.熔断降级

对不稳定的弱依赖服务调用进行熔断降级,暂时切断不稳定调用,避免局部不稳定因素导致整体的雪崩

5.1熔断策略

1.慢调用比例:选择以慢调用比例作为阈值,需要设置允许的慢调用 RT(即最大的响应时间),请求的响应时间大于该值则统计为慢调用。当单位统计时长内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断
2.异常比例:当单位统计时长内请求数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。
3.异常数 :当单位统计时长内的异常数目超过阈值之后会自动进行熔断。

5.2熔断降级规则说明

在这里插入图片描述

5.3熔断器事件监听

Sentinel 支持注册自定义的事件监听器监听熔断器状态变换事件

EventObserverRegistry.getInstance().addStateChangeObserver("logging",
    (prevState, newState, rule, snapshotValue) -> {
        if (newState == State.OPEN) {
            // 变换至 OPEN state 时会携带触发时的值
            System.err.println(String.format("%s -> OPEN at %d, snapshotValue=%.2f", prevState.name(),
                TimeUtil.currentTimeMillis(), snapshotValue));
        } else {
            System.err.println(String.format("%s -> %s at %d", prevState.name(), newState.name(),
                TimeUtil.currentTimeMillis()));
        }
    });

标签:SpringCloud,Day4,alibaba,学习,Sentinel,限流,demo,sentinel,com
From: https://blog.csdn.net/weixin_52108189/article/details/139904386

相关文章

  • 【机器学习】机器学习赋能交通出行:智能化实践与创新应用探索
    ......
  • 快速学习SAP开发资料,SAP视频快速学习资料,ABAP零基础快速学习 为何选择学习SAP ABAP?选
    在瞬息万变的数字时代,想要在IT行业脱颖而出,掌握一项有优势技术是通往高薪的关键。SAP,作为全球企业管理和解决方案的领导者,其核心编程语言ABAP正引领着企业信息化的最前沿。现在,我们为你呈上一套精心策划的SAPABAP二次开发资料视频——你的收入改善与职业飞跃的加速器!一、为何选......
  • 基于深度学习的蔬果识别
    采用ResNet50与ResNet152深度学习模型作为基础架构,通过层叠多个卷积层、池化层和全连接层来实现特征提取和分类任务。并利用蔬果图像数据集进行模型训练,并采用数据增强技术来扩充训练数据并减少过拟合问题。再通过VGG19模型处理结果作为参考。经过实验证明,所提出的基......
  • 学习angr记录--12~14
    12.veritesting功能默认就是开启的。。。13.添加angr准备好的simProcedures以避免路径爆炸importangrimportsysdefmain(argv):path_to_binary="E:\\A_reverse\\angr_ctf-master\\dist\\13_angr_static_binary"project=angr.Project(path_to_binary,load_opti......
  • 如何学习C语言
    学习三阶段:初识——>初阶——>进阶注:蓝色字体皆可跳转一阶:初识1.基本了解C语言的基础知识,对C语言有一个大概的认识2.简单认识每个知识点,后期在初阶和进阶进行详细描述学习内容1.什么是C语言2.第一个C语言程序3.数据类型4.变量、常量5.字符串、转义字符、注释......
  • Kimichat使用案例025:用于学习教育场景的7种高级方法
    文章目录一、AI作为导师二、AI作为教练三、AI作为指导员四、AI作为团队成员五、AI作为模拟器六、AI作为学生七、AI作为工具一、AI作为导师你是一个乐观、鼓励学生的导师,通过解释观点和问学生问题来帮助学生理解概念。下面每一步只一步步的执行,不要全部执行。......
  • 【MindSpore学习打卡】初学教程-06网络构建-使用MindSpore构建神经网络模型
    在深度学习的世界中,构建和训练神经网络模型是核心任务之一。MindSpore作为一款开源的深度学习框架,提供了丰富的API和工具,使得构建神经网络模型变得更加简洁和高效。在这篇博客中,我们将以Mnist数据集分类为例,逐步讲解如何使用MindSpore定义模型、构建网络层并进行预测。通过......
  • 吴恩达机器学习 第三课 week2 推荐算法(上)
    目录01学习目标02推荐算法2.1定义    2.2应用2.3算法03 协同过滤推荐算法04电影推荐系统4.1问题描述4.2算法实现05总结01学习目标   (1)了解推荐算法   (2)掌握协同过滤推荐算法(CollaborativeFilteringRecommenderAlgorithm)原理  ......
  • 目标检测0:layman学习Faster-RCNN算法(基于VOC数据进行训练)
    分享:Bubbliiiing的学习小课堂博主的专栏《睿智的目标检测》中对Faster-RCNN有较为详细的描述。CSDN 链接:睿智的目标检测27——Pytorch搭建FasterR-CNN目标检测平台源代码下载  :https://github.com/bubbliiiing/faster-rcnn-pytorchB站讲解链接:配置Tensorflow+Keras......
  • Linux的学习与使用(进程管理)
    命令学习(一)ps命令1.ps显示当前终端会话的进程。2.psaux显示系统上所有进程的详细信息。NameDescriptionExample(图中第一行)USER进程的所有者rootPID进程ID1%CPU进程占用的CPU百分比0.2%MEM进程占用的内存百分比0.2VSZ进程使用的虚拟内存量......