如何做性能优化,从30个并发平均每个2000毫秒 到 300个并发平均每个1xx毫秒?
简单介绍一下做了那些优化:
- 减少log日志的打印
- 减少redis的交互
- 耗时操作的处理
- 大文件信息的存储
- python的缓存机制
- 异步处理非返回操作
01、我们可能会感觉打印一个log不会是耗时操作,但通过唯一变量法发现 打印log也是耗时的,因为要控制在200ms以内,那就是任何耗时的都要深思熟虑,于是减少log的打印
02、当对redis做读取操作时,每次读取都要花费几毫秒,优化:
a、当能确认并必确认这是第一个存储并不需要获取时,就可以减少一次获取,直接存储。
b、要使用redis的缓存池
c、使用redis的通道法
03+04+05、耗时操作一般指:mysql的读取 — I/O操作。当频繁性的使用一个数据时就要想着做缓存处理,缓存也会考虑处理时间
- 方法一:redis缓存
- 方法二:cacheout缓存。可以设置同时设置多个缓存,并且可以设置缓存机制(优先策略),设置有效条目数 以及 设置有效时间, 大多数操作基本和redis一样,简单易懂
- 方法三:DBUtils数据库连接池
06、异步处理非返回操作
一次请求处理中,打印log和发送日志,以及一些I/O是避免不了的,所以我们会用到子线程异步存储,让这些耗时的去一边处理,不影响主线的处理。另加一个小点-如果你的用户请求是有顺序的,那么在存储redis时也可以用一下时间差,但一定要把握好!我这里用的是twisted的threads
- 线程池中的线程可以得到重用,避免了频繁的创建新的线程,同时线程数量也是可控的
- 使用 asyncio 模块实现并发(FastAPI 异步)