服务限流之计数器方式

作者: 迦叶_金色的人生_荣耀而又辉煌 | 来源:发表于2021-12-19 08:30 被阅读0次

上一篇 <<<服务的隔离、降级和熔断
下一篇 >>>服务限流之滑动窗口计数


最简单最容易的一种算法,比如我们要求某一个接口,1分钟内的请求不能超过10次,我们可以在开始时设置一个计数器,每次请求,该计数器+1;
如果该计数器的值大于10并且与第一次请求的时间间隔在1分钟内,那么说明请求过多,如果该请求与第一次请求的时间间隔大于1分钟,并且该计数器的值还在限流范围内,那么重置该计数器。
缺陷:在临界点会存在问题

/**
 * 功能说明: 纯手写计数器方式<br>
 */
public class LimitService {

   private int limtCount = 60;// 限制最大访问的容量
   AtomicInteger atomicInteger = new AtomicInteger(0); // 每秒钟 实际请求的数量
   private long start = System.currentTimeMillis();// 获取当前系统时间
   private int interval = 60;// 间隔时间60秒

   public boolean acquire() {
      long newTime = System.currentTimeMillis();
      if (newTime > (start + interval)) {
         // 判断是否是一个周期
         start = newTime;
         atomicInteger.set(0); // 清理为0
         return true;
      }
      atomicInteger.incrementAndGet();// i++;
      return atomicInteger.get() <= limtCount;
   }

   static LimitService limitService = new LimitService();

   public static void main(String[] args) {

      ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();
      for (int i = 1; i < 100; i++) {
         final int tempI = i;
         newCachedThreadPool.execute(new Runnable() {

            public void run() {
               if (limitService.acquire()) {
                  System.out.println("你没有被限流,可以正常访问逻辑 i:" + tempI);
               } else {
                  System.out.println("你已经被限流呢  i:" + tempI);
               }
            }
         });
      }
   }
}

推荐阅读:
<<<高并发架构的整体思路
<<<一个网站访问慢的真正原因
<<<高并发情况下,接口的代码会存在哪些问题
<<<压缩静态资源减少带宽传输的方式
<<<动静分离架构模式
<<<缓存策略汇总
<<<后端服务的雪崩效应及解决思路
<<<服务的隔离、降级和熔断
<<<服务限流之滑动窗口计数
<<<服务限流之令牌桶算法
<<<服务限流之漏桶算法
<<<漏桶算法和令牌桶算法的区别
<<<自定义封装限流算法
<<<应用级限流
<<<接入层限流

相关文章

  • 基于计数器的服务接口限流实例

    计数器限流是服务接口限流策略中最为基本和简单的方式。本实例将实现不同接口设置不同的限流方案。 首先我们需要需要定义...

  • 基于信号量Semaphore的服务接口限流实例

    前景回顾:《基于计数器的服务接口限流实例》《基于RateLimiter的服务接口限流实例》 一、Semaphore...

  • 服务限流之计数器方式

    上一篇 <<<服务的隔离、降级和熔断[https://www.jianshu.com/p/9cf1b706b771...

  • 服务限流之滑动窗口计数

    上一篇 <<<服务限流之计数器方式[https://www.jianshu.com/p/5ad5f76739a2]...

  • 单机限流 - 限流算法及隔离策略

    限流算法 - 计数器 计数器是一种比较简单的限流算法,用途比较广泛,在接口层面,很多地方使用这种方式限流。在一段时...

  • Guava RateLimiter的实现

    限流 高并发系统有三大利器:缓存 、限流 、降级。对于限流的实现,有多种算法:计数器,漏桶法,令牌桶法。计数器法无...

  • RateLimiter源码解析

    计数器限流 最原始的代码 但是计数器限流无法对相邻两秒都是高qps进行限流,比如1:29:29.999有100qp...

  • Sentinel 是如何做限流的

    限流是保障服务高可用的方式之一,尤其是在微服务架构中,对接口或资源进行限流可以有效地保障服务的可用性和稳定性。 之...

  • Sentinel 是如何做限流的

    限流是保障服务高可用的方式之一,尤其是在微服务架构中,对接口或资源进行限流可以有效地保障服务的可用性和稳定性。 之...

  • 分布式架构

    大流量限流/削峰 常见的限流算法 计数器算法池化资源技术的限流就是通过计数器算法来控制全局的总并发数。 令牌桶算法...

网友评论

    本文标题:服务限流之计数器方式

    本文链接:https://www.haomeiwen.com/subject/gnkrfrtx.html