传播你的服务器负载不仅会消耗更多的资源

我正在运行一个沉重的实时更新网站。 每个用户所需资源的数量是相当高的,生病给你一个例子。

build立

每次访问
应用程序是PHP / MySQL所以每次访问静态和dynamic内容加载。
资源:apache,php,mysql

每一秒 (不超过一秒钟就会太长)
该网站需要实时更新,所以每秒都有一个Ajax调用即时更新网站。
资源:jQuery,apache,php,mysql

单用户平均消费 (花费1分钟,访问3页)

  • Apache:+/- 63请求/响应服务静态和dynamic内容(img,css,js,html)
  • php:+/- 63请求/响应
  • mysql:+/- 63请求/响应
  • jquery:+/- 60个请求/响应

优化

我想优化这个过程,但是我认为最后也许会是一样的。

在实施和testing(这将需要数周)之前,我想从你们那里得到第二个意见。

每次访问
我想首先让nginx在前面,并作为代理来传递静态内容。
的recources:

  • dynamic:apache,php,mysql
  • 静态:nginx

这将在Apache上传播负载很多。

每一秒
对于每秒加载的脚本,我想在前面用nginx设置Node.js服务器端的JavaScript。
我想设置它,jquery发出请求一分钟,并且node.js每秒将数据stream到客户端。 资源:jQuery,nginx,node.js,mysql

单用户平均消费 (花费1分钟,访问3页)

  • Nginx:4个请求/响应主要是静态内容(img,css,js)
  • Apache:3只请求页面
  • PHP:3只请求页面
  • node.js:1个请求/ 60个响应
  • jquery:1个请求/ 60个响应
  • mysql:63个请求/响应

问题

正如您在优化中所看到的,来自Apache和PHP的负载被解除并放在nginx和node.js上。 这些以轻盈的脚印和良好的performance而闻名。

但我有我的疑惑,因为仍然有2个程序额外加载在内存中,他们消耗CPU。

所以有更less的工作,或更多的程序,更好。 在我花很多时间设置这个之前,我想知道这是否值得。

这里有一些提示可以帮助你。

  1. 用tools.pingdom.com检查你的URL,这会给你一个加载时间的概念,什么是最长的。
  2. 再来看一下http://www.webpagetest.org/,这会给你和PingDom大致相同的信息,但是也可以让你看到哪里可以提高性能。
  3. 将所有静态内容(图像,CSS,JavaScript等)移动到CDN。 这将大大帮助你。
  4. 如果您使用jQuery,Scriptaculous等ajax库,我build议使用http://code.google.com/apis/ajaxlibs/将这些库卸载到Google。这也大大帮助了我。
  5. 如果你还没有这样做,我build议保持MySQL从你的webend隔离在不同的单位的性能。
  6. 最后,根据我的经验,对于apache2,我使用worker模块,所以它更多的是基于内存的,而不是处理器的使用,这对我有些帮助。

请注意,同一个可执行文件或共享库的多个副本的代码段共享。 这意味着,即使你执行了50次PHP执行,PHP可执行文件只能从磁盘上读取一次,而且只能在内存中出现一次。 每个执行都有自己的数据段,但无论您如何在多个程序中传播数据,都必须进行。

所以如同许多优化问题一样,答案是“视情况而定”。 找出具体问题的最简单方法是使用中等到重负载下的configuration运行几个基准testing,然后比较总CPU /内存/磁盘/networking负载。