WordPress可扩展性如何?


34

有了新的WordPress及其新功能,似乎WordPress不仅具有简单的博客引擎功能。但是,每天说10k-> 100k用户使用WordPress的缩放效果如何?

有那么多用户,其中很大一部分将是拥有一个良好的缓存策略,但是WordPress的开发水平可以提供帮助,使这一过程变得简单,并为您提供所需的控制权。Fx能够缓存页面的一部分并仅呈现用户自定义的部分,支持主/从数据库设置以及类似的东西吗?

Answers:


37

显然,快速Web服务器提供的静态文件无法缩放,而且任何必须弄清楚要加载什么然后再加载的CMS都无法正常运行,无论是WordPress还是其他方式。问题之一是每个URL请求所需的数据库查询的数量,以及我之前2年专门与Drupal一起工作的经验以及现在与WordPress一起工作2年以上的经验是,WordPress在该部门中要好得多。

也就是说,几乎没有任何功能可以“开箱即用”扩展;这就是随着可扩展性需求的增长您能做什么?

“大量流量”的低端,有出色的缓存插件与廉价CDN的集成,您可以在无IT预算和低托管预算的情况下做得很好。以下是一些其他要检查的问题和答案:

可以通过性能分析来确定性能瓶颈

一旦发现瓶颈,您就可以使用Transients API之类的工具进行本地化优化。该问答提供了可以使用Transients API进行优化的示例,并说明了如何:

如果您真的想拔出大手笔,则可以配置MemcachedHyperDBNginx和/或更多功能来加快处理速度(似乎后者实际上正在演变为从WordPress获得惊人的可扩展性的方式):

最后,出现了专门针对性能的新兴的以WordPress为中心的虚拟主机,例如WP EngineZippyKid等:

因此好消息是所有规模都非常好 ; 从技术的复杂性和成本的漫长而漫长的低端开始,随着流量的显着增长而增加。从WordPress开始,它会很棒。如果流量确实在增长,并且您将其合理地货币化,您会发现按需扩展具有很大的成本效益。

至少是IMO。:)


感谢您提供如此详尽的回应。我想知道WordPress API如何与之一起使用,如何缓存页面的某些部分-因此,您只需要生成用户特定的部分,而无需为登录用户生成整个页面,或者为流量较高的网站使用Edge Side Includes。
googletorp 2010年

迈克,你是野兽!在该站点上到处访问的地方,我都能找到您的答案,它们都很棒!
dgw

@googletorp:您绝对可以做到这一点,只需要手工编写的代码。我很想看看是否可以开发一个框架来简化它,但是我目前专注于尝试实现功能强大且功能丰富的自定义帖子字段。也许很快。:) @ Voyagerfan5761:谢谢。:)
MikeSchinkel 2010年

kiragiannis.com/cloud-computing / ...这可能会给对话带来一些指标。
地理位置

4
  1. 不要对共享托管寄予太大期望-如果您在共享主机上,不要怪WordPress的速度慢。共享主机可能会将数千个帐户塞进一台服务器。因此,您可以花一整天的时间优化每月10美元的帐户,这无关紧要。还要提防营销流行语-只是因为它说“云”并不意味着您不会与数百或数千人共享一台服务器。

  2. 我认为目前不需要缓存插件。如果您查看WP源代码,那么核心中已经包含了高级缓存。缓存的缓存缓存的缓存-提防,这可能适得其反。

  3. 让您慢下来的主要原因是MySQL查询速度慢,开箱即用的WordPress不会给您带来麻烦。但是,我必须“限制”我的评论查询,因为我有50,000多个评论。(这个问题解决了吗?)此外,如果您做的是非典型的事情(例如上千种类别),那也可能是一个问题。

  4. 我将Linode 512与NginX一起使用,“顶部”显示PHP和NginX在每个请求的不到1/100秒的时间内完成工作。几乎所有CPU时间都与MySQL捆绑在一起。您可以使用20美元的Linode每月提供一百万页的服务,但是一旦您开始添加插件和照片,我想您将需要一个“ 1GB” Linode。从我的角度来看,这几乎是线性的:如果网页浏览量增加了一倍,则只需将Linode的大小增加一倍。

免责声明:我不为Linode工作。


更新(大约2年后),因为您要使用PHP缓存页面的某些部分,所以我使用的这是一个简单的解决方案,它出奇的快。我在1/100秒内每页缓存了几个单独的部分/部分。似乎ramdisk可以使速度更快,但是对于我的需求来说速度足够快:

$cache_file = "./cache/portion-1". $since; // maybe round() this $since timestamp
$cache_life = 1000; // seconds to keep this cached
$filemtime = filemtime($cache_file);  // returns FALSE if file does not exist
if (!$filemtime or (time() - $filemtime >= $cache_life)) {

    // heavy lifting starts
    $output = 'Heavy!';
    // heavy lifting ends

    if (!file_put_contents($cache_file,$output,LOCK_EX)) { echo 'error'; } // save the cache    
    echo $output;

} else { 

    // load from cache
    $output = file_get_contents($cache_file); 
    echo $output;        
} 

0

归根结底,有3件事会导致WordPress大规模放慢速度,而归结为:

  • 托管堆栈-您需要使用最新软件的优质主机-PHP 7,Nginx,Varnish,Redis,fail2ban和PerconaDB都是不错的选择
  • 没有表扫描-许多插件是由业余编码人员编写的,他们甚至不知道表扫描是什么。需要避免表扫描的两件事-可用索引和以可以使用索引的方式编写的查询
  • PHP循环内没有或很少有SQL查询-某些插件代码显然仅在小型站点上进行了测试,并且出于某种原因,一个或另一个将循环遍历数据库中的每个产品,并对每个产品/帖子进行新的SQL调用。理想情况下,您希望每页少于100个SQL查询-听起来很多,但实际上并非如此,如果<100,您将获得大约200ms的未缓存TTFB。

一旦具备上述条件,就可以添加缓存-例如Varnish,CDN,页面缓存等。

如果需要横向扩展,可以使用PerconaDB XtraDB创建数据库,并使用Unison创建文件。这样,您可以将1个节点用作wp-admin和cron运行程序,而其他节点则在负载均衡器后面为Web流量提供服务。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.