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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • .OPF文件剖析「建议收藏」

    .OPF文件剖析「建议收藏」OPF文档是epub电子书的核心文件,且是一个标准的XML文件,依据OPF规范,主要由五个部分组成:1、2829303132333435…

    2022年8月2日
    16
  • 小明加密通道进入_德州人行通道闸哪个牌子好

    小明加密通道进入_德州人行通道闸哪个牌子好全高转闸有了高速发展的引擎,安保成为每个,地区重要的投入,很多重要的场所需要做到无人值守全天侯的安保措施,像、从事特殊行业作业的工厂、工地等场所就成了全高转闸十足的推动者,行业的迅速发展促生了一批又一批高速发展的企业,其中深圳市志美智能科技有限公司就是其中一家行业的全高转闸供应商。同时人脸识别技术,虹膜技术,掌纹识别技术,指纹识别技术,无线射频识别技术,条码识别技术等一些新技术的应用面的不断…

    2022年6月11日
    57
  • java 分苹果_数据结构Java版

    java 分苹果_数据结构Java版有600个苹果,10个盒子,要求把600个苹果分装到10个盒子里。如果有人来买苹果随便说出一个数,直接拿这些盒子组装一下就可以给他不用拆分盒子。请问这10个盒子应该分别装多少苹果?代码如下importjava.util.Scanner;publicclassTest{ publicstaticvoidmain(String[]args){  intbox[]=

    2022年10月12日
    0
  • Android之viewstub用法详解及实现延迟加载

    这一篇是接着上面的include标签的例子来讲的,地址http://blog.csdn.net/jason0539/article/details/26131831 上一篇的布局中间就用了viewstub这个控件,现在来说一下其作用和用法” ViewStub 是一个不可见的,大小为0的View,最佳用途就是实现View的延迟加载,避免资源浪费,在需要的时候才加载View”需

    2022年3月11日
    72
  • hashmap动态扩容死循环_HashMap扩容

    hashmap动态扩容死循环_HashMap扩容HashMap扩容死循环问题源码分析问题(jdk1.7)一、首先hashmap单线程正常扩容遍历每个数组,依次遍历每个数组的链表,根据头插法由原来的1,2,3变为了3,2,1二、hashmap多线程扩容死循环问题两个线程e1,e2此时线程一先执行,但线程二的指向发生改变,改为线程变换后的具体存储;初始的e2指向0号位的1,但经过线程一的变换指向了2号位的1了,next也发生改变线程二开始在线程一的基础存储,当next2指向空时。e.next=newTable[i],也就

    2022年9月21日
    0
  • bytebuf池_Netty ByteBuf[通俗易懂]

    bytebuf池_Netty ByteBuf[通俗易懂]ByteBufByteBuf需要提供JDKByteBuffer的功能(包含且不限于),主要有以下几类基本功能:7种Java基础类型、byte[]、ByteBuffer(ByteBuf)的等的读写缓冲区自身的copy和slice设置网络字节序构造缓冲区实例操作位置指针扩容原理首先确认ByteBuf是否已经被释放,如果被释放,则抛出IllegalReferenceCountException异常判断…

    2022年9月19日
    0

发表回复

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

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