我正在运行一个繁重的实时更新网站。每个用户所需的资源量相当高,我举个例子。
设置
每次访问
应用程序是 php/mysql 所以每次访问都会加载静态和动态内容。
资源:apache、php、mysql
每一秒 (不超过一秒就太长了)
网站需要实时更新,所以每一秒都会有一个 ajax 调用来更新网站。
资源:jQuery、apache、php、mysql
单个用户的平均消费 (花费一分钟并访问了 3 个页面)
- Apache:+/- 63 个请求/响应,提供静态和动态内容(img、css、js、html)
- php:+/- 63 个请求/响应
- mysql:+/- 63 个请求/响应
- jquery:+/- 60 个请求/响应
优化
我想优化这个过程,但我想也许最后还是一样。
在实施和测试之前(这将需要数周时间),我想从你们那里得到一些第二意见。
每次访问
我都想从 nginx 在前面开始,并作为代理来传递静态内容。
资源:
- 动态:apache、php、mysql
- 静态:nginx
这将大量分散 apache 的负载。
每秒
对于每秒加载的脚本,我想在前面设置带有 nginx 的 Node.js 服务器端 javascript。
我想将它设置为 jquery 每分钟发出一个请求,并且 node.js 每秒将数据流式传输到客户端。资源:jQuery、nginx、node.js、mysql
单个用户的平均消费 (花费一分钟并访问了 3 个页面)
- Nginx:4 个请求/响应,主要服务于静态内容(img,css,js)
- Apache:3 只请求页面
- php: 3 只请求页面
- node.js:1 个请求 / 60 个响应
- jquery:1 个请求 / 60 个响应
- mysql:63 个请求/响应
问题
正如您在优化中看到的,来自 Apache 和 PHP 的负载被提升并放在 nginx 和 node.js 上。这些以轻量级和良好的性能而闻名。
但我有疑问,因为内存中还有 2 个额外加载的程序,它们会消耗 cpu。
所以最好少一些程序来完成这项工作,或者更多。在我花费大量时间进行设置之前,我想知道这是否值得。
请注意,同一可执行文件或共享库的多个副本共享其代码段。这意味着即使您执行 50 次 php,php 可执行文件也只会从磁盘读取一次,并且只会出现在内存中一次。每次执行都有自己的数据段,但无论您如何将数据分布在多个程序中,这都必须发生。
因此,与许多优化问题一样,答案是“视情况而定”。找出您的具体情况的最简单方法是使用您正在考虑的中等到重负载下的配置运行几个基准测试,并比较总 CPU/内存/磁盘/网络负载。
这里有几个技巧可以帮助你。