asyncio重构Flask接口:请求耗时从2.1秒降至0.4秒
我负责的报表服务中,一个聚合三个外部API的接口在压测时P99延迟飙到2.1秒,TPS只有80。在Python 3.10.12环境下,我用asyncio + aiohttp替换了原本基于requests的串行调用,配合信号量限流和超时重试机制,将P99降到0.4秒,TPS提升到320。本文记录了完整的重构过程,包括协程设计、事件循环监控、以及一个差点让我放弃的SSL坑。

主要整理独立开发与创业相关的学习笔记与工程经验,内容覆盖代码实现与工程实践、性能优化。不追求堆砌概念,只记录验证过的经验,希望把复杂问题讲清楚、把实践步骤写完整。
我负责的报表服务中,一个聚合三个外部API的接口在压测时P99延迟飙到2.1秒,TPS只有80。在Python 3.10.12环境下,我用asyncio + aiohttp替换了原本基于requests的串行调用,配合信号量限流和超时重试机制,将P99降到0.4秒,TPS提升到320。本文记录了完整的重构过程,包括协程设计、事件循环监控、以及一个差点让我放弃的SSL坑。
一个内部报表API在QPS 50时P95延迟飙至3.2秒,数据库CPU被打满。本文记录使用py-spy、cProfile和慢查询日志定位瓶颈的全过程:发现N+1查询和重复计算是元凶,随后通过SQLAlchemy 2.0的selectinload优化关联加载、引入Redis 7.0二级缓存和LRU本地缓存,最终将P95延迟从3287ms降至89ms,DB CPU占用从97%降至12%。文中含完整代码
在构建一个支持亿级图片向量检索的推荐系统时,我深入对比了Milvus 2.3.0和Qdrant 1.7.3。通过实测部署、索引构建、查询延迟及资源占用,发现Milvus在百万级数据下表现稳定但资源开销高,Qdrant在十万级小集群中延迟更低且内存控制更好。本文记录了完整的部署步骤、性能测试代码和关键参数调优过程,最终给出基于数据规模的选型建议。