5

我们的网站需要实时更新,我们正在考虑各种彗星/长轮询解决方案。经过研究,我们决定使用 nginx 作为 4 个龙卷风实例(托管在 Amazon EC2 上)的反向代理。我们目前使用的是传统的 LAMP 堆栈,并且已经用 PHP 编写了大量代码。我们愿意将我们的 PHP 代码转换为 Python 以更好地支持此解决方案。以下是我的问题:

  1. 假设一个四核处理器,nginx 可以与 4 个 tornado 实例在同一台服务器上运行,还是建议运行两台单独的服务器:一台用于 nginx,一台用于 4 个 tornado 进程?

  2. 在 Nginx 前面使用 HAProxy 有什么好处吗?Nginx 本身不能很好地处理负载平衡吗?

  3. 根据我的研究,Nginx 似乎没有一个很好的 URL 重定向模块。是否首选使用 Redis 进行重定向?如果是这样,Redis 应该在 Nginx 前面还是后面?

  4. 我们的大部分应用程序代码不会参与实时更新。此代码包含多个数据库查询和文件系统读取,因此它显然不适合非阻塞应用程序服务器。根据我的研究,我了解到阻塞问题可以通过拥有多个 Tornado 实例来缓解,而其他人建议使用单独的应用服务器(例如 Gunicorn/Django/Flask)来阻塞调用。使用非阻塞服务器时处理阻塞调用的最佳方法是什么?

  5. 将我们的代码从 PHP 转换为 Python 将是一个漫长的过程。在 Nginx 后面同时运行 Apache/PHP 和 Tornado 是否可以接受,或者我们应该坚持使用语言(使用 gunicorn/django/flask 的龙卷风或单独使用龙卷风)?

4

1 回答 1

6

我将逐点进行:

  1. 是的。在一台服务器上运行tornado和nginx是可​​以的。您也可以使用 nginx 作为龙卷风的反向代理。

  2. 如果您有多个服务器实例,Haproxy 会给您带来好处。此外,它还允许您将 websockets 直接代理到龙卷风。

  3. 实际上,nginx 可以用于重定向,没有问题。我还没有听说过使用 redis 进行重定向——它是键/值存储……你的意思可能是别的吗?

  4. 同样,您可以在 django 中编写阻塞部分,在 tornado 中编写非阻塞部分。龙卷风还有一些用于数据库查询的非阻塞库。不确定您是否需要 django 的强大功能。

  5. 是的,在 nginx 后面运行 apache 就可以了。很多项目在 apache 前面使用 nginx 来提供静态文件。

实际上问题是非常基本的 - 也可以回答。如果您愿意,我可以更详细地说明任何一点。

于 2012-11-09T08:53:13.787 回答