Django不同服务器和部署方式,哪种性能最优化?
摘要:前言 最近我花了很多时间折腾 DjangoStarter。 上次说到把服务器换成了 Rust 开发的 Granian 虽然是把 Nginx 容器去掉了,方便了,但性能还是不太满意。 索性对大部分能用的服务器来拿来挨个尝试,同时对代码进行优化
前言
最近我花了很多时间折腾 DjangoStarter。
上次说到把服务器换成了 Rust 开发的 Granian
虽然是把 Nginx 容器去掉了,方便了,但性能还是不太满意。
索性对大部分能用的服务器来拿来挨个尝试,同时对代码进行优化。
经过这几天,花费大量时间进行环境配置、代码修改、性能测试,最后我总结出 DjangoStarter 框架搭配不同的服务器的性能表现。
PS:现在 AI 的流行让大部分介绍基础的技术文章失去了意义,我现在写文章也基本是当成笔记在用了,而且也尽量避免写很水的基础介绍,意义不大😅
大家不爱看的代码和详细数据部分我放在底下。
测试环境
本次测试的项目部署在腾讯云2C2G的小水管服务器上,感觉服务器性能严重拖累了应用性能哈哈🤣
而且我还发现一个事情,腾讯云似乎偷偷摸摸在高峰期(如下午)把服务器性能降低,下午和凌晨测试的结果有很大差异。
本次参与测试的wsgi/asgi服务器有 daphne, granian, gunicorn, uwsgi, uvicorn, hypercorn 基本涵盖了 python 生态的大部分服务器了~
本次使用 wrk 作为性能测试功能,所有接口都使用 -t4 -c200 -d30s 的测试参数。
性能测试结论
RPS 排名
排名
server
req/sec
接口
🥇 1
uWSGI + WSGI
1206
WSGI
🥈 2
Gunicorn + WSGI
740
WSGI
🥉 3
Granian + ASGI
220
ASGI
4
Daphne + ASGI
190
ASGI
5
Uvicorn + ASGI
181
ASGI
6
Hypercorn + ASGI
168
ASGI
结论:
WSGI 整体远快于 ASGI
这是预期结果,Django 的内部原生就是 WSGI,同步路由不需要额外的 async 转换。
uWSGI 再次证明自己是 WSGI 性能之王
uWSGI 的 C 实现、成熟的 worker 管理、内存利用优化都让它在纯 WSGI 场景无敌。
内存占用对比
排名
server
内存
🥇 1
uWSGI
58M(极低)
2
Granian
170M
3
Daphne
175M
4
Hypercorn
300M
5
Gunicorn+WSGI
430M
6
Uvicorn
500M(最高)
结论:
uWSGI 不仅最快,还最省内存
Uvicorn 内存最高(Python 单 worker overhead 明显)
ASGI 服务器普遍内存偏高是正常现象
性能测试数据
以下是详细的性能测试数据。
