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 代码改了什么。)

相关推荐
向往着的青绿色30 分钟前
雷池(SafeLine)社区版免费部署教程|从环境检查到防护实操全流程
网络·计算机网络·nginx·网络安全·容器·网络攻击模型·信息与通信
脆皮的饭桶4 小时前
给负载均衡做高可用的工具Keepalived
运维·服务器·负载均衡
困惑阿三5 小时前
全栈服务器运维终极备忘录
运维·服务器·nginx·pm2
PascalMing6 小时前
告别 Nginx!ASP.NET Core 实现多域名 Vue 静态服务与代理转发
vue.js·nginx·asp.net
深念Y6 小时前
Nginx和Spring Cloud Gateway
运维·服务器·网络·网关·nginx·spring cloud·微服务
困惑阿三6 小时前
全栈部署排雷手册:从 405 报错到飞书推送成功
服务器·前端·后端·nginx·阿里云·node.js·飞书
yy552715 小时前
Nginx 性能优化与监控
运维·nginx·性能优化
qq_172805591 天前
腾讯云WordPress遭遇Nginx 502问题排查与解决方案
nginx·腾讯云
李长渊哦1 天前
Nginx 反向代理实战:解决 IPv6 报错与跨网段访问指南
运维·nginx
小二·1 天前
HTTPS全链路解析:从证书申请到Nginx配置(含国密SM2实战)|网络安全
nginx·web安全·https