我有一个 django 网站,它是 ajax 密集型的,当前在 apache mod_wsgi 上运行,并使用 nginx 作为反向代理。
现在,是保留我当前的设置更好,还是在 tornado 上运行我的 django 站点并使用 nginx 作为反向代理和负载均衡器更好?
我之所以问这个问题,是因为我在某处读到过类似 mod_wsgi 的东西不是为异步设计的。虽然我不太确定这一点,但它让我想到,也许 tornado 和 nginx 对我的设置来说会比较好,因为它是非阻塞的。
我需要你的建议。谢谢。
答案1
Django 位于 WSGI 接口之上,而该接口在定义上是阻塞的。因此,您不会在 Web 应用程序中使用任何异步机制,使用异步 Web 服务器所获得的好处会大大减少。任何好处都更多地与备用服务器轻量级且不承担太多开销有关,而与使用异步无关。要从异步服务器中获得最大收益,您需要放弃 Django 并写入您正在使用的特定异步服务器的异步 API。
还应该强调的是,最初发布的 Tornado 与基于 Apache/mod_wsgi 的 Django 的基准测试存在缺陷。他们声称 Tornado 快 4 倍。对于使用 Tornado API 编写的简单异步 Web 应用程序,与 Django hello world 应用程序相比,这可能是正确的,但如果将其与基本的 WSGI hello world 程序进行比较,性能差异并不大。因此,使用 WSGI 适配器在 Tornado 上运行的 Django 的性能与基于 Apache/mod_wsgi 的 Django 的性能没有太大区别,当我在 MacOS X 上测试它们时,Tornado 实际上慢了一点。
如果您仍然觉得使用更轻量级的服务器会给您带来一些好处或者可能更容易管理,我建议使用 gunicorn 而不是 Tornado。
答案2
我们使用 nginx 作为负载均衡器,uWSGI速度最快的 WSGI 服务器。到目前为止没有问题