那天晚上,他真的好快!

简介: 那天晚上,他真的好快!

前言


今天啊,我的朋友小绿跟我说,那天晚上有个人好快好快!我急忙问他,怎么回事?有多快!他说,他的资源分发接口被人以很快的速度攻击了。速度达到了 10000qps,这对于他那 0.1C125M 的机器来说简直是小车拉大牛,真费车。


不忍心他承受那么快的速度,出于关心,我决定为他的接口加上限速。这样不但可以承受高压,还不影响正常服务用户,简直舒服。


关于 walrus



walrus 是一个 Redis 的操作库(对 redis-py 的二次封装),使用它可以简单实现数据缓存、全文搜索、频率限制等功能。今天我们就要使用 walrus 的频率限制功能来实现接口的频率限制。这对那些低频接口,一次性接口非常有用。


呆猫


安装 walrus


pip install walrus
复制代码


安装 Redis


官方地址:redis.io/

以下为 windows 版的 Redis 包下载地址


链接:pan.baidu.com/s/1ZRzMaS5e…

提取码:spf0


本文使用 windows 作为演示,Linux 同理。


下载完成后解压后
cd 到 redis 文件夹
在CMD中执行 redis-server.exe redis.windows.conf启动 redis 服务
然后重新打开一个CMD使用 redis-cli.exe -h 127.0.0.1 -p 6379 登录 reids 服务
复制代码


网络异常,图片无法展示
|


未做限速的后端代码


from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
import uvicorn
app = FastAPI()
@app.get('/')
def index():
    return {'status_code': True}
@app.get('/only2')
def api1(request: Request):
    return {'status_code': True, 'data': '不限速!'}
if __name__=='__main__':
    uvicorn.run(app='demo1:app',host='localhost',port=1213,reload=True)
复制代码


以上代码是不限速的,对于only2接口的访问可以无限,存在被并发攻击的风险。对于分发资源的接口来说非常不好。


网络异常,图片无法展示
|


限速后的后端代码


from walrus import Database, RateLimitException
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
import uvicorn
#db = Database(host='localhost',port=6379)
# 默认连接loalhost:6379,所以记得启动本地redis服务哦
db = Database()
rate = db.rate_limit('speedlimit', limit=2, per=60) # 每分钟只能调用2次
app = FastAPI()
@app.exception_handler(RateLimitException)
def parse_rate_litmit_exception(request: Request, exc: RateLimitException):
    msg = {'status_code': False, 'msg': f'别那么快,好不好?我已经记住了你的IP: {request.client.host}'}
    return JSONResponse(status_code=412, content=msg)
@app.get('/')
def index():
    return {'status_code': True}
@app.get('/only2')
@rate.rate_limited(lambda request: request.client.host)
def api2(request: Request):
    return {'status_code': True, 'data': '这个速度可以!'}
if __name__=='__main__':
    uvicorn.run(app='demo:app',host='localhost',port=1212,reload=True)
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


如上,在限速内后端会正常向客户端分发资源。超过限速后后端直接向客户端返回 412 Precondition Failed 错误。通过 walrus 结合 redis 我们可以很简单的实现 api 速率限制。


本文只针对具体问题做简单的演示,生产环境中还请结合实际情况进行合理的选型和开发。希望我的分享能对你有所帮助。

相关文章
|
存储 Windows
怎样格式化硬盘?四种硬盘格式化方法(含详细图文步骤)
这篇内容介绍了硬盘格式化的方法,包括为何要格式化硬盘(如快速清空数据、建立新分区、修复错误、改变文件系统类型)和四种格式化方式:1) 使用文件管理器,2) 通过磁盘管理器,3) 利用分区工具DiskGenius,4) 使用diskpart命令。在执行格式化前,务必备份重要数据,因为格式化会导致数据丢失。
|
关系型数据库 MySQL 数据库
深入探讨MySQL中的幻读现象:原因、影响及解决方案
**导言:** 在数据库领域中,幻读(Phantom Read)是一个常见但容易被忽视的问题。它可能会导致事务的隔离级别无法满足预期,从而引发数据一致性问题。MySQL作为广泛使用的关系型数据库,也不免遇到幻读问题。本文将深入解析MySQL中的幻读现象,探讨其原因、影响以及可能的解决方案。
2798 0
|
3月前
|
缓存 网络协议 定位技术
各平台IP属地为什么显示不一样?用IP查询工具看懂3个核心差异
同一IP在抖音、微博、小红书显示不同属地(如广东/北京/上海),源于各平台使用独立数据库、刷新机制和检测逻辑,无统一标准。IP归属本质是数据映射,非实时定位,差异属正常现象。(239字)
|
4月前
|
人工智能 自然语言处理 搜索推荐
国内大模型Geo优化:“双核四驱”理论赋能AI时代内容突围
AI大模型时代,GEO优化正重塑内容竞争力。Geo专家于磊首创“两大核心+四轮驱动”体系:以“人性化Geo”注入真实经验与情感温度,以“内容交叉验证”构建多源可信权威;辅以E-E-A-T原则、结构化内容、语义关键词及精准引用,助力企业成为AI首选信源。
288 0
|
运维 Kubernetes 负载均衡
教你读懂 高可用/SRE
高可用(HA)与网站可靠性工程(SRE)是保障现代分布式系统稳定运行的核心理念。HA关注系统持续可用的能力,常用“9”的数量衡量可靠性,如99.99%可用性意味着全年仅允许约52分钟宕机。实现手段包括冗余设计、故障转移、负载均衡、限流熔断与数据多活。SRE则通过工程化方法提升系统可靠性,核心在于SLI(服务指标)、SLO(目标值)、SLA(服务协议)的指标体系,结合错误预算、自动化运维、容量规划与事后分析,实现稳定与效率的平衡。二者相辅相成,HA是目标,SRE是路径,共同构建“可测、可控、可优化”的系统稳定性体系。
1281 0
|
存储 资源调度 Java
计算机基础(1)——计算机体系结构和组成
计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。 在过去的几十年里,计算机科学经历了令人瞩目的飞速发展。经历了电子管、晶体管、集成电路的世代发展,体积越来越小、性能越来越强,为人类带来了巨大的便利和变革,下面我们来回顾计算机的发展历程。
4126 5
计算机基础(1)——计算机体系结构和组成
|
C语言
【数据结构】二叉树(c语言)(附源码)
本文介绍了如何使用链式结构实现二叉树的基本功能,包括前序、中序、后序和层序遍历,统计节点个数和树的高度,查找节点,判断是否为完全二叉树,以及销毁二叉树。通过手动创建一棵二叉树,详细讲解了每个功能的实现方法和代码示例,帮助读者深入理解递归和数据结构的应用。
2277 9
|
JSON 前端开发 关系型数据库
如何开发ERP(离散制造-MTO)系统中的销售管理板块(附架构图+流程图+代码参考)
针对离散制造MTO模式,销售管理是业务核心入口,贯穿报价、订单、ATP、排产与交付。本文详解其架构设计、关键流程、数据模型及开发实践,助力企业提升交付准确率与运营效率。
|
机器学习/深度学习 人工智能 算法
解决方案评测:通义万相 AI 绘画创作
通义万相 AI 绘画创作工具在功能、使用体验等方面表现出色,为用户提供了一种便捷、高效的绘画创作方式。虽然存在一些不足之处,但随着技术的不断发展和优化,相信其性能和表现会不断提升。对于艺术家、设计师、创意工作者以及普通爱好者来说,通义万相都是一款值得尝试和探索的 AI 绘画工具。
1927 4
解决方案评测:通义万相 AI 绘画创作
|
存储 固态存储 Java
文件系统使用固态硬盘(SSD)
【10月更文挑战第8天】
814 2

热门文章

最新文章