秒杀接口整合 sentinel 实现热词限流|学习笔记

简介: 快速学习秒杀接口整合 sentinel 实现热词限流

开发者学堂课程【精通 Spring Cloud Alibaba秒杀接口整合 sentinel 实现热词限流】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/634/detail/10154


秒杀接口整合 sentinel 实现热词限流


目录:

一、热点参数限流:

二、何为热点?

三、框架怎么整合?

四、规则是怎么配置的


首先找到官网:

https://github.com/alibaba/Sentinel/wiki/%E7%83%AD%E7892%B9%E5%8F%82%E6%9%99%90%E6%B5%81


一、热点参数限流:

对我们接口热词实现限流(就好比在做秒杀,对USID进行限流,每秒中最多限流几个QBS,限制热词做限流,)

在访问秒杀接口,一秒中访问这两个秒杀接口,这时候不算热词限流。因为如果说一秒中频繁把相同的参数去访问,这个算,如果一秒中访问两次,因为传的不同的userid,所以我们注意对相同的 userid 在一秒内当中去使用限流。

那么在这个 sentinel 当中有对热点的参数性有这个介绍。


二、何为热点

经常访问的数据对某一个参数频繁访问可以进行限制。

热点即经常访问的数据。很多时候我们希经统计菜个热点数据中访问频次最高的 TopK 数据,并对其访问进行限制。

比如:

  • 商品ID 为参数,统计一段时间内很第购买的商品1D并进行限制
  • 用户 ID 为参数,针对一段时间内频警访问的用户10进行限制

热点参数限流会統计传入於数中的热点谷数,井根据配買的限流凤们与模式,对包含热点参数的咨识调

用进行限流。热点参数限流可以石做是一种持殊的流量控制,仅对包含热点参数的资识调用生效。


三、框架怎么整合

整合 sentinel。在文件中首先要引入到 sentinel 架包。写一个秒杀的接口加一个@restcontroller

写一个秒杀接口:

<dependency>

«groupId›org.springframework.cloud</groupId>

<artifactId›spring-cloud-alibaba-sentinel</artifactId›

<version>0.2.2.RELEASE</version>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<cartifactId>spring-boot-starter-actuator</artifactId>

</dependency>

@restcontroller

public  class seckillservice{

/**

*秒杀接口

*

*@reture

*/

@RequestMapping("/seckill")

public String seckill(long userId ,long order)

Return “面试成功”

}

首先这时候有 API

复制以下代码:

private void initSeckillRule(){

ParamFlowRule rule = new ParamFlowRule(SEKILL_RULE)

//对我们每个秒杀接口第0个参数实现限流

setParamIdx(0)

setGrade (RuleConstant. FLOW GRADE_QPS)

//每科QPS最委只有1SParamFlowRuleManager.loadRules(Collections.singletonList(rule));

1og.info(“>>>秒杀接口限流策略配置成功<<<");


四、规则是怎么配置的

首先定义限流配置规则,这边参数 ids 0相当于对 userid 0参数实行限流。

如果想对 orderid 这个参数实行限流情况下,写1

显示限流的模式,肯定是 qbs,相当于相同的 userid 在每秒中只能访问一次秒杀接口。把我们的路由规则加再到内存里面去,组合也是可以的

怎么把路由规则加载到内存里

对象 survice 可以帮助初始化走无参的构造函数就能执行方法,而且对象只能初始化一次。

那么这时候我们测试一下秒杀的接口,成功之后,可以搜索一下日志

可以访问秒杀的接口,点名8090.访问接口传递到 userid 等于 orderd 等于99这个时候没有引用

需要写新代码:

@return

*/

@RequestMapping("/seckill")

public String seckill(Long userId, Long orderId) (

try {

Entry entry = SphU.entry(SEKILL_RULE, EntryType.IN, count: I, (userId)

}catch (Exception e){

首先我们会引入路由规则,这个地方相当于是入口,肯定写成in,这个1不是限流,在这个地方有 userid,相当于这个地方对 userid 实现一个限流,每秒只能访问一次如果又想加 userid 和 orderid,其实很简单,再写一个 orderid。

这个里面是多个参数的,可以多个组合的。

如果说抛出异常的情况下重写:

return "当前该用户访问频率过多,请稍后重试;在这个地方就能知道实现一个限流

如果通过这种方式做限流,不灵活,如果要把规则改成2或者3,现在写成10,在路由规则变化的情况下。还需重启服务器

相关文章
|
5月前
|
Java 数据安全/隐私保护 Sentinel
面试官:Sentinel是如何实现限流的?
面试官:Sentinel是如何实现限流的?
676 1
|
4月前
|
监控 Java Sentinel
使用Sentinel进行服务调用的熔断和限流管理(SpringCloud2023实战)
Sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
121 3
|
3月前
|
监控 算法 Java
高并发架构设计三大利器:缓存、限流和降级问题之配置Sentinel的流量控制规则问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之配置Sentinel的流量控制规则问题如何解决
|
5月前
|
Java 数据安全/隐私保护 Sentinel
微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流
微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流
|
5月前
|
Java Nacos Sentinel
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(九)Nacos+Sentinel+Seata
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(九)Nacos+Sentinel+Seata
678 0
|
5月前
|
SpringCloudAlibaba 监控 Java
SpringCloud Alibaba Sentinel实现熔断与限流--学习笔记
SpringCloud Alibaba Sentinel实现熔断与限流--学习笔记
87 0
|
5月前
|
监控 算法 Java
sentinel 服务限流工作原理
sentinel 服务限流工作原理
|
5月前
|
监控 Java API
Sentinel熔断限流真的太丝滑了
Sentinel熔断限流真的太丝滑了
160 0
|
5月前
|
存储 数据库 Nacos
微服务限流Sentinel讲解(五)
微服务限流Sentinel讲解(五)
113 0
|
2月前
|
Java UED Sentinel
微服务守护神:Spring Cloud Sentinel,让你的系统在流量洪峰中稳如磐石!
【8月更文挑战第29天】Spring Cloud Sentinel结合了阿里巴巴Sentinel的流控、降级、熔断和热点规则等特性,为微服务架构下的应用提供了一套完整的流量控制解决方案。它能够有效应对突发流量,保护服务稳定性,避免雪崩效应,确保系统在高并发下健康运行。通过简单的配置和注解即可实现高效流量控制,适用于高并发场景、依赖服务不稳定及资源保护等多种情况,显著提升系统健壮性和用户体验。
59 1
下一篇
无影云桌面