【个人博客搭建】(16)速率限制

2024-05-01 05:36

本文主要是介绍【个人博客搭建】(16)速率限制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

速率限制是一种防止操作频率超过既定限制的技术手段,它的主要作用是保护系统资源和服务的稳定性。具体如下:

  • 保护系统资源:通过限制客户端在特定时间内可以发起的请求数量,速率限制确保了系统资源不会被过度消耗。这对于维护系统的长期稳定性和可靠性至关重要。
  • 防御恶意行为:速率限制能够减缓或阻止恶意用户对系统进行拒绝服务(DoS)攻击,这种攻击通常是通过发送大量请求来耗尽系统资源,导致合法用户无法访问服务。
  • 提高服务质量:对于公开的API或Web服务,速率限制可以防止单个用户占用过多资源,从而确保所有用户都能获得公平的服务体验。
  • 防止滥用:速率限制可以防止用户进行潜在的滥用行为,如暴力破解密码攻击,通过限制对特定URI的访问频率,可以有效减缓这类攻击的速度和成功率。
  • 流量管理:在一些网络设备和软件中,速率限制也被用作流量管理的工具,以确保网络流量的平稳和合理分配。

综上所述,速率限制在现代网络系统中发挥着重要作用,它不仅保护了系统免受过载的风险,还提供了一种机制来平衡和公平地分配资源。

1、引入命名空间。(不用下载其他包,net8自带,net6就需要AspNetCoreRateLimit,现在查看也可以看到还没有net8版本的依赖)

using Microsoft.AspNetCore.RateLimiting;
using System.Threading.RateLimiting;

2、配置文件。

        这里我同之前数据库DBS配置一样,使用的数组,方便后续拓展其他类型

  /* 速率限制配置 */"MyRateLimit": [{"PolicyName": "fixed", //策略 AddFixedWindowLimiter (目前代码配置也只使用这个)"PermitLimit": 10, //请求上限"Window": 1, //每多少秒"QueueLimit": 2}]

3、创建模型

public class MyRateLimitConfig
{/// <summary>/// 策略名称/// </summary>public string PolicyName { get; set; }/// <summary>/// 请求上限/// </summary>public int PermitLimit { get; set; }/// <summary>/// 每多少秒的值/// </summary>public int Window { get; set; }/// <summary>/// 最多允许有多少个请求排队等待处理/// </summary>public int QueueLimit { get; set; }/// <summary>/// 该类在json配置文件中的名称/// </summary>public static string MyRateLimit = "MyRateLimit";
}

4、读取配置信息

List<MyRateLimitConfig> myRateLimitList = AppSettings.app<MyRateLimitConfig>(MyRateLimitConfig.MyRateLimit).ToList();
var myRateLimit = myRateLimitList.FirstOrDefault();

5、核心代码

//AddFixedWindowLimiter 方法使用固定的时间窗口来限制请求。 当时间窗口过期时,会启动一个新的时间窗口,并重置请求限制。
builder.Services.AddRateLimiter(_ => _.AddFixedWindowLimiter(policyName: "fixed", options =>{options.PermitLimit = myRateLimit.PermitLimit;options.Window = TimeSpan.FromSeconds(myRateLimit.Window);options.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;options.QueueLimit = myRateLimit.QueueLimit;}));

app.UseRateLimiter();

6、使用

        可以使用在控制器上边,也可以加在action接口上。或者默认全部接口都带入

        这里我们在接口登录上边使用

/// <summary>
/// 登录
/// </summary>
/// <param name="para">入参</param>
/// <returns></returns>
[ApiVersionCustomRoute("Login", SwaggerDocSettings.ApiVersions.v1)]
[EnableRateLimiting("fixed")] //速率限制特性
[HttpPost]
public async Task<ApiResult> GetUser(LoginUserParameters para)

7、测试

        这里我们使用apipost的一键压测功能测试

        7.1、不使用:

                看下图,我们的所有请求都是可以通过的。

        7.2、使用:

        看下图。只成功运行了100条数据。这也就是我们前边配置文件中所设置的1秒10条。这里一共10秒,所以也就是10*10 =100。需要更具体的可以在apipost上开启日志记录进行查看。

8、其他

        8.1、本文参考官方:ASP.NET Core 中的速率限制中间件 | Microsoft Learn

        8.2、这里只使用了其中一种方案,还有几种可以自行拓展。

        8.3、之前查询资料的时候也看到了些其他方案,自建限流,使用特性标注 。(主要逻辑就是使用缓存存储ip地址的访问次数,配置文件配置每秒上限)。

9、推荐阅读

【个人博客搭建】(15)Redis缓存使用-CSDN博客

这篇关于【个人博客搭建】(16)速率限制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/950827

相关文章

Mycat搭建分库分表方式

《Mycat搭建分库分表方式》文章介绍了如何使用分库分表架构来解决单表数据量过大带来的性能和存储容量限制的问题,通过在一对主从复制节点上配置数据源,并使用分片算法将数据分配到不同的数据库表中,可以有效... 目录分库分表解决的问题分库分表架构添加数据验证结果 总结分库分表解决的问题单表数据量过大带来的性能

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

SpringBoot实现基于URL和IP的访问频率限制

《SpringBoot实现基于URL和IP的访问频率限制》在现代Web应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段,为了保护系统资源,需要对接口的访问频率进行限制,下面我们就来看看如何使用... 目录1. 引言2. 项目依赖3. 配置 Redis4. 创建拦截器5. 注册拦截器6. 创建控制器8.

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

Linux限制ip访问的解决方案

《Linux限制ip访问的解决方案》为了修复安全扫描中发现的漏洞,我们需要对某些服务设置访问限制,具体来说,就是要确保只有指定的内部IP地址能够访问这些服务,所以本文给大家介绍了Linux限制ip访问... 目录背景:解决方案:使用Firewalld防火墙规则验证方法深度了解防火墙逻辑应用场景与扩展背景:

如何提高Redis服务器的最大打开文件数限制

《如何提高Redis服务器的最大打开文件数限制》文章讨论了如何提高Redis服务器的最大打开文件数限制,以支持高并发服务,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录如何提高Redis服务器的最大打开文件数限制问题诊断解决步骤1. 修改系统级别的限制2. 为Redis进程特别设置限制

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

poj 2135 有流量限制的最小费用最大流

题意: 农场里有n块地,其中约翰的家在1号地,二n号地有个很大的仓库。 农场有M条道路(双向),道路i连接着ai号地和bi号地,长度为ci。 约翰希望按照从家里出发,经过若干块地后到达仓库,然后再返回家中的顺序带朋友参观。 如果要求往返不能经过同一条路两次,求参观路线总长度的最小值。 解析: 如果只考虑去或者回的情况,问题只不过是无向图中两点之间的最短路问题。 但是现在要去要回