【七】SpringCloud Alibaba之整合Sentinel(实现流量控制2)

简介: 【七】SpringCloud Alibaba之整合Sentinel(实现流量控制2)

一、阀值类型

1、QPS:

上一章已经测试了QPS,每秒允许请求次数。

2、并发线程数:

是处理该资源请求的并发线程数量。

由于测试代码后端的逻辑太简单就一句,所有执行时间消耗特别快,为了测试效果需要增加每秒请求次数,设置为1000,使用Jmeter测试工具(上章节有讲到),如下:

结果:

请求通过了326次,拒绝了674次。

二·、流控模式

1、快速失败

可以说是不做额外处理,请求达到单机阀值时,直接抛出异常。

2、Warm Up

warm 预热,指的是前几面需要预热几秒,在预热时间内,默认阀值是3,预热时间后才会执行你设置的阀值,比如如下:

单机阀值设置为10,预热时长是3,表示,前3秒,只允许每秒3次请求通过,3秒之后则允许每秒10次请求通过,结果如下:

为了实现效果,我设置为一秒执行15个请求,一直循环执行

又结果可以看出,前面32,33,34秒都是4次左右/秒通过请求,然后稳定于10次左右/秒通过请求。实现了预热的效果。

3、排队等待

设置超时时间,指定阀值,若每秒内的请求数量达到阀值,则超出阀值得请求进入等待队列,等待前面指定阀值得请求执行完,若等待队列内的请求在超时时间之后仍然没有被消费掉则直接从队列内消失。测试如下:

如此设置,若QPS阀值为10,若是直接失败处理的话,会导致5个请求直接返回异常,若使用排队等待的话,只要超时时间不超过指定时间就不会进行失败处理,如下:

15条请求全部被处理了,超时处理的4条在45秒时也进行了处理,而不是在44秒是拒绝了4条。

 

 

三、流控效果

1、直接

当达到设置的流控条件时就直接进行流控处理。

2、关联

当关联的资源达到流控条件时就对当前资源进行流控处理。

为了方便测试,新增一个test2接口进行资源关联,如下:

sentinel如下设置:

在test2设置流控规则,若对test1接口的请求达到阀值10,则让对test2接口的请求快速失败。

相比前面,这次在jmeter的计划工程里新增一个调用test2接口的http请求任务。

发起测试,每秒15次请求。

由结果可以看到,的确test1正常通过了15次的请求,而test2拒绝了5次,大概就是在12秒时test1已经通过了14次,超过了设置的阀值了,所以test2就直接拒绝了之后的请求,13秒test2又通过了一次应该是存在误差,也测试了上万条的请求时,的确test2之后不会再通过请求,全部会拒绝。

3、链路

表示,只有通过某某接口访问某某资源时,才会触发流控效果,例如将程序中X方法定义成sentinel的资源,而A、B两个接口都调用了X方法,则可以通过设置链路的方法只针对某一个接口进行对该资源的流控,此处需要使用sentinel的注解SentinelResource来定义sentinel可以识别的资源。

为了方便测试该方式,新增一个类,如下:

加上component注解,交由spring管理,加上sentinelresource注解,让sentinel可以认识该资源,并给他取一个名字,修改controller,调用该资源,如下:

在sentinel给资源ceshi666设置流控规则,如下:

意味着若通过test1接口访问的ceshi666资源若每秒请求次数超过阀值10就会快速失败,为了测试结果,还是同时请求test1和test2接口进行比较,如下:

深坑:当然:只这样还不行,版本坑又来了,高版本的sentinel依赖不能直接使用这个东西,还需要修改一个配置,如下:

前面我给自己埋了一个坑,现在补上,sentinel的依赖引错了,现在改正,改正之后如下:

注意!注意!注意!一定要是2.1.1版本,不然又要错。

还要再引入一个新的依赖:

缺一不可,整了很久。

最后再新增一个配置类,不然还是用不起!!!

重启服务,重新配置资源ceshi666的流控规则,现在开始测试:

结果如下:

test1请求的ceshi666被拒绝了4次,test2请求的ceshi666全部通过,存在误差,但是起码效果出来了。再进行转换,流控规则入口设置为test2,如下:

结果:

test2接口调用的ceshi666被拒绝了3次,控流成功。

下一章将学习熔断处理。

目录
相关文章
|
3月前
|
SpringCloudAlibaba API 开发者
新版-SpringCloud+SpringCloud Alibaba
新版-SpringCloud+SpringCloud Alibaba
|
4月前
|
Java UED Sentinel
微服务守护神:Spring Cloud Sentinel,让你的系统在流量洪峰中稳如磐石!
【8月更文挑战第29天】Spring Cloud Sentinel结合了阿里巴巴Sentinel的流控、降级、熔断和热点规则等特性,为微服务架构下的应用提供了一套完整的流量控制解决方案。它能够有效应对突发流量,保护服务稳定性,避免雪崩效应,确保系统在高并发下健康运行。通过简单的配置和注解即可实现高效流量控制,适用于高并发场景、依赖服务不稳定及资源保护等多种情况,显著提升系统健壮性和用户体验。
87 1
|
4月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
定时任务在企业应用中至关重要,常用于异步数据处理、自动化运维等场景。在单体应用中,利用Java的`java.util.Timer`或Spring的`@Scheduled`即可轻松实现。然而,进入微服务架构后,任务可能因多节点并发执行而重复。Spring Cloud Alibaba为此发布了Scheduling模块,提供轻量级、高可用的分布式定时任务解决方案,支持防重复执行、分片运行等功能,并可通过`spring-cloud-starter-alibaba-schedulerx`快速集成。用户可选择基于阿里云SchedulerX托管服务或采用本地开源方案(如ShedLock)
131 1
|
2月前
|
JSON SpringCloudAlibaba Java
Springcloud Alibaba + jdk17+nacos 项目实践
本文基于 `Springcloud Alibaba + JDK17 + Nacos2.x` 介绍了一个微服务项目的搭建过程,包括项目依赖、配置文件、开发实践中的新特性(如文本块、NPE增强、模式匹配)以及常见的问题和解决方案。通过本文,读者可以了解如何高效地搭建和开发微服务项目,并解决一些常见的开发难题。项目代码已上传至 Gitee,欢迎交流学习。
149 1
Springcloud Alibaba + jdk17+nacos 项目实践
|
2月前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
3月前
|
人工智能 前端开发 Java
Spring Cloud Alibaba AI,阿里AI这不得玩一下
🏀闪亮主角: 大家好,我是JavaDog程序狗。今天分享Spring Cloud Alibaba AI,基于Spring AI并提供阿里云通义大模型的Java AI应用。本狗用SpringBoot+uniapp+uview2对接Spring Cloud Alibaba AI,带你打造聊天小AI。 📘故事背景: 🎁获取源码: 关注公众号“JavaDog程序狗”,发送“alibaba-ai”即可获取源码。 🎯主要目标:
103 0
|
4月前
|
人工智能 前端开发 Java
【实操】Spring Cloud Alibaba AI,阿里AI这不得玩一下(含前后端源码)
本文介绍了如何使用 **Spring Cloud Alibaba AI** 构建基于 Spring Boot 和 uni-app 的聊天机器人应用。主要内容包括:Spring Cloud Alibaba AI 的概念与功能,使用前的准备工作(如 JDK 17+、Spring Boot 3.0+ 及通义 API-KEY),详细实操步骤(涵盖前后端开发工具、组件选择、功能分析及关键代码示例)。最终展示了如何成功实现具备基本聊天功能的 AI 应用,帮助读者快速搭建智能聊天系统并探索更多高级功能。
1423 2
【实操】Spring Cloud Alibaba AI,阿里AI这不得玩一下(含前后端源码)
|
4月前
|
Dubbo Java 调度
揭秘!Spring Cloud Alibaba的超级力量——如何轻松驾驭分布式定时任务调度?
【8月更文挑战第20天】在现代微服务架构中,Spring Cloud Alibaba通过集成分布式定时任务调度功能解决了一致性和可靠性挑战。它利用TimerX实现任务的分布式编排与调度,并通过`@SchedulerLock`确保任务不被重复执行。示例代码展示了如何配置定时任务及其分布式锁,以实现每5秒仅由一个节点执行任务,适合构建高可用的微服务系统。
72 0
|
5月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
Spring Cloud Alibaba 发布了 Scheduling 任务调度模块 [#3732]提供了一套开源、轻量级、高可用的定时任务解决方案,帮助您快速开发微服务体系下的分布式定时任务。
14995 29
|
6月前
|
人工智能 Java Spring
使用 Spring Cloud Alibaba AI 构建 RAG 应用
本文介绍了RAG(Retrieval Augmented Generation)技术,它结合了检索和生成模型以提供更准确的AI响应。示例中,数据集(包含啤酒信息)被加载到Redis矢量数据库,Spring Cloud Alibaba AI Starter用于构建一个Spring项目,演示如何在接收到用户查询时检索相关文档并生成回答。代码示例展示了数据加载到Redis以及RAG应用的工作流程,用户可以通过Web API接口进行交互。
52600 70