【问题标题】:Why run many webservers instances per node?为什么每个节点运行许多网络服务器实例?
【发布时间】:2012-02-05 21:07:29
【问题描述】:
我经常看到(Rails | Java | PHP | Node.js | nginx | etc..)的设置,其中有许多网络服务器软件实例(nginx、apache、mongrel,没关系)运行每个服务器并提供相同的应用程序,而不是单个“巨大”实例。
为什么要选择这种方法?我不清楚为什么为同一应用程序服务的许多较小实例可能比一个调整为使用最大可用内存和线程的实例更好。
为了清楚起见,我经常看到像 "...我们有 10 台服务器,每个服务器运行 20 个 实例" 之类的语句。为什么不是“10 个服务器,每个运行 1 个 实例”?
【问题讨论】:
标签:
deployment
nginx
webserver
【解决方案1】:
只有当它是单线程的(如 node.js 或 mongrel)以利用多个 CPU 内核时,运行多个网络服务器实例才有意义。
【解决方案2】:
我想补充一下 Steve 的出色答复,即基于事件的多线程服务器结合了每个线程能够处理许多请求的好处 - 同时能够使用所有可用的 CPU 内核系统。
除了 CPU 内核之外,拥有一个程序实例而不是多个程序实例可以节省内存(重复的代码和数据)和 CPU 缓存,避免不断被丢弃。