在高负载站点中使用PHP的策略
在您回答这个问题之前,我还没有开发出任何流行到足以实现高服务器负载的产品。把我当作(叹气)一个刚刚登陆地球的外星人,尽管他知道PHP和一些优化技术在高负载站点中使用PHP的策略,php,performance,high-load,Php,Performance,High Load,在您回答这个问题之前,我还没有开发出任何流行到足以实现高服务器负载的产品。把我当作(叹气)一个刚刚登陆地球的外星人,尽管他知道PHP和一些优化技术 我正在PHP中开发一个工具,如果它运行正常,可以获得相当多的用户。然而,虽然我完全有能力开发这个程序,但在制作能够处理巨大流量的东西时,我几乎一无所知。所以这里有几个问题(也可以把这个问题变成一个资源线程) 数据库 目前,我计划在PHP5中使用MySQLi特性。但是,如何设置与用户和内容相关的数据库?我真的需要多个数据库吗?目前,所有内容都混杂在一
我正在PHP中开发一个工具,如果它运行正常,可以获得相当多的用户。然而,虽然我完全有能力开发这个程序,但在制作能够处理巨大流量的东西时,我几乎一无所知。所以这里有几个问题(也可以把这个问题变成一个资源线程) 数据库 目前,我计划在PHP5中使用MySQLi特性。但是,如何设置与用户和内容相关的数据库?我真的需要多个数据库吗?目前,所有内容都混杂在一个数据库中——尽管我一直在考虑将用户数据分散到一个数据库中,将实际内容分散到另一个数据库中,最后将核心网站内容(模板母版等)分散到另一个数据库中。我的推理是,将查询发送到不同的数据库将减轻它们的负载,因为一个数据库=3个负载源。如果它们都在同一台服务器上,这还会有效吗 缓存 我有一个模板系统,用于构建页面和交换变量。主模板存储在数据库中,每次调用模板时,都会调用其缓存副本(html文档)。目前,我在这些模板中有两种类型的变量——静态变量和动态变量。静态变量通常是像页面名称、站点名称之类的东西——不会经常更改的东西;动态变量是在每次页面加载时更改的内容 我的问题是: 假设我对不同的文章有评论。哪一个是更好的解决方案:每次加载页面时,存储简单注释模板并呈现注释(来自DB调用),或者将注释页面的缓存副本存储为html页面-每次添加/编辑/删除注释时,页面被重新缓存 最后 是否有人有任何关于在PHP上运行高负载站点的提示/指针。我很确定这是一种可行的语言——Facebook和Yahoo!把它放在首位——但是有什么我应该注意的经验吗?是绝对必须的。它不仅是一个伟大的缓存系统,而且从自动缓存的PHP文件中获得的好处是天赐良机。至于多数据库的想法,我认为在同一台服务器上使用不同的数据库不会有什么好处。在查询期间,它可能会让您在速度上有所提高,但我怀疑,在确保三者同步的同时,为这三者部署和维护代码所做的努力是否值得
我还强烈建议您通过跑步来发现程序中的瓶颈。这让优化对我来说轻而易举。首先,正如我认为Knuth所说,“过早优化是万恶之源”。如果您现在不必处理这些问题,那么就不要首先集中精力交付能够正常工作的东西。也就是说,如果优化不能等待的话 尝试分析您的数据库查询,找出什么是慢的,什么是经常发生的,并从中提出优化策略 我会调查一下,因为这是许多高负载站点用来高效缓存所有类型内容的方法,并且它的PHP对象接口非常好 在服务器之间拆分数据库并使用某种负载平衡技术(例如,在1和#冗余数据库之间生成一个随机数,其中包含必要的数据,并使用该数字确定要连接到哪个数据库服务器)也是提高效率的一种很好的方法
在过去的一些相当高负载的站点中,这些都运行得相当好。希望这有助于您入门:-)我在一些网站上工作过,这些网站每月获得数百万次的点击率,并得到PHP和MySQL的支持。以下是一些基本知识:
使用Xdebug(推荐使用tj9991)之类的工具评测应用程序肯定是必须的。盲目地去优化东西是没有多大意义的。Xdebug将帮助您找到代码中真正的瓶颈,以便您能够明智地花费优化时间,并修复实际导致速度下降的代码块 如果您使用的是Apache,另一个有助于测试的实用程序是。它将帮助您预测服务器和应用程序对高负载的反应,让它真正完成它的工作
任何类型的PHP操作码缓存(如APC或其他许多操作码缓存中的一种)也会有很大帮助。没有两个站点是相同的。你真的需要一个工具和基准来看看你的问题点在哪里。你可以花很多时间去猜测和改进,但只有在你衡量和比较你的改变之后,你才能看到真正的结果 例如,多年来,MySQL查询缓存一直是解决方案