Java 常用限流算法解析

Java 常用限流算法解析前言限流作为高并发场景下抵挡流量洪峰 保护后端服务不被冲垮的一种有效手段 比如大家熟知的限流组件 guawa springcloud 中的 Hystrix 以及 springcloud alibaba 生态中的 Sentinel 甚至是基于网关的限流 比如在 nginx 中配置限流策略 在 gateway 中配置限流策略等限流无处不在 既然限流的作用如此强大 那么其底层的实现原理如何呢 说到底 限流的核心是由一系列不同的算法完成 本篇将通过实例来说明下常用的几种限流算法的用法和原理 1 计数器算法计数器算法限流是采用简单

前言

限流作为高并发场景下抵挡流量洪峰,保护后端服务不被冲垮的一种有效手段,比如大家熟知的限流组件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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234012.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ubuntu下安装中文输入法_ubuntu下载中文输入法

    ubuntu下安装中文输入法_ubuntu下载中文输入法文章目录前言基础准备ibus(IntelligentInputBus)fcitx(FlexibleInputMethodFramework)前言Ubuntu中安装中文输入法相比Windows上要复杂不少(其实也不算复杂,就是步骤上要稍微多一些)。这篇文章将基于UbuntuDesktop20.04进行中文输入法安装说明。基础准备首先要安装中文输入法的话ibus(IntelligentInputBus)fcitx(FlexibleInputMethodFramework)

    2022年9月26日
    4
  • pycharm整理代码格式_pycharm怎么变成黑色

    pycharm整理代码格式_pycharm怎么变成黑色black简介自动的代码格式化工具,兼容pep8,项目地址为:官方给出的简介:BlackistheuncompromisingPythoncodeformatter.Byusingit,youagreetocedecontroloverminutiaeofhand-formatting.Inreturn,Blackgivesyouspeed,determinism,andfreedomfrompycodestylenaggingabo

    2025年7月30日
    5
  • phpstorm 比较修改过的代码 version control

    phpstorm 比较修改过的代码 version control

    2021年11月10日
    60
  • VB程序设计教程(第四版)龚沛曾-实验8-2

    VB程序设计教程(第四版)龚沛曾-实验8-2实验8-2将斐波那契数列的前10项写入文件Fb.dat,然后从该文件将数据读取出来并计算合计和平均数,最后送入列表框。要求:文件数据格式如2.8.2所示,列表框中项目格式如图2.8.3所示。解题,画2个按钮,1个列表框控件,代码如下:PrivateSubCommand1_Click()Dimfib%(0To9),i%Open”c:\fb.dat…

    2022年10月6日
    5
  • 制作简单的贺卡_bootfs和rootfs

    制作简单的贺卡_bootfs和rootfs分析简单的根文件系统中所必须的文件1.1在嵌入式系统中的根文件系统与桌面版的根文件系统文件基本上类似,所以用Ubuntu中根文件系统问模板,进行分析:1.1.1、bin sbin  linuxrc  是必须的,但是这三个目录以及里面的文件都是移植busybox并安装的时候由busybox生成的1.1.2、etc  是很关键很重要的一个。目录中的文件都是运行时配置文件,都是直接…

    2022年10月6日
    3
  • 微信小程序开发工具基本介绍入门级(备忘)

    微信小程序开发工具基本介绍入门级(备忘)微信小程序的一些入门介绍。

    2022年8月21日
    10

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号