限流定义、算法、实施方案

限流定义

  1、  时间 , 基于某段时间或某个时间点,即:时间窗口

   2、资源: 对可用资源进行限制: QPS/连接数/传输速率/黑白名单等

分布式环境下,主流限流方案:
网关层限流:流量入口Nginx/Gateway/Zuul

中间件限流:如利用redis过期特性,每秒10个请求,结合lua进行脚本编程

限流组件:sentinel

限流算法

1、令牌桶

   把令牌放到桶中,拿到令牌的请求被执行,否则丢弃。另,有恒定的速率把令牌放入桶中

2、漏桶

把请求放到桶中,以恒定的速率漏出请求。

优点:不会有突发流量,对后台服务输出的访问速率恒定

3、滑动窗口

计数器方案。一定时间内的访问总量。时间窗口越多,限流效果越平滑。

具体的实现限流的手段

---转载

1)Tomcat 使用 maxThreads来实现限流。

2)Nginx的limit_req_zone和 burst来实现速率限流。

3)Nginx的limit_conn_zone和 limit_conn两个指令控制并发连接的总数。

4)时间窗口算法借助 Redis的有序集合可以实现。

        限流之redis 有序集合(zset)实现滑动窗口_redistemplate zadd-CSDN博客

5)漏桶算法可以使用Redis-Cell来实现。

6)令牌算法可以解决Google的guava包来实现。

需要注意的是借助Redis实现的限流方案可用于分布式系统,而guava实现的限流只能应用于单机环境。如果你觉得服务器端限流麻烦,可以在不改任何代码的情况下直接使用容器限流(Nginx或Tomcat),但前提是能满足项目中的业务需求。

Tomcat限流

Tomcat 8.5 版本的最大线程数在 conf/server.xml 配置中,maxThreads 就是 Tomcat 的最大线程数,当请求的并发大于此值(maxThreads)时,请求就会排队执行,这样就完成了限流的目的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/24636.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web 前端开发培训:深入探索与实战应用

web 前端开发培训:深入探索与实战应用 在数字化时代,Web前端开发已成为互联网行业的热门职业之一。然而,要想成为一名优秀的Web前端开发者,不仅需要掌握扎实的技术基础,还需要具备丰富的实战经验和创新思维。本文将从…

点云库tops(point cloud library)

pcl GitHub - PointCloudLibrary/pcl: Point Cloud Library (PCL) GitHub - HuangCongQing/pcl-learning: 🔥PCL(Point Cloud Library)点云库学习记录 draco GitHub - google/draco: Draco is a library for compressing and decompress…

固定数量点云采样算法

pcl::random_sample 使用案例 算法原理 /** \brief b RandomSample applies a random sampling with uniform probability.* Based off Algorithm A from the paper "Faster Methods for Random Sampling"* by Jeffrey Scott Vitter. The algorithm runs in O(N) an…

深入理解Python:面向对象编程与实践

深入理解Python:面向对象编程与实践 Python是一种功能强大且灵活的编程语言,广泛应用于Web开发、数据分析、人工智能等领域。本文将深入探讨Python中的面向对象编程(OOP)概念,并通过实际代码示例展示其应用。 目录 面向对象编程概述类与对象继承与多态封装与私有化类与对…

Unity2D游戏制作入门 | 12(之人物受伤和死亡的逻辑动画)

上期链接:Unity2D游戏制作入门 | 11(之人物属性及伤害计算)-CSDN博客 上期我们聊到了人物的自身属性和受伤时的计算,我们先给人物和野猪挂上属性和攻击属性的代码,然后通过触发器触发受伤的事件。物体(人物也好敌人也行&#xff…

思考、学习、创造、越来越有趣

程序员应该有什么职业素养? 对于程序员而言,把复杂的事情变简单是最重要的能力! 方向一:专业精神 程序的本质是算法,无论复杂或不复杂;程序员就是帮助使用者把重复的工作交给代码。所以程序员最本质的能力…

2024 IDEA最新永久使用码教程(2099版)

本篇文章我就来分享一下2024年当前最新版 IntelliJ IDEA 最新注册码,教程如下,可免费永久,亲测有效,适合Windows和Mac。 本教程适用于 J B 全系列产品,包括 Pycharm、IDEA、WebStorm、Phpstorm、Datagrip、RubyMine、…

Vue基础知识:插槽——默认插槽,插槽的后备内容,具名插槽,作用域插槽的认识与使用。(slot,#default,row的认识)

1.插槽的基本认识: 作用:让组件内部的一些结构支持自定义 插槽的分类: 1.默认插槽(组件内只能定制一处结构) 2.具名插槽(组件内可以定制多次结构) 简单而言:就是你希望封装一个…

09-数组的含义以及零长数组变长数组与多维数组

09-数组的含义以及零长数组变长数组与多维数组 文章目录 09-数组的含义以及零长数组变长数组与多维数组一、数组名的含义1.1 表示整个数组的首地址1.2 表示整个数组首元素的首地址 二、数组下标字符串常量 三、零长数组3.1 示例 四、变长数组4.1 示例 五、多维数组5.1 定义与初…

nodejs---fs模块,文件读写操作详解,自定义一个文件写入方法

fs模块导入 Node.js 同时支持 CommonJS 和 ES 模块系统(自 Node.js v12 以来) // 两种模块导入方式 import * as fs from fs;// Es6:这种方式需要在package.json中配置"type": "module" const fs require(fs);// commonJs:如果你…

golang协程工作池处理多任务示例

1. 工作方法实现 // 工作线程 // id : 线程号 // jobs : 任务通道 (chan) // results: 完成结果通道 (chan) func worker(id int, jobs <-chan int, results chan<- int) {//遍历任务for j : range jobs {fmt.Println("工作协程: ", id, "启动任务: &quo…

oracle中如何查询特定日期?

1. select last_day(to_date(20230101,YYYYMMDD)) from dual; select last_day(to_date(V_END_DATE,YYYYMMDD)) from dual; --查询任意一天 当月的最后一天 2. select to_char(to_date(20230101,YYYYMMDD)-1,YYYYMMDD) INTO V_START_DATE FROM DUAL; select to_char(to_dat…

vscode输出控制台中文显示乱码最有效解决办法

当VSCode的输出控制台中文显示乱码时&#xff0c;一个有效的解决办法是通过设置环境变量来确保编码的正确性。以下是解决方式&#xff1a; 首先&#xff0c;设置环境变量以修正乱码问题&#xff1a; 如果上述方法没有解决乱码问题&#xff0c;请继续以下步骤&#xff1a; 右键…

技术革命的十年:计算机、互联网、大数据、云计算与AI

近10年来&#xff0c;计算机、互联网、大数据、云计算和人工智能等技术领域发展迅速&#xff0c;带来了巨大的变革和创新。以下是各个领域的发展历史、现状、问题瓶颈、未来趋势以及可能的奇点。 计算机技术&#xff1a; 发展历史&#xff1a; 过去&#xff1a;过去十年间&am…

HTML5表单元素:重塑数据收集的艺术

HTML5为网页表单带来了革命性的变化&#xff0c;不仅增强了用户体验&#xff0c;也为开发者提供了更加强大和灵活的工具来收集和验证数据。本文将深入解析HTML5中新增和改进的表单元素&#xff0c;通过实例展示它们如何提升表单功能和交互性。 1. 新增表单元素 <input>…

SVN中trunk,branch,tag

SVN trunk(主线) branch(分支) tag(标记) 用法详解和详细操作步骤_svn 分支-CSDN博客 场景: 项目的1.0版本已经完成开发,测试,并上线了. 接到了新需求,要修改多个文件的代码. 你写了一段时间的时候,用户或测试人员反馈, 1.0版本有重大bug要修复,修复好后立刻上线. 此时应该怎么…

RocketMQ的安装

首先到RocketMQ官网下载页面下载 | RocketMQ (apache.org)&#xff0c;本机解压缩&#xff0c;作者在这里用的是最新的5.2.0版本。按照如下步骤安装。 1、环境变量配置rocket mq地址 ROCKETMQ_HOME D:\rocketmq-all-5.2.0-bin-release 在变量path中添加”%ROCKETMQ_HOME%\bi…

免费数据库同步软件

在信息化日益发展的今天&#xff0c;数据同步成为了企业和个人用户不可或缺的一部分。数据库同步软件作为数据同步的重要工具&#xff0c;能够帮助我们实现不同数据库系统之间的数据复制和同步&#xff0c;确保数据的一致性和完整性。本文将介绍几款免费数据库同步软件&#xf…

ES5/ES6 的继承除了写法以外还有什么区别?

一、主要区别 ES5 的继承实质上是先创建子类的实例对象&#xff0c; 然后再将父类的方法添加 到 this 上&#xff08;Parent.apply(this)&#xff09; . ES6 的继承机制完全不同&#xff0c; 实质上是先创建父类的实例对象 this&#xff08;所以必 须先调用父类的 super()方法…

C#根据反射生成sql语句(Update语句)

今天有人问我Update语句怎么搞&#xff0c;想了一下大致思路就是用特性去标识一下&#xff0c;主键&#xff0c;然后再去用反射的方式拼sql语句。 在C#中&#xff0c;我们可以使用特性&#xff08;Attributes&#xff09;来标识一个类的属性作为该类的主键&#xff08;Primary…