【Java面试】什么是令牌桶限流算法

当面试官问你,”什么是令牌桶限流算法”!
你知道要怎么回答,才能获得面试官的青睐吗?
大家好,我是Mic,一个工作了14年的Java程序员。
关于这个问题,面试官想考察哪些纬度?我们又该怎么回答呢?

问题解析

限流策略,是在高并发流量下保护系统稳定性的一种策略。

所以这个问题,主要是互联网公司会去考察。

当然,在实际业务开发中,限流无处不在,比如

  • 线程池、连接池这些通过限制总的并发数量避免资源过度使用。
  • Nginx反向代理服务器上通过limit_conn模块限制瞬时并发连接数
  • 在方法层面通过Sentinel、RateLimiter等工具限制接口的并发请求数量等等

他们的核心目标,都是限制并发请求数量,避免系统被压垮导致不可用的问题。

在限流的整个体系里面,我认为有三个比较重要的纬度

  • 资源,也就是针对什么资源进行限流,比如接口,或者连接等
  • 阈值,流量峰值达到多少后限制后续流量的访问
  • 触发限流后的行为,比如熔断、降级等

【Java面试】什么是令牌桶限流算法

限流算法是整个限流实现的核心,不同限流算法,能够对流量的精准控制粒度,以及是否能支持突发流量等情况进行控制常见的限流算法,滑动窗口、令牌桶、漏桶等。

其中令牌桶是一种能够处理突发流量的限流算法,系统以恒定速率向令牌桶里面添加令牌,然后每个请求都需要从令牌桶去获取令牌才能访问,如果获取不到,就会触发限流。

【Java面试】什么是令牌桶限流算法

所以,我认为这道题考察两个方面

  • 对限流的整体认知
  • 了解限流算法对于限流本身的重要性

高手:

令牌桶是一种控制请求访问速率的算法。

它具体工作原理是:系统以一定速率生成令牌并放到令牌桶里面。

然后所有的客户端请求进入到系统后,先从令牌桶里面获取令牌,成功获取到令牌表示可以正常访问。

如果取不到令牌,说明请求流量大于令牌生成速率,也就是并发数超过系统承载的阈值,就会触发限流的动作。

在流量较低的情况下,令牌桶可以缓存一定数量的令牌,所以令牌桶可以处理瞬时突发流量。

总结

好了,今天的分享就到这里结束了。

如果喜欢我的作品,记得点赞、收藏、关注!

需要整套面试文档扫下方!!!

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Mic带你学架构
如果本篇文章对您有帮助,还请帮忙点个关注和赞,您的坚持是我不断创作的动力。欢迎关注「跟着Mic学架构」公众号公众号获取更多技术干货!

【Java面试】什么是令牌桶限流算法

Original: https://www.cnblogs.com/mic112/p/16689656.html
Author: 跟着Mic学架构
Title: 【Java面试】什么是令牌桶限流算法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/619621/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java 代理模式

    1、打王者段位一直打不上王者段位怎么办?请游戏代练。2、过年回家自已抢不到高铁票怎么办?找黄牛帮我们抢票。3、…….(生活中处处可见。) 由上可知,代理模式…

    Java 2023年5月29日
    085
  • 数据库系统概论小结(四)【面向考试】

    数据库系统概论小结(四)【面向考试】 第五章 数据库完整性 数据库的完整性指数据的正确性和相容性。 正确性:符合现实世界的描述。 相容性:同一对象在不同表里面是符合逻辑的。 维护完…

    Java 2023年6月16日
    074
  • linux软件相关基操–基于Debian

    更新软件源 apt-get update 更新升级所有软件 apt-get upgrade 更新某个软件 apt-get upgrade [package-name] 列出可更新的…

    Java 2023年6月8日
    078
  • ant-design-vue中table自定义列

    1. 使用背景 在项目中使用 ant-vue的 a-table控件过程中,需要显示序号列或者在列中显示图片,超链,按钮等UI信息。经过查询文档 customCell和 custom…

    Java 2023年6月13日
    078
  • 面向对象学习笔记

    面向对象的三大特征: 封装、继承、多态 封装:调用方法而不需要了解方法内部是如何实现的,为什么要这样呢,因为有些方法可能有些标准规范,如果你自己去调用使用的话可能就没有遵守他的规定…

    Java 2023年6月6日
    073
  • Java实现哈希表

    2.1、哈希冲突 冲突位置,把数据构建为链表结构。 装载因子=哈希表中的元素个数 / (散列表)哈希表的长度 装载因子越大,说明链表越长,性能就越低,那么哈希表就需要扩容,把数据迁…

    Java 2023年6月15日
    072
  • Slf4j的MDC初尝试

    本人使用Java两年时间,鉴于经验有限,在开发java后端代码过程中,为了定位问题,希望同一个线程的requestId可以从web层的日志一直输出到dao层,这样使用Linux命令…

    Java 2023年6月13日
    087
  • Spring Boot 学习笔记

    对于我们学习一种框架来说;我最喜欢问的是;为什么,是什么,为什么这种框架,这框架那么多人用;肯定有原因的。 其次;他是框架;那么他有基本的架构思想;比如车子;有自行车,有摩托车;还…

    Java 2023年5月30日
    058
  • Java开发之JavaWeb速成 —- 第二部分

    JavaWeb速成 前言 以最少时间,快速学完各知识点。知识点围绕概念,作用,使用方法来写,适合有javaweb基础的人复习 旨在快速入手/复习,放实例显得冗余,所以实例代码会以截…

    Java 2023年6月5日
    087
  • Paxos 协议简单介绍

    一、简介 Paxos 协议是少数在工程实践中证实的强一致性、高可用的去中心化分布式协议。Google 的很多大型分布式系统都采用了 Paxos 算法来解决分布式一致性问题,如 Ch…

    Java 2023年6月7日
    090
  • Unity-2D

    Unity-2D 1.Unity中的2D模式: 1)游戏在二维上展示 启用 2D 模式时将会设置正交(即无透视)视图:摄像机沿 Z 轴观察,而 Y 轴向上增加。因此可以轻松可视化场…

    Java 2023年6月13日
    065
  • Mybatis 如何在IDEA中添加配置模板

    Mybatis 如何在IDEA中添加配置模板 第一步:点击File -> setting ->找到Editor点击->找到File and Code Templa…

    Java 2023年6月7日
    076
  • mybatis jdk动态代理接口时碰到的继承问题

    背景: 基类指针指向派生类对象 仍然调用了基类同名方法 基类方法没有mybatis query注解处理名叫entity对象,再一次看出调用的基类的方法 问题: 1 为什么基类的方法…

    Java 2023年5月30日
    070
  • MySQL、Oracle元数据抽取分析

    最近接到个任务是抽取mysql和Oracle的元数据,大致就是在库里把库、schema、表、字段、分区、索引、主键等信息抽取出来,然后导成excel。 因为刚开始接触元数据,对这个…

    Java 2023年6月5日
    077
  • Spring 常见面试题

    Spring 常见面试题 Spring 常见面试题 Spring 八股文 说说你对Spring的理解? 你觉得Spring的核心是什么? 说一下Spring的优势? Spring是…

    Java 2023年5月30日
    072
  • Nginx 限流配置

    limit_req_zone 用来限制单位时间内的请求数,即速率限制,采用的漏桶算法 “leaky bucket”。 limit_req_zone $bin…

    Java 2023年5月30日
    067
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球