springboot限流方案1.1

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 等 方式进行持久化。
这篇文章提供思路 可以结合自己的业务场景使用

你可能感兴趣的:(springboot,spring)