前言

限流作为高并发场景下抵挡流量洪峰,保护后端服务不被冲垮的一种有效手段,比如大家熟知的限流组件guawa,springcloud中的Hystrix,以及springcloud-alibaba生态中的Sentinel,甚至是基于网关的限流,比如在nginx中配置限流策略,在gateway中配置限流策略等

限流无处不在,既然限流的作用如此强大,那么其底层的实现原理如何呢,说到底,限流的核心是由一系列不同的算法完成,本篇将通过实例来说明下常用的几种限流算法的用法和原理

1、计数器算法

计数器算法限流是采用简单的计数操作,到一段时间之后自动清零,通俗来说,就是系统允许的最大流量是固定的,每过来一个请求分发一个数量的资源处理请求,一旦某个时间段,这批用于处理请求的资源达到了最大值,后续再过来的请求就直接没法处理了

为了模拟计数器的效果,这里我们使用Java中的Semaphore,对Semaphore有过了解的同学应该直到,这个组件可以搭配线程一起使用,可以对并发线程进行处理,

可以理解Semaphore就是一个令牌发放的人员,所有过来的请求都必须从Semaphore中拿到一个资源(线程),拿到资源的请求才能被处理

/*** 计数器限流算法*/
public class Counter {public static void main(String[] args) {final Semaphore semaphore = new Semaphore(3);ScheduledExecutorService service = Executors.n

Java 常用限流算法解析相关推荐

  1. Java接口限流算法

    0. 前言 常见的限流算法有:令牌桶.漏桶.计数器也可以进行粗暴限流实现. 1. 算法介绍 1.1 令牌桶算法 令牌桶算法是一个存放固定容量令牌的桶,按照固定速率往桶里添加令牌.令牌桶算法的描述如下: ...

  2. Java 常用负载均衡算法解析

    前言 负载均衡在Java领域中有着广泛深入的应用,不管是大名鼎鼎的nginx,还是微服务治理组件如dubbo,feign等,负载均衡的算法在其中都有着实际的使用 负载均衡的核心思想在于其底层的算法思想 ...

  3. Java 常用缓存淘汰算法解析

    前言 对于很多缓存中间件来说,内存是其操作的主战场,以redis来说,redis是很多互联网公司必备的选择,redis具有高效.简洁且易用的诸多特性被大家广泛使用,但我们知道,redis操作大多数属于 ...

  4. 分布式限流算法及方案介绍

    欢迎访问原文地址来阅读最新版本 转载请注明出处:kang.fun/distributed-ratelimiter 个人博客:kang.fun 业务场景 现代互联网很多业务场景,比如秒杀.下单.查询商品 ...

  5. java中常见的限流算法详细解析

    目录 前言 1. 验证限流以及容器限流 2. 服务端限流 2.1 固定时间窗口 2.2 滑动时间窗口 2.3 漏桶算法 2.4 令牌桶算法 前言 以下的文章参考了一些具体的资料加深了解 B站:Java ...

  6. Java中常用的限流算法

    在Java的系统中,在一些活动日或者是被黑客攻击,导致访问量突然暴增,系统承受不了巨大的流量冲击而崩溃.为了保护我们的系统,在实际开发中有四种常见的限流算法来保证系统的安全性. 1 固定窗口算法 固定 ...

  7. 亿级流量治理系列:常用的限流算法有哪些?

    前言 上篇文章<为什么大公司都要做流量治理?>跟大家聊了下做流量治理的真正目的是什么.如果你要开发一个流量治理的平台或者一个限流的框架,那么必不可少的就是要选择一种合适的限流算法.本篇文章 ...

  8. Java 实现滑动时间窗口限流算法,你见过吗?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | dijia478 来源 | https://w ...

  9. Java实现漏斗限流算法

    前言 最近在学习老钱的<Redis深度历险:核心原理与应用实践>,其深入浅出的讲解,让我爱不释手.其中讲到了漏斗限流,在Redis中可以使用 Redis-Cell 模块来做基于Redis的 ...

最新文章

  1. Javascript实现复选框(全选反选功能)
  2. mysql修改表结构语句
  3. Ethernet/IP 学习笔记五
  4. 超级计算机性能调查,调查:多数超级计算机使用Linux操作系统
  5. 函数返回对象写法的失误
  6. pig:group by之后的其它统计方法一
  7. switch注意事项与在什么情况下使用switch或if语句
  8. mac 备份文件 太大 时间机器_新手必看!加速 Mac 时间机器备份速度教程,Time Machine 备份太慢的解决方法...
  9. Java游戏程序设计 第3章 游戏程序的基本框架
  10. 基于java象棋游戏_基于JAVA技术的中国象棋游戏设计与实现
  11. 管家婆设计页面用什么做的_管家婆软件主要是用来做什么的?
  12. Android 高通配置SUPL
  13. Words Reciting 2016.5.4
  14. math_(函数数列)极限的含义误区和符号梳理/邻域去心邻域邻域半径
  15. 【分享】免费的AI绘画网站(5个)
  16. 哥德巴赫猜想(java)
  17. HTTP中常见的各种状态码详解及解决方案
  18. 国家推行电子货币见解
  19. 卖座网项目2流程解析
  20. 前端小技巧|关掉某视频解析网站上的广告

热门文章

  1. Linux Rsync 安装和配置
  2. Python商业数据可视化实战
  3. Mysql数据库实现主从数据库同步更新
  4. 通往当上CEO迎娶白富美的成功之路,送给你的读书清单《领导阶梯》
  5. 多线程---并发容器的使用
  6. 第3组UI(2)-AdapterView之GridView、AutoCompleteTextView、Spinner、Gallery和ExpandableListView
  7. Python项目之文化和旅游数据可视化
  8. 气传导耳机是什么?气传导耳机原理?
  9. 微信小程序图书馆座位预约管理系统
  10. ENVI+ArcGIS利用哨兵2图像做NDVI