我正在尝试创建一个相当不寻常的(imo)配置,其中我有:
- nginx
- php-fastcgi
- mysql
- 1000 个独立的 WordPress 安装(使用 WP Super Cache)。每个 WP 安装对应一个单独的子域。
此外,我每小时调用 1000 个 cron 作业,这些作业依次调用 WP 插件(使用 wget),该插件从 API 检索数据并将其发布到相应的博客。
所有这些都在具有 1024MB RAM、4 个共享处理器等的虚拟服务器上运行。服务器运行不佳,尤其是在执行 cron 作业时。Nginx 不断抛出 504 错误,并且网站存在明显的延迟。
我安装 1000 个单独的 WP 是不是疯了?我应该使用 WP-MU 吗?这会有很大帮助吗?(我有一些插件限制,我更喜欢单独安装,但如果需要也可以切换。)
不是有 1000 个唯一的 cron 作业 - 应该调用一个 bash 脚本,然后处理我需要的 1000 个 HTTP 请求吗?这可以按连续顺序而不是按顺序完成吗?
您还有其他优化建议吗?我应该代理 Apache 而不是只使用 nginx 等吗?任何建议都值得感激。
提前致谢
更新:非常感谢您的回复。我将切换到 WP-MU 并重新执行 cron 作业。我目前正在使用 spawn-fcgi,但将切换到 php-fpm。感谢您的建议
答案1
1) 1000 个唯一安装将消除缓存可以为您提供的任何好处。理想情况下,您将运行一个安装(将通过 APC 或类似方式缓存在内存中),并使用一堆不同的数据库。不过,WP-SuperCache 可能会帮助您解决缓存问题,因为它应该将所有内容呈现为静态 HTML 文件。基本上,您希望从每个页面中删除尽可能多的动态内容。
2) 顺序运行所有 1000 个作业可能不是一个好主意(您确定 1000 个请求可以在一小时内完成吗?)。同时,并行运行 1000 个作业也是一个坏主意(您的 Web 服务器能承受每秒 1000 个请求吗?)。我建议采取中间方案。也许您启动 10 个进程,每个进程执行 100 个博客,中间有随机延迟。
3) 如果您可以使用纯 nginx + php-fastcgi,请坚持使用它。Apache 不会以任何方式帮助您。
您使用的是 php-fastcgi (例如:spawn-fcgi) 还是 php-fpm?我建议使用 php-fpm,因为您可以将其设置为在负载较高时生成更多进程。
答案2
devicenull 的所有建议都很好。我的客户也遇到过类似的情况,安装了许多相同的软件。Xcache(类似于 APC)大大提高了性能,但我不得不为缓存提供 4GB 的内存。
使用 WP-Super-Cache,您的绝大部分 Web 请求应该都是纯 HTML/图像,速度非常快。您确定不是您的 1000 个 cronjob 导致了网站总体延迟吗?我认为它们会花上大部分时间才能执行!