Uvicorn的多进程&Nginx的负载均衡 区别

简单来说:Uvicorn 是"单兵作战时的分身",而 Nginx 是"指挥多台坦克的将军"。

在实际生产中,我们通常两个都用。以下是它们的本质区别:


1. 作用范围:单机 vs. 多机

Uvicorn 的"负载均衡":利用多核 CPU

当你在启动 Uvicorn 时使用 --workers 4 参数,它会在同一台服务器上开启 4 个进程。

  • 目的 :利用这台机器的多个 CPU 核心。因为 Python 有 GIL 锁(全局解释器锁),一个进程通常只能用一个核。开 4 个 worker 就能让 4 个核同时干活。
  • 局限:它跑不出这台机器。如果这台机器的 CPU 满了或者断网了,Uvicorn 也没办法。
Nginx 的负载均衡:利用多台服务器

Nginx 站在多台服务器的前面。

  • 目的 :把流量分发到不同的 IP 地址上。
  • 优势:它能跨越物理限制。即使服务器 A 冒烟了,Nginx 也能把请求转给服务器 B。

2. 功能侧重点:执行 vs. 管理

特性 Uvicorn (ASGI Server) Nginx (Reverse Proxy)
主要任务 解释并执行你的 Python 代码。 接收和转发网络流量。
SSL 证书 虽然能做,但不专业且性能一般。 专家。通常在这里统一处理 HTTPS 加密。
静态文件 性能较差(处理图片、JS 慢)。 极快。直接从硬盘读取图片返回,不经过 Python。
缓冲与超时 较弱。 极强。能保护后端不被慢速攻击拖垮。
健康检查 不具备查看其他机器状态的能力。 具备。能发现哪台后端服务器"挂了"并自动跳过。

3. 为什么通常"两个都要用"?(标准架构)

在部署你的 FastAPI 应用时,最专业的做法是套娃式结构:

  1. 最外层:Nginx
    • 负责接收公网的 HTTPS 请求。
    • 把请求分发给后端 10 台服务器的内网 IP。
  2. 中间层:每台服务器里的 Uvicorn (Workers)
    • 每台 4核 8GB 的服务器里,运行 uvicorn --workers 4(或者 5-9 个,通常是 2 * 核心数 + 1)。
    • 这样可以把这台机器的 4 个 CPU 核心全部压榨干净。
  3. 最内层:你的 FastAPI 代码
    • 具体处理业务逻辑。

4. 形象类比

  • FastAPI 代码 :是厨师手里的菜谱。
  • Uvicorn Workers :是这间厨房里的 4 个厨师。他们共用一个厨房(一台服务器),分头炒菜。
  • Nginx :是商场里的前台指引 。他负责把排队的客人们带往 10 家不同的分店(10 台服务器)。

5. 总结

  • 如果你只有 1 台服务器 :你只需要用 Uvicorn 的 --workers 就可以获得不错的性能。
  • 如果你有 多台服务器 :你必须用 Nginx(或其他类似工具)来做入口。
  • 最佳实践:Nginx 挡在最前面,后端每台机器上用 Uvicorn 跑多进程。

思考题:如果你在代码里改了一个 Bug,你是需要重启 Nginx,还是需要重启 Uvicorn?

(答案是:只需要重启每台服务器上的 Uvicorn。Nginx 只是个传声筒,它并不关心你的 Python 代码改了什么。)

相关推荐
骑着蜗牛撵大象32719 小时前
服务下线不再炸:分层关闭、TCP 存活探测与负载均衡排水的落地套路
android·tcp/ip·负载均衡·tcp·高可用·健康检查·优雅关闭
Lvan的前端笔记2 天前
docker:每个前端项目一个 Nginx 容器还是只有一个Nginx容器
前端·nginx·docker
姜鱼问生2 天前
Nginx 缓存命中率监控:从 X-Cache-Status 到实时统计
运维·nginx·缓存
Joy T2 天前
从 Nginx 到 Gateway 再到微服务:一次 AI 请求的完整链路
nginx·微服务·gateway·controller·路由转发·ai service·接口错误排查
小匠石钧知2 天前
07_在k8s集群中安装ingress-nginx
nginx·容器·kubernetes·ingress
螺蛳粉 螺蛳粉2 天前
第五篇:Keepalived + LVS 四层负载均衡高可用实战:DR 模式全流程
运维·负载均衡·lvs·keepalived·高可用
百度一下吧3 天前
Nginx 使用手册:从安装配置到实战部署
运维·nginx
JAVA面经实录9173 天前
Java高级后端 · 全套面试通关手册(Nginx)
java·nginx·面试
积流成海3 天前
一致性哈希原理与实现:分布式系统负载均衡
算法·负载均衡·哈希算法·哈希函数·盘子工具站
lpfasd1235 天前
WinSW在Win7上失败真相-实测与修复
windows·nginx