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 服务器普遍内存偏高是正常现象 性能测试数据 以下是详细的性能测试数据。
阅读全文