当前位置: 首页 > news >正文

微服务篇之限流

一、为什么要限流

        1. 并发的确大(突发流量)。

        2. 防止用户恶意刷接口。

二、限流的实现方式

1. Tomcat限流

        可以设置最大连接数,但是每一个微服务都有一个tomcat,实现起来非常麻烦。

2. Nginx限流

(1)控制速率(突发流量)。

     漏桶算法:

        nginx配置如下:

key:定义限流对象,binary_remote_addr就是一种key,基于客户端ip限流。

Zone:定义共享存储区来存储访问信息,10m可以存储16wip地址访问信息。

Rate:最大访问速率,rate=10r/s  表示每秒最多请求10个请求。

burst=20:相当于桶的大小。

Nodelay:快速处理。

(2)控制并发连接数

        nginx配置如下:

        limit_conn perip 20:对应的key是 $binary_remote_addr,表示限制单个IP同时最多能持有20个连接。

        limit_conn perserver 100:对应的key是 $server_name,表示虚拟主机(server) 同时能处理并发连接的总数。

3. 网关限流

        令牌桶算法:

        yml配置文件中,微服务路由设置添加局部过滤器RequestRateLimiter。

key-resolver :定义限流对象( ip 、路径、参数),需代码实现,使用spel表达式获取。

replenishRate :令牌桶每秒填充平均速率。

urstCapacity :令牌桶总容量。

三、面试题

面试官:你们项目中有没有做过限流 ? 怎么做的 ?

候选人:

我当时做的xx项目,采用就是微服务的架构,因为xx因为,应该会有突发流量,最大QPS可以达到2000,但是服务支撑不住,我们项目都通过压测最多可以支撑1200QPS。因为我们平时的QPS也就不到100,为了解决这些突发流量,所以采用了限流。

【版本1】

我们当时采用的nginx限流操作,nginx使用的漏桶算法来实现过滤,让请求以固定的速率处理请求,可以应对突发流量,我们控制的速率是按照ip进行限流,限制的流量是每秒20。

【版本2】

我们当时采用的是spring cloud gateway中支持局部过滤器RequestRateLimiter来做限流,使用的是令牌桶算法,可以根据ip或路径进行限流,可以设置每秒填充平均速率,和令牌桶总容量。

面试官:限流常见的算法有哪些呢?

候选人:

比较常见的限流算法有漏桶算法和令牌桶算法。

漏桶算法是把请求存入到桶中,以固定速率从桶中流出,可以让我们的服务做到绝对的平均,起到很好的限流效果。

令牌桶算法在桶中存储的是令牌,按照一定的速率生成令牌,每个请求都要先申请令牌,申请到令牌以后才能正常请求,也可以起到很好的限流作用。

它们的区别是,漏桶和令牌桶都可以处理突发流量,其中漏桶可以做到绝对的平滑,令牌桶有可能会产生突发大量请求的情况,一般nginx限流采用的漏桶,spring cloud gateway中可以支持令牌桶算法。

http://www.lryc.cn/news/306865.html

相关文章:

  • react脚手架
  • 【Vue3】插槽使用和animate使用
  • HarmonyOS—低代码开发Demo示例
  • Spring体系下解决请求统一加解密之ResponseBodyAdvice和RequestBodyAdvice
  • C# 经典:ref 和 out 的区别详解
  • Linux 系统添加虚拟内存的方法
  • PHP 函数四
  • 【Android】反编译APK及重新打包
  • 下载huggingface数据集到本地并读取.arrow文件遇到的问题
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • 【Web】关于jQuery萌新必须要知道的那些基础知识
  • 第 1 章 微信小程序与云开发从入门到实践从零开始做小程序——开发认识微信小程序
  • 数据隐私安全趋势
  • 学习磁盘管理
  • C语言从入门到精通(一) - C语言开发神器CLion
  • 【办公类-16-10-02】“2023下学期 6个中班 自主游戏观察记录(python 排班表系列)
  • SpringBooot之RestTemplate接口返回多层泛型导致java.util.LinkedHashMap cannot be cast to异常
  • 【新三板年报文本分析】第二辑:从pdf链接的列表中批量下载年报文件
  • Jessibuca 插件播放直播流视频
  • 【Docker】03 容器操作
  • 【HarmonyOS】鸿蒙开发之Stage模型-基本概念——第4.1章
  • 什么是芯片委外管理系统? 及其主要作用
  • 【实战-08】 flink自定义Map中的变量的行为
  • Docker Volume
  • 开源计算机视觉库OpenCV常用的API介绍
  • pytorch -- torch.nn下的常用损失函数
  • daydayEXP: 支持自定义Poc文件的图形化漏洞利用工具
  • 无法访问云服务器上部署的Docker容器(二)
  • 在Pycharm中运行Django项目如何指定运行的端口
  • Android将 ViewBinding封装到BaseActivity基类中(Java版)