你们公司用的限流方案,可以讲讲吗

news/2024/7/7 21:47:56 标签: java, 后端, 架构, nginx

在这里插入图片描述

面试官:听说你是公司技术一号位,那我就考考你吧


面试官:不用慌尽管说,错了也没关系😊。。。


以【面试官面试】的形式来分享技术,本期是《业务设计系列》,感兴趣就关注我吧❤️

面试官:知道有什么限流算法吗

知道的,我了解的主要有计数器算法、令牌桶算法、漏桶算法。


面试官思考中…


面试官:你讲一讲它们的原理

Ok好的。

  1. 计数器算法比较简单,主要是通过一个计数器判断单位时间访问量是否到达了阈值,从而进行限流。
  2. 令牌桶算法的话,例如一个令牌桶里容量最多是10个令牌,程序会按0.1秒的固定速率向桶里放入一个令牌,用户请求只有获得令牌后才能执行,这样就实现了1秒限流10次的功能。
  3. 漏桶算法的原理主要是有一个固定容量、有洞的桶,把用户请求当成是水滴,如果水滴从洞口流出的速率超过了阈值,其他再进来的用户请求就会被拒绝。

另外漏桶算法的流出速率是相同的,不能像令牌桶算法一样可以处理瞬时流量
在这里插入图片描述


面试官思考中…


面试官:你们公司用的限流方案,可以讲讲吗

限流的话,我们一般是在接入层进行限流,主要对两方面进行限流。

  1. 对于ip的限流,我们是直接使用了Nginx的限流,Nginx的limit_req_zone可以设置每个IP地址在单位时间内所允许发起的请求数。

  2. 对于URL的限流,我们使用的是Nginx + Redis + Lua脚本的方案。

    一个Nginx节点都会对应着一个独立的Redis节点,当请求来临时,Nginx会向Redis发起Evalsha命令执行Lua限流脚本验证请求次数是否已达限流阈值。
    在这里插入图片描述


面试官思考中…


面试官:应该有在应用层进行限流吧

噢噢有的,对于某些业务接口我们也会进行限流,例如一个抢购场景。

我们会限制好目标SKU在单位时间内允许的最大抢购次数,超出所设定阈值的话就会会拒绝后续用户的抢购请求。


面试官思考中…


面试官:这种不是硬编码吗,可以怎么升级吗

确实这种硬编码的方式,给系统带来了限流代码侵入性的问题,也增加了复杂度。

可以引入一个流控平台,使用注解方式就可以实现对业务接口的限流,同时有一个总的平台来监控应用层的限流状态。

例如使用类似Sentinel这种轻量级的流控中间件。


面试官思考中…


面试官:还知道其他也可以限流的方案吗

emmmm,其实还可以从业务角度出发,这种方式也能实现限流,不过更准确应该是叫流量削峰

我知道的有两种方法,主要是利用了时间分片

  1. 例如一个抢购活动有3万件库存,我们可以在一天分为早、中、晚,每个时间段抢购1万件商品。保证了活动正常进行,也为我们系统减少了流量压力。
  2. 也可以在抢购按钮上,增加一个答题验证进行流量削峰,同样能实现相同的效果。

在这里插入图片描述

面试官抓抓脑袋,继续看你的简历…


得想想考点你不懂的😰

未完待续。。。。。。

好了,今天的分享就先到这,我们下期继续。

创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️


http://www.niftyadmin.cn/n/5436588.html

相关文章

鸿蒙开发实战:【音频组件】

简介 音频组件用于实现音频相关的功能,包括音频播放,录制,音量管理和设备管理。 图 1 音频组件架构图 基本概念 采样 采样是指将连续时域上的模拟信号按照一定的时间间隔采样,获取到离散时域上离散信号的过程。 采样率 采样…

react/vue项目刷新页面404的原因以及解决办法

项目 公司官网 背景 1、问题描述:react/vue项目,正常的页面操作跳转,不会出现404的问题,但是一旦刷新,就会出现404报错 2、产生原因:我们打开react/vue打包后生成的dist文件夹,可以看到只有一…

【C++】内存管理和模板基础(new、delete、类及函数模板)

🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343🔥 系列专栏:http://t.csdnimg.cn/eCa5z 目录 内存分布 C内存管理方式 new/delete操作内置类型 new和delete操作自定义类型 operator new与operator d…

8.6 Springboot项目实战 Spring Cache注解方式使用Redis

文章目录 前言一、配置Spring Cache1. @EnableCaching2. 配置CacheManager3. application.properties配置二、使用注解缓存数据1. 使用**@Cacheable** 改造查询代码2. 使用**@CacheEvict** 改造更新代码前言 在上文中我们使用Redis缓存热点数据时,使用的是手写代码的方式,这…

IUV-5G全网仿真软件实训手册-手工整理

全国职业院校技能大赛-5G组网与运维赛项-IUV全网实训指导手册资源-CSDN文库 引论 目前我国商用5G网络多为NSA组网架构,即核心网、承载网暂利旧当前4G网络,无线侧采用双连接EN-DC方式,NR站点以升级的4G站点为锚点,终端同时接入4G、5G无线网络。在蜂窝网络基础上,5G引入了…

java IO 04 对象处理流,序列化

01.序列化和反序列化的作用 重点: 图: 02.对象流ObjectOutputStream和ObjectInputStream ObjectInputStream: ObjectOutputStream: 例子: 例子: 修改要序列化类的话,会出现不同的uid…

mysql将一个表另存为新表,同时复制索引、约束、主键等信息

使用 SHOW CREATE TABLE 语句获取原表的创建语句: SHOW CREATE TABLE 原表名;将 原表名 替换为要复制的原始表的名称。 此语句将返回一个包含原表完整创建语句的结果集。创建语句包括表的结构、列定义、索引、约束、主键等所有信息。 复制结果集中的创建语句&…

航迹数据优化方案

文章目录 引言I 轨迹数据模型II 轨迹信息索引III 数据同步方案3.1 多服务器多表同步3.2 增量数据同步3.3 执行IV 动态表的同步4.1 利用变量进行动态日期表名拼接其他方案引言 重点: ES索引的设计:航迹索引和船的最新位置信息索引梳理出存储航迹的主服务器,测试多服务器多动…