多少个 Tornado 实例和多少个 Nginx 工作进程

How many Tornado Instances and How many Nginx Worker Processes

假设我正在 运行使用 Tornado 和 运行将它们放在 Nginx 后面作为一个 负载平衡器 。请告诉我某些事情的最佳实践

1. 如果我 运行 在 AWS EC2 实例 中使用服务,那么有多少 NGINX 工作进程 我应该运行 对于给定的 x 数量的 VCPUs 对于任何特定实例。假设我运行正在 EC2 实例上使用 2 个 VCPU,那么我应该 运行 多少个工作进程?如果我知道它的一般规则会更好。另外,在什么情况下我应该增加工人的数量而不是一般规则?

2. 现在,在我将 Nginx 设置为负载均衡器后,它归结为我的 Tornado 应用程序。因此,在 EC2 实例 [=44] 中,给定 xVCPU 我应该 运行 多少个 Tornado 实例=]?如文档中所述,每个处理器 1 个实例 很好,但这是 最佳条件吗? 如果是,那么在什么情况下,我应该增加每个处理器的实例数吗?如果不是,那么最好的规则是什么?

注意 : 我正在 运行 通过 Supervisord 将实例作为我的进程管理程序。

3. 现在,如果我的应用程序对 MySQL[= 进行大量 async 调用44=] 数据库和 MongooseIM 服务器,都 运行ning 在同一台主机上,那么每个处理器的 Tornado 实例数是否应该更改?如果是,那么规则是什么?如果不是,那么最佳做法是什么?

  1. 如果您 运行 单独在一台机器上安装 nginx,那么您应该给它提供与 CPU 一样多的工作进程。如果您 运行 将它安装在与 Tornado 相同的机器上,那么您可能希望减少它的数量(也许只是一个)。但是在这里过高总比过低好,所以如果你不确定,使用 CPU 的数量是可以的。如果您使用 TLS(尤其是具有更强的安全设置)或提供大量静态文件,您将需要更多的 nginx 工作人员,如果它只是 Tornado 的代理,则需要更少的工作人员。

  2. 每个 CPU 一个 Tornado 实例是最好的起点。如果您的应用程序对线程做了很多事情,或者如果同一台机器上有其他东西 运行ning,您可能会减少这个数字,如果您在没有线程的情况下进行任何同步 database/network 调用,您可能会增加它。

  3. 只要您的数据库调用是异步的,它们就不会影响您应该 运行 的 Tornado 进程数。