测试
- 我们还是通过50并发循环10次访问 。我们可以发现只有在一开始能达到比较高的吞吐量 。在随后桶的容量满了之后 。而下游水滴速率比上游请求速率慢的情况下 。只能以下游恒定的速度接收访问 。
- 他的问题也暴露得很明显 。针对时间窗口的不足漏桶进行的不足,但是仍是不足 。无法彻底避免请求溢出的问题 。
- 请求溢出本身就是一种灾难性的问题 。所有的算法目前都没有解决这个问题 。只是在减缓他带来的问题
文章插图
令牌桶算法
- 令牌桶和漏桶法是一样的 。只不过将桶的作用方向改变了一下 。
- 漏桶的出水速度是恒定的,如果流量突然增加的话我们就只能拒绝入池
- 但是令牌桶是将令牌放入桶中,我们知道正常情况下令牌就是一串字符当桶满了就拒绝令牌的入池,但是面对高流量的时候正常加上我们的超时时间就留下足够长的时间生产及消费令牌了 。这样就尽可能地不会造成请求的拒绝
- 最后,不论是对于令牌桶拿不到令牌被拒绝,还是漏桶的水满了溢出,都是为了保证大部分流量的正常使用,而牺牲掉了少部分流量
public Map<String, Object> startLingpaitong(Map<String, Object> paramMap) {String redisKey = "lingpaitong";String token = redisTemplate.opsForList().leftPop(redisKey).toString();//正常情况需要验证是否合法,防止篡改if (StringUtils.isEmpty(token)) {throw new RuntimeException("令牌桶拒绝");}Map<String, Object> map = new HashMap<>();map.put("success", "success");return map;}
@Scheduled(cron="*/1 * * * * ?")private void process(){//一次性生产两个System.out.println("正在消费 。。。。。。");for (int i = 0; i < 2; i++) {redisTemplate.opsForList().rightPush(redisKey, i);}}
原文链接:
https://juejin.cn/post/6967704472109711367
【主流的四种限流策略,我都可以通过redis实现】
推荐阅读
- 固伦和孝公主出生时乾隆多大,固伦温宪公主与雍正关系如何
- 马鞭草酮迷迭香纯露好吗,橙花薰衣草洋甘菊迷迭香四种纯露
- 赤壁之战中大败曹操的主要人物是谁和谁,赤壁之战曹操为何败
- 云南普洱老茶之殇,云南普洱砖茶主要特点
- 开春多吃四种菜 初春饮食的注意事项
- 郑庄公是郑国第二代君主,我认为郑庄公是个什么人
- 诸葛亮死了刘禅当了多少年君主,诸葛亮死后刘禅的结局
- 奥索里奥主战坦克安装哪国的滑膛炮?
- 大太监和硕公主结局,和硕公主嫁给谁了
- 乾隆的固伦公主都有谁,和孝固伦公主是谁的女儿