假设我正在使用 Tornado 运行Web应用程序,并在 Nginx 后面作为 Load Balancer 运行它们。请告诉我某些事情的最佳做法。
1. 如果我在 AWS EC2实例中运行该服务,那么我应该运行多少 NGINX工作进程 x 任何特定实例的 VCPU 数量。假设我在 EC2 实例上运行 2 VCPU ,那么我应该运行多少个工作进程?如果我知道它的一般规则会更好。另外,在什么条件下我应该增加工人数量而不是一般规则?
2。现在,在我将Nginx设置为负载均衡器之后,它归结为我的 Tornado应用程序。那么,在 EC2实例中 x VCPU 的数量,我应该运行多少个Tornado实例?正如文档中所提到的,每个处理器 1个实例很好,但最佳条件是什么?如果是,那么在什么情况下,我应该寻求增加每个处理器的实例数?如果没有,那么最好的规则是什么?
注意:我通过 Supervisord 运行实例作为我的流程管理程序。
3。现在,如果我的应用程序对 MySQL 数据库和 MongooseIM 服务器进行了大量异步调用,所有在同一主机上运行,那么每个处理器的Tornado实例数量是否应该更改?如果是,那么规则是什么?如果没有,那么最佳做法是什么?
答案 0 :(得分:2)
如果您自己在计算机上运行nginx,那么您应该为它提供与CPU相同数量的工作进程。如果您在与Tornado相同的计算机上运行它,那么您可能希望减少它(可能只有一个)。但是这里太高而不是太低会更好,所以如果你不确定使用CPU的数量是否正常。如果您正在使用TLS(特别是使用更强的安全设置)或提供大量静态文件,那么您将需要更多的nginx工作者,如果它只是Tornado的代理,则会更少。
每个CPU的一个Tornado实例是最好的起点。如果您的应用程序对线程执行了很多操作,或者在同一台机器上运行了其他操作,则可能会减少此数字,如果您执行任何没有线程的同步数据库/网络调用,则可能会增加该数字。
只要您的数据库调用是异步的,它们就不会影响您应该运行多少个Tornado进程。