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

简介: 面试官:听说你是公司技术一号位,那我就考考你吧😊。对于ip的限流,我们是直接使用了Nginx的限流,Nginx的limit_req_zone可以设置每个IP地址在单位时间内所允许发起的请求数。

在这里插入图片描述

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


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


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

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

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


面试官思考中…


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

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. 也可以在抢购按钮上,增加一个答题验证进行流量削峰,同样能实现相同的效果。

在这里插入图片描述

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


得想想考点你不懂的😰

未完待续。。。。。。

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

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

相关文章
|
8月前
|
存储 缓存 监控
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(场景问题分析+性能影响因素)
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(场景问题分析+性能影响因素)
127 0
|
8月前
|
存储 缓存 监控
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(数据更新场景策略和方案分析)
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(数据更新场景策略和方案分析)
99 0
|
算法 安全 Java
架构设计第十一讲:架构之高并发:限流
架构设计第十一讲:架构之高并发:限流
172 0
|
存储 算法 Java
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的限流器RateLimiter功能服务
随着互联网的快速发展,越来越多的应用程序需要处理大量的请求。如果没有限制,这些请求可能会导致应用程序崩溃或变得不可用。因此,限流器是一种非常重要的技术,可以帮助应用程序控制请求的数量和速率,以保持稳定和可靠的运行。
29718 51
|
架构师 Java 数据库
架构师才需要学习的知识:亿级流量调优方法+实战
在我们敲代码,推动系统做更多事情的时候,我们遇到了一个共同的问题:性能。网站和应用程序的功能比以往更丰富。结果,他们对网络和设备资源的要求越来越高。因此,我们现在很难在各种网络条件和设备上实现高水平的性能。
|
SQL 存储 缓存
由浅入深的介绍扣减业务中的一些高并发构建方案(上)
在后台开发领域,高并发的扣减一直是比较热门的话题,在各类技术博客、大会分享以及面试问题中出现频率都非常高。可见它的重要性和技术知识点的密集性。
由浅入深的介绍扣减业务中的一些高并发构建方案(上)
|
存储 SQL 缓存
由浅入深的介绍扣减业务中的一些高并发构建方案(中)
这一讲我将由浅入深的介绍如何基于缓存来实现单机万级这些并发扣减目标。
|
算法 NoSQL 网络协议
没有10年的功力,根本不可能设计出这么好的高并发限流方案!
没有10年的功力,根本不可能设计出这么好的高并发限流方案!
|
缓存 运维 监控
21.【学习心得】学习心得-限流和降级
【学习心得】学习心得-限流和降级
21.【学习心得】学习心得-限流和降级
|
JSON 监控 数据可视化
美团动态线程池实践思路,开源了
基于配置中心对线程池ThreadPoolExecutor做一些扩展,实现对运行中线程池参数的动态修改,实时生效;以及实时监控线程池的运行状态,触发设置的报警策略时报警,报警信息会推送办公平台(钉钉、企微等)。报警维度包括(队列容量、线程池活性、拒绝触发等);同时也会定时采集线程池指标数据供监控平台可视化使用。使我们能时刻感知到线程池的负载,根据情况及时调整,避免出现问题影响线上业务。
753 1