使用 nginx 代理多个基于龙卷风的进程是否有意义,它们都是基于非阻塞 I/O 的?

Does it make sense to proxy multiple tornado-based processes with nginx, where both of them are non-blocking I/O based?

我在网上找到了几篇解释如何使用 nginx 代理多个 tornado 进程(使用 supervisord 之类的)的文章,但无法理解他们使用 tornado 作为后端服务器框架的原因。

据我了解,tornado 和 nginx 都是基于非阻塞 I/O 的,所以如果你想要非阻塞的好处 I/O,其中一个还不够吗?是否有理由为前端和后端选择基于非阻塞 I/O 的服务器?

是的,运行 多个龙卷风进程并代理所有进程是有意义的。原因是 GIL:每个 python 进程只能使用一个内核,因此要使用一台机器上的所有内核,您必须 运行 多个进程。

有很多方法可以 运行 和管理多个 Tornado 进程,并不是所有的方法都需要像 nginx 这样的负载均衡器,但这是推荐的配置,因为它允许重新启动每个进程独立进行零停机更新。

非阻塞的好处 I/O 适用于每个级别。使用 nginx 作为负载均衡器确实会略微降低您在后端使用 Tornado 时看到的好处,但好处仍然存在,特别是对于使用长轮询或 websockets 的站点。