FastAPI + AioRedis 消除线程阻塞实战
在做大模型接口时,最开始用的是同步写法。图快、图简单,写起来顺手,但一压测就立刻暴露问题:只要一个请求慢,整个接口全部卡住。
大模型推理本身就慢,几秒钟甚至十几秒都很正常。同步模式下,一个请求占住一个线程,后面的请求全部排队,用户体验极差,服务器资源也浪费。
全面切换到异步架构,核心就是 FastAPI + AioRedis。
很多人以为异步就是加个 async 那么简单,其实不是。你一旦用了异步,整个链路必须保持异步,任何一个同步阻塞点都会让整个服务退化。
最典型的坑就是 Redis。如果你在异步接口里使用同步的 redis-py,整个事件循环会被卡住,接口瞬间雪崩。
所以必须用 AioRedis。
实际项目里会把 AioRedis 用在三个地方:缓存、限流、队列。
缓存很简单:相同的问题直接返回,不进模型。
限流用来保护模型:单位时间只放多少请求进去。
队列则用来削峰:多余的请求排队,不冲击推理服务。
整个接口从接收请求 → 校验 → 查缓存 → 入队 → 等待结果 → 返回,全部异步非阻塞。单台机器轻松扛住几十并发,模型也不会崩。
在项目里实测,异步架构的吞吐量至少是同步的 5~10 倍。而且资源占用更低、更稳定、更不容易出现线程耗尽。
许可协议:
CC BY 4.0