springboot限流方案1.1

本文探讨了接口限流的两种方案:谷歌的RateLimit和阿里的Sentinel。RateLimit适合简单限流,基于令牌桶算法,但不适用于集群限流。而Sentinel作为一个非侵入式的服务限流组件,提供可视化监控,适用于后期添加限流功能,但需要额外的持久化支持。选择限流策略时,需考虑业务场景和运维成本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,接口限流目前有两种方式谷歌rateLimit和阿里sentinel
一 优点 rateLimit配置简单能够实现简单的限流,基于令牌桶算法可以用来保护自己主要是对 来对调用者qps频率限流,基于redis和硬编码的方式限流侵入式,简单容易上手可以根据自己的业务动态调整增加了开发成本,节省了一些运维和后期运维成本成本。
缺点 注意Ratelimit的作用域是在接口上的也就是说他是单机的它无法跨jvm设置100qps那也只是在本接口上的限流,假设在集群中有10台服务器 想要保证集群1000qps的接口访问量 这个就不适用了,集群限流的最常见的是redis一种是固定窗口的计数, 例如现在是2021/7/20 10:01:22 这个key进行incr,incr的结果只要大于我们设置的值那我们就打回去小于就放开。另外一种是lua脚本通过分布式令牌桶的方法 这是基于redis分布式
1,在控制层用Ratelimite 内部通过令牌桶限流
2,使用Java自带的Semapore信号量实现
3,使用redis 实现存储两个key 一个用于计时 一个用于计时 每次请求一次 计数器就增加一个 若在计时时间内为超过阈值就可以正常访问
非侵入式
二 sentinel 是一个非侵入的限流熔断服务 通过第三方jar包来监控服务 进行限流 有可视化页面可以监控服务健康状态
优点 如果项目前期没有规划限流可以在后期不改变项目的情况下增加改组件 实现的低耦合 有利于服务的耦合 方便
缺点 增加了服务部署和后期运维成本 sentinel自身不能持久化 需要借助nacos 或者redis mysql 等 方式进行持久化。
这篇文章提供思路 可以结合自己的业务场景使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值