几行代码实现限流,实用又简单

阅读: 评论:0

几行代码实现限流,实用又简单

几行代码实现限流,实用又简单

​场景

依赖系统脆弱    

    自己的系统依赖别人的系统很脆弱,支持不了高qps的请求,比如一下高计算量的AI系统,或者一个高计算量的数据系统。这里都是作者经历过的。悄悄告诉你,你要是把别人系统打挂了,锅是你背的。哈哈哈哈。所以一些基本的限流操作要学会。

 

自己系统计算量大,逻辑复杂还需要防止恶意请求

    作者也经历过,自己的系统真的太复杂了,毕竟需要一定的安全性,不能直接让别人请求,这个时候一般会在前面加一个服务,并且加上限流操作以及一些权限校验什么的,成功了之后再去请求后面服务。

 

 

怎么快速实现一个呢??

你看下面实现。

/** * @author JZWen * @date 2020/11/26 */public class GlobalLimiter {    //随着线上的机子量变化需要修改限流数,目前是10秒3个请求    private static volatile int permit = 3;    private Map<Long, Integer> rate = new ConcurrentHashMap<>(500);    public boolean limit() {        long secondTime = System.currentTimeMillis() / 10000;        synchronized (GlobalLimiter.class) {            Integer count = (secondTime);            if (count == null) {                rate.put(secondTime, 1);                ve(secondTime - 3);                System.out.println("开始-------count :" + count + 1);                return true;            }                        if (count + 1 > permit) {                System.out.println("限流了 -------" + count + 1);                return false;            }            rate.put(secondTime, count + 1);            System.out.println("通过了-------" + count + 1);            return true;        }    }}

 

代码分层编写一下啊

 

/** * @author JZWen * @date 2020/11/26 */public interface LimiterOverflowValidate {    boolean tryAcquire();}
/** * @author JZWen * @date 2020/11/26 */@Servicepublic class RateLimiterOverflowValidate implements LimiterOverflowValidate {    private GlobalLimiter limiter = new GlobalLimiter();    @Override    public boolean tryAcquire() {        return limiter.limit();    }}

 

 

没骗你吧,真的就几行代码。使用  ConcurrentHashMap 存储请求数据,key =当前时间戳 (s) , value 当前时间戳的请求数,当然这个地方请求的维度可以自己把控的,比如说,我想按照请求方来限流,那个key就变成请求方id, value 可以包装一个类,Entry <key, Value> key =当前时间戳, value  = 当前时间戳的的请求数。随意搭配,但是记得remove调里面数据。要不然这个Map 会越来越大。打满内存会。

 

 

 

等你很久

你还没来

我都已习惯了等你

 

 

欢迎关注我,一起成为一个有趣的程序员

 

 

 

本文发布于:2024-01-27 17:16:06,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17063469641599.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:几行   代码   简单
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23