在高负载站点中使用PHP的策略

在高负载站点中使用PHP的策略,php,performance,high-load,Php,Performance,High Load,在您回答这个问题之前,我还没有开发出任何流行到足以实现高服务器负载的产品。把我当作(叹气)一个刚刚登陆地球的外星人,尽管他知道PHP和一些优化技术 我正在PHP中开发一个工具,如果它运行正常,可以获得相当多的用户。然而,虽然我完全有能力开发这个程序,但在制作能够处理巨大流量的东西时,我几乎一无所知。所以这里有几个问题(也可以把这个问题变成一个资源线程) 数据库 目前,我计划在PHP5中使用MySQLi特性。但是,如何设置与用户和内容相关的数据库?我真的需要多个数据库吗?目前,所有内容都混杂在一

在您回答这个问题之前,我还没有开发出任何流行到足以实现高服务器负载的产品。把我当作(叹气)一个刚刚登陆地球的外星人,尽管他知道PHP和一些优化技术


我正在PHP中开发一个工具,如果它运行正常,可以获得相当多的用户。然而,虽然我完全有能力开发这个程序,但在制作能够处理巨大流量的东西时,我几乎一无所知。所以这里有几个问题(也可以把这个问题变成一个资源线程)

数据库 目前,我计划在PHP5中使用MySQLi特性。但是,如何设置与用户和内容相关的数据库?我真的需要多个数据库吗?目前,所有内容都混杂在一个数据库中——尽管我一直在考虑将用户数据分散到一个数据库中,将实际内容分散到另一个数据库中,最后将核心网站内容(模板母版等)分散到另一个数据库中。我的推理是,将查询发送到不同的数据库将减轻它们的负载,因为一个数据库=3个负载源。如果它们都在同一台服务器上,这还会有效吗

缓存 我有一个模板系统,用于构建页面和交换变量。主模板存储在数据库中,每次调用模板时,都会调用其缓存副本(html文档)。目前,我在这些模板中有两种类型的变量——静态变量和动态变量。静态变量通常是像页面名称、站点名称之类的东西——不会经常更改的东西;动态变量是在每次页面加载时更改的内容

我的问题是:

假设我对不同的文章有评论。哪一个是更好的解决方案:每次加载页面时,存储简单注释模板并呈现注释(来自DB调用),或者将注释页面的缓存副本存储为html页面-每次添加/编辑/删除注释时,页面被重新缓存

最后 是否有人有任何关于在PHP上运行高负载站点的提示/指针。我很确定这是一种可行的语言——Facebook和Yahoo!把它放在首位——但是有什么我应该注意的经验吗?

是绝对必须的。它不仅是一个伟大的缓存系统,而且从自动缓存的PHP文件中获得的好处是天赐良机。至于多数据库的想法,我认为在同一台服务器上使用不同的数据库不会有什么好处。在查询期间,它可能会让您在速度上有所提高,但我怀疑,在确保三者同步的同时,为这三者部署和维护代码所做的努力是否值得


我还强烈建议您通过跑步来发现程序中的瓶颈。这让优化对我来说轻而易举。

首先,正如我认为Knuth所说,“过早优化是万恶之源”。如果您现在不必处理这些问题,那么就不要首先集中精力交付能够正常工作的东西。也就是说,如果优化不能等待的话

尝试分析您的数据库查询,找出什么是慢的,什么是经常发生的,并从中提出优化策略

我会调查一下,因为这是许多高负载站点用来高效缓存所有类型内容的方法,并且它的PHP对象接口非常好

在服务器之间拆分数据库并使用某种负载平衡技术(例如,在1和#冗余数据库之间生成一个随机数,其中包含必要的数据,并使用该数字确定要连接到哪个数据库服务器)也是提高效率的一种很好的方法


在过去的一些相当高负载的站点中,这些都运行得相当好。希望这有助于您入门:-)

我在一些网站上工作过,这些网站每月获得数百万次的点击率,并得到PHP和MySQL的支持。以下是一些基本知识:

  • 缓存,缓存,缓存。缓存是减少Web服务器和数据库负载的最简单、最有效的方法之一。缓存页面内容、查询、昂贵的计算,以及任何I/O绑定的内容。Memcache非常简单有效
  • 一旦你用完了,就使用多个服务器。您可以有多个web服务器和多个数据库服务器(带复制)
  • 减少对Web服务器的总体请求。这需要使用expires头缓存JS、CSS和图像。您还可以将静态内容移动到CDN,这将加快用户体验
  • 衡量和基准。在生产机器上运行Nagios,并在dev/qa服务器上进行负载测试。你需要知道你的服务器什么时候会着火,这样你才能防止它
  • 我推荐阅读,它是由一位Flickr工程师写的,是一个很好的参考

    也可以查看我关于可伸缩性的博客文章,其中有许多链接指向有关使用多种语言和平台进行伸缩的演示:

    使用Xdebug(推荐使用tj9991)之类的工具评测应用程序肯定是必须的。盲目地去优化东西是没有多大意义的。Xdebug将帮助您找到代码中真正的瓶颈,以便您能够明智地花费优化时间,并修复实际导致速度下降的代码块

    如果您使用的是Apache,另一个有助于测试的实用程序是。它将帮助您预测服务器和应用程序对高负载的反应,让它真正完成它的工作


    任何类型的PHP操作码缓存(如APC或其他许多操作码缓存中的一种)也会有很大帮助。

    没有两个站点是相同的。你真的需要一个工具和基准来看看你的问题点在哪里。你可以花很多时间去猜测和改进,但只有在你衡量和比较你的改变之后,你才能看到真正的结果

    例如,多年来,MySQL查询缓存一直是解决方案