在回答这个问题之前,我从来没有开发出任何足以获得高服务器负载的东西。 把我视为(感叹)一个刚刚降落在这个星球上的外星人,虽然他知道PHP和一些优化技术。


我正在开发一个PHP工具,可以获得相当多的用户,如果它正确的话。 然而,虽然我完全有能力开发这个程序,但在制作可以处理巨大流量的东西方面,我几乎一无所知。 所以这里有几个问题(随意将这个问题转化为资源线程)。

数据库

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

高速缓存

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

我的问题是:

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

最后

有没有人有任何关于在PHP上运行高负载站点的提示/指针。 我很确定这是一种可行的语言 - Facebook和Yahoo! 给予它优先权 - 但是我有什么经验值得注意吗?

===============>>#1 票数:88 已采纳

没有两个网站是相似的。 你真的需要一个像jmeter和基准测试的工具来看你的问题点。 您可以花费大量时间进行猜测和改进,但在衡量和比较更改之前,您不会看到实际结果。

例如,多年来,MySQL查询缓存是解决我们所有性能问题的方法。 如果您的网站速度很慢,MySQL专家建议打开查询缓存。 事实证明,如果你有很高的写入负载,缓存实际上是瘫痪的。 如果你在没有测试的情况下打开它,你就永远不会知道。

不要忘记你从未完成过缩放。 处理10req / s的站点将需要更改以支持1000req / s。 如果你的运气足够需要支持10,000req / s,你的架构可能看起来也会完全不同。

数据库

  • 不要使用MySQLi - PDO是“现代”的OO数据库访问层。 要使用的最重要的功能是查询中的占位符。 它足够聪明,可以为您使用服务器端准备和其他优化。
  • 此时您可能不想破坏数据库。 如果您确实发现某个数据库未切割,则可以使用多种技术进行扩展,具体取决于您的应用。 如果您的读取数多于写入数,则复制到其他服务器通常可以正常工作。 分片是一种在多台机器上分割数据的技术。

高速缓存

  • 您可能不希望在数据库中缓存。 数据库通常是您的瓶颈,因此添加更多IO通常是一件坏事。 有几个PHP缓存可以完成像APC和Zend这样的类似事情。
  • 通过打开和关闭缓存来测量您的系统。 我敢打赌你的缓存比直接提供页面更重。
  • 如果从db构建注释和文章数据需要很长时间,请将memcache集成到系统中。 您可以缓存查询结果并将它们存储在memcached实例中。 重要的是要记住,从memcache中检索数据必须比从数据库中组装数据更快,以获得任何好处。
  • 如果您的文章不是动态的,或者在生成之后您有简单的动态更改,请考虑将html或php写入磁盘。 你可以有一个index.php页面在磁盘上查找文章,如果它在那里,它会将它流式传输到客户端。 如果不是,则生成文章,将其写入磁盘并将其发送到客户端。 从磁盘删除文件会导致重写页面。 如果将注释添加到文章中,请删除缓存的副本 - 它将被重新生成。

===============>>#2 票数:59

我是一个拥有超过1500万用户的网站的首席开发人员。 我们的扩展问题非常少,因为我们已经为它做了很早的计划并且经过精心设计。 以下是我可以根据自己的经验提出的一些策略。

SCHEMA首先,对您的模式进行非规范化。 这意味着您应该选择拥有一个大表,而不是拥有多个关系表。 通常,连接是浪费宝贵的数据库资源,因为进行多次准备和整理会烧毁磁盘I / O. 尽可能避免使用它们。

这里的权衡是您将存储/提取冗余数据,但这是可以接受的,因为数据和笼内带宽非常便宜(更大的磁盘),而多个准备I / O的数量级更高(更多服务器) 。

索引确保您的查询至少使用一个索引。 但请注意,如果您经常编写或更新,索引将花费您。 有一些实验技巧可以避免这种情况。

您可以尝试添加未编制索引的其他列,这些列与索引的列并行运行。 然后,您可以拥有一个脱机进程,将非索引列分批写入索引列。 这样,当mySQL需要重新计算索引时,您可以更好地控制。

避免像瘟疫这样的计算查询。 如果必须计算查询,请尝试在写入时执行一次。

CACHING我强烈推荐Memcached。 PHP堆栈(Facebook)上最大的玩家已经证明了这一点并且非常灵活。 有两种方法可以做到这一点,一种是在数据库层中进行缓存,另一种是在业务逻辑层中进行缓存。

DB层选项需要缓存从DB检索的查询的结果。 您可以使用md5()散列SQL查询,并在转到数据库之前将其用作查找键。 这样做的好处是它很容易实现。 缺点(取决于实现)是您失去了灵活性,因为您在缓存过期方面将所有缓存视为相同。

在我工作的商店中,我们使用业务层缓存,这意味着我们系统中的每个具体类都控制着自己的缓存模式和缓存超时。 这对我们来说非常好用,但要注意从DB检索的项目可能与缓存中的项目不同,因此您必须一起更新缓存和DB。

数据保护复制只能让你到目前为止。 比你预期的要早,你的写作将成为瓶颈。 要进行补偿,请确保尽早支持数据分片。 如果你不这样做,你可能会想要自己拍摄。

实现起来非常简单。 基本上,您希望将密钥授权与数据存储分开。 使用全局DB存储主键和群集ID之间的映射。 您查询此映射以获取群集,然后查询群集以获取数据。 你可以缓存这个查找操作的地狱,这将使它成为一个可以忽略不计的操作。

这样做的缺点是可能很难将来自多个分片的数据拼凑在一起。 但是,你也可以设计自己的方式。

离线处理如果用户不必,请不要让用户等待你的后端。 构建作业队列并移动可以脱机的任何处理,将其与用户的请求分开。

===============>>#3 票数:41

我曾经在一些网站上工作过,这些网站每月都有数百万/次点击支持PHP和MySQL。 以下是一些基础知识:

  1. 缓存,缓存,缓存。 缓存是减少Web服务器和数据库负载的最简单,最有效的方法之一。 缓存页面内容,查询,昂贵的计算,I / O绑定的任何内容。 Memcache简单而有效。
  2. 一旦最大化,请使用多个服务器。 您可以拥有多个Web服务器和多个数据库服务器(具有复制功能)。
  3. 减少对Web服务器的整体请求数。 这需要使用expires头缓存JS,CSS和图像。 您还可以将静态内容移动到CDN,这将加快用户的体验。
  4. 衡量和基准。 在生产计算机上运行Nagios并在dev / qa服务器上加载测试。 你需要知道什么时候你的服务器会着火,所以你可以防止它。

我建议阅读Building Scalable Websites ,它是由Flickr工程师之一编写的,是一个很好的参考。

查看我关于可扩展性的博客文章,它有很多关于使用多种语言和平台进行扩展的演示文稿的链接: http//www.ryandoherty.net/2008/07/13/unicorns-and-scalability/

===============>>#4 票数:39

Re:PDO / MySQLi / MySQLND

@ gary

你不能只说“不要使用MySQLi”,因为他们有不同的目标。 PDO几乎就像一个抽象层(虽然它实际上并不是这样),旨在使多个数据库产品易于使用,而MySQLi则专门用于MySQL连接。 说PDO是将它与MySQLi进行比较的上下文中的现代访问层是错误的,因为你的语句意味着进展是mysql - > mysqli - > PDO,但事实并非如此。

MySQLi和PDO之间的选择很简单 - 如果您需要支持多个数据库产品,那么您可以使用PDO。 如果您只是使用MySQL,那么您可以在PDO和MySQLi之间进行选择。

那你为什么选择MySQLi而不是PDO呢? 见下文...

@ross

你对MySQLnd这是最新的MySQL核心语言级库是正确的,但它不是MySQLi的替代品。 MySQLi(与PDO一样)仍然是通过PHP代码与MySQL交互的方式。 这两个都使用libmysql作为PHP代码背后的C客户端。 问题是libmysql不在核心PHP引擎之外,而是mysqlnd的用武之地,即它是一个本机驱动程序,它利用核心PHP内部来最大限度地提高效率,特别是在内存使用方面。

MySQLnd由MySQL自己开发,最近已经进入了用于RC测试的PHP 5.3分支,准备在今年晚些时候发布。 然后,您将能够将MySQLnd与MySQLi一起使用......但不能与PDO一起使用。 这将使MySQLi在许多领域(并非所有领域) 都有性能提升 ,并且如果您不需要像PDO这样的抽象功能,它将使其成为MySQL交互的最佳选择。

也就是说,MySQLnd 现在可以在PHP 5.3中用于PDO,因此您可以获得从ND到PDO的性能增强的优势,但是,PDO仍然是一个通用的数据库层,因此不太可能从作为MySQLi的ND的增强功能可以

虽然它们来自2006年,但可以在这里找到一些有用的基准测试 。您还需要了解此选项之类的内容

在MySQLi和PDO之间进行决策时需要考虑很多因素。 事实上,直到你得到高得多的请求数字并不重要,在这种情况下,使用专门为MySQL设计的扩展而不是抽象的东西并且碰巧提供MySQL驱动程序更有意义。

这不是一个简单的问题,因为每个都有优点和缺点。 您需要阅读我提供的链接并提出自己的决定,然后进行测试并找出答案。 我在过去的项目中使用过PDO,它是一个很好的扩展,但我对纯性能的选择是MySQLi,编译了新的MySQLND选项(当PHP 5.3发布时)。

===============>>#5 票数:23

一般

  • 在开始看到真实负载之前不要尝试优化。 你可能猜对了,但如果你没有,你就浪费了你的时间。
  • 使用jmeterxdebug或其他工具对网站进行基准测试。
  • 如果加载开始出现问题,则可能涉及对象或数据缓存,因此通常会读取缓存选项(memcached,MySQL缓存选项)

  • 描述您的代码,以便您知道瓶颈在哪里,以及它是在代码还是数据库中

数据库

  • 如果对其他数据库的可移植性不重要,则使用MYSQLi ,否则使用PDO
  • 如果基准测试显示数据库是问题,请在开始缓存之前检查查询。 使用EXPLAIN查看查询速度减慢的位置。
  • 在优化查询并以某种方式缓存数据库之后,您可能希望使用多个数据库。 复制到多个服务器或分片(在多个数据库/服务器上分割数据)可能是合适的,具体取决于数据,查询和读/写行为的类型。

高速缓存

  • 在缓存代码,对象和数据方面已经做了大量的写作。 查阅有关APCZend OptimizermemcachedQuickCacheJPCache的文章 在你真正需要之前做一些这样的事情,你就不那么关心从未优化开始了。
  • APC和Zend Optimizer是操作码缓存,它们通过避免重新编译和重新编译代码来加速PHP代码。 一般安装简单,值得早做。
  • Memcached是一个通用缓存,可用于缓存查询,PHP函数或对象或整个页面。 代码必须专门编写才能使用它,如果没有中心点来处理缓存对象的创建,更新和删除,则可以使用它。
  • QuickCache和JPCache是​​文件缓存,否则类似于Memcached。 基本概念很简单,但也需要代码,并且更容易使用创建,更新和删除的中心点。

  • 考虑高负载的替代Web服务器。 lighthttpnginx这样的服务器可以在比Apache更少的内存中处理大量流量,如果你可以牺牲Apache的功能和灵活性(或者如果你不需要那些东西,通常你不需要)。
  • 请记住,硬件目前的价格非常便宜,所以一定要花费大量资源来优化大块代码而不是“让我们买一台怪兽服务器”。
  • 考虑在此问题中添加“MySQL”和“缩放”标记

===============>>#6 票数:9

APC是绝对必须的。 它不仅适用于一个出色的缓存系统,而且自动缓存的PHP文件的收益也是天赐之物。 至于多数据库的想法,我认为你不会在同一台服务器上拥有不同的数据库。 它可能会在查询时间内为您带来一些速度提升,但我怀疑为确保它们同步而部署和维护所有三个代码所需的工作量是值得的。

我还强烈建议运行Xdebug以找到程序中的瓶颈。 它使我的优化变得轻而易举。

===============>>#7 票数:9

首先,正如我认为Knuth所说,“过早优化是万恶之源”。 如果您现在不必处理这些问题,那么请不要专注于首先提供正常工作的东西。 话虽如此,如果优化不能等待。

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

我会调查Memcached,因为它是许多较高负载站点用于有效缓存所有类型的内容的东西,并且PHP对象接口非常好。

在服务器之间拆分数据库并使用某种负载平衡技术(例如,在1和#冗余数据库之间生成具有必要数据的随机数 - 并使用该数字来确定要连接到哪个数据库服务器)也可以是一种很好的增加方式效率。

对于一些相当高负荷的站点,这些在过去都很好。 希望这有助于您入门:-)

===============>>#8 票数:6

使用Xdebug(如推荐的tj9991)对您的应用进行概要分析肯定是必须的。 盲目地优化事物并没有多大意义。 Xdebug将帮助您找到代码中的真正瓶颈,这样您就可以明智地花费优化时间并修复实际导致缓慢下降的代码块。

如果您正在使用Apache,那么可以帮助测试的另一个实用程序是Siege 它可以帮助您预测服务器和应用程序如何通过真正实现其高速负载来应对高负载。

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

===============>>#9 票数:6

我运营的网站每月有7-8百万的页面浏览量。 不是很多,但足以让我们的服务器感受到负载。 我们选择的解决方案很简单:数据库级别的Memcache。 如果数据库负载是您的主要问题,此解决方案很有效。

我们开始使用Memcache来缓存整个对象和最常用的数据库结果。 它确实有效,但它也引入了错误(如果我们更加小心的话,我们可能已经避免了其中的一些错误)。

所以我们改变了方法。 我们构建了一个数据库包装器(使用与旧数据库完全相同的方法,因此很容易切换),然后我们将其子类化以提供memcached数据库访问方法。

现在,您所要做的就是确定查询是否可以使用缓存(可能是过时的)结果。 现在,用户运行的大多数查询都是直接从Memcache中获取的。 例外是更新和插入,主网站只会因为日志记录而发生。 这个相当简单的措施将我们的服务器负载减少了大约80%。

===============>>#10 票数:6

对于它的价值,即使没有像memcached这样的扩展/帮助程序包,缓存也是PHP中的DIRT SIMPLE。

您需要做的就是使用ob_start()创建一个输出缓冲区。

创建全局缓存功能。 调用ob_start ,将该函数作为回调传递。 在该函数中,查找页面的缓存版本。 如果存在,请服务并结束。

如果它不存在,脚本将继续处理。 当它到达匹配的ob_end()时,它将调用你指定的函数。 那时,您只需获取输出缓冲区的内容,将其放入文件中,保存文件,然后结束。

添加一些到期/垃圾回收。

许多人没有意识到你可以嵌套ob_start() / ob_end()调用。 因此,如果您已经使用输出缓冲区来解析广告或进行语法突出显示等等,您可以嵌套另一个ob_start/ob_end调用。

===============>>#11 票数:5

感谢您对PHP缓存扩展的建议 - 您能解释一个使用另一个的原因吗? 我通过IRC听说过有关memcached的好消息,但从未听说过APC - 你对它们的看法是什么? 我假设使用多个缓存系统非常有效。

实际上, 很多人一起使用APC和memcached ......

===============>>#12 票数:4

看起来我错了 MySQLi仍在开发中。 但根据文章,PDO_MySQL现在由MySQL团队贡献。 来自文章:

MySQL改进的扩展 - mysqli - 是旗舰。 它支持MySQL服务器的所有功能,包括Charsets,Prepared Statements和Stored Procedures。 驱动程序提供了混合API:您可以根据自己的喜好使用过程或面向对象的编程风格。 mysqli附带PHP 5及更高版本。 请注意,PHP 4的生命周期结束时间为2008-08-08。

PHP数据对象(PDO)是数据库访问抽象层。 PDO允许您对各种数据库使用相同的API调用。 PDO不提供任何程度的SQL抽象。 PDO_MYSQL是PDO的MySQL驱动程序。 PDO_MYSQL附带PHP 5.从PHP 5.3开始,MySQL开发人员积极参与其中。 统一API的PDO优势是以统一API不完全支持MySQL特定功能(例如多个语句)为代价的。

请停止使用已发布的PHP的第一个MySQL驱动程序:ext / mysql。 自从MySQL改进扩展 - mysqli - 在2004年推出PHP 5以来,没有理由继续使用最古老的驱动程序。 ext / mysql不支持Charsets,Prepared Statements和Stored Procedures。 它仅限于MySQL 4.0的功能集。 请注意,MySQL 4.0的扩展支持在2008-12-31结束。 不要局限于这种旧软件的功能集! 升级到mysqli,另请参见Converting_to_MySQLi。 从我们的角度来看,mysql处于仅维护模式。

对我来说,这篇文章似乎偏向于MySQLi。 我想我偏向于PDO。 我非常喜欢MySQLi上的PDO。 这对我来说很直接。 API与我编写的其他语言更接近.OO数据库接口似乎工作得更好。

我没有遇到过PDO无法提供的任何特定MySQL功能。 如果我做过,我会感到惊讶。

===============>>#13 票数:3

PDO也非常慢,其API非常复杂。 如果可移植性不是一个问题,他们的理智思想中没有人应该使用它。 让我们面对现实吧,99%的网络应用都没有。 您只需坚持使用MySQL或PostrgreSQL,或者您正在使用的任何东西。

至于PHP问题以及要考虑的内容。 我认为过早优化是万恶之源。 ;)首先完成您的应用程序,尝试在编程时保持清洁,做一些文档并编写单元测试。 有了上述所有内容,您将无需在时机成熟时重构代码。 但首先你要完成并推出它以了解人们对它的反应。

===============>>#14 票数:2

当然PDO是好的,但也 一些争议,关于它的性能与MySQL和mysqli的,虽然它似乎已经得到解决。

如果你设想可移植性,你应该使用pdo,但如果没有,mysqli应该是这样的。 它有一个OO接口,预处理语句,以及pdo提供的大部分内容(除了,以及可移植性)。

另外,如果确实需要性能,请准备PHP 5.3中的(本机mysql) MysqLnd驱动程序,它将与php更紧密地集成,具有更好的性能和更高的内存使用率(以及性能调优的统计数据)。

如果你有群集服务器(和像YouTube一样的负载),Memcache很不错,但我也会先尝试APC

===============>>#15 票数:2

第一个问题是你真正期望它有多大? 您计划投资基础设施的程度是多少? 既然你觉得有必要在这里提出这个问题,我猜你希望在预算有限的情况下从小做起。

如果站点不可用,则性能无关紧要。 而对于可用性,您需要水平扩展。 你可以理智地逃脱的最小值是2台服务器,它们都运行apache,php和mysql。 将一个DBMS设置为另一个DBMS。 执行主服务器上的所有写操作以及本地数据库上的所有读操作(无论是什么) - 除非由于某种原因您需要读回刚刚读取的数据(使用主服务器)。 确保你有适当的机器来自动提升奴隶并围住主人。 使用循环DNS作为Web服务器地址,以便为从属节点提供更多关联。

在这个阶段将数据划分到不同的数据库节点是一个非常糟糕的主意 - 但是你可能想要考虑将它分割到同一服务器上的不同数据库中(当你超越facebook时,这将促进跨节点的分区)。

确保您已获得监控和数据分析工具,以衡量您的网站性能并确定瓶颈。 通过编写更好的SQL /修复数据库模式可以解决大多数性能问题。

将模板缓存保存在数据库上是一个愚蠢的想法 - 数据库应该是结构化数据的中央公共存储库。 将模板缓存保留在Web服务器的本地文件系统上 - 它将更快地提供,并且不会减慢数据库访问速度。

请使用操作码缓存。

花大量时间研究您的网站及其日志,以了解它为何如此缓慢。

尽可能多地将缓存推送到客户端。

使用mod_gzip来压缩你能做的一切。

C。

===============>>#16 票数:2

已经给出了很多好的答案,但我想指出一个名为XCache的备用操作码缓存。 它由一个轻微的贡献者创建。

此外,如果您将来可能需要对数据库服务器进行负载平衡, MySQL Proxy可以帮助您实现此目的。

这两个工具都应该很容易插入现有应用程序,因此可以在需要时进行优化,而不会有太多麻烦。

===============>>#17 票数:2

我的第一条建议是考虑这个问题,并在设计网站时牢记这一点但不要过分 通常很难预测新网站的成功与否,我会更好地花时间提早完成并稍后进行优化。

一般来说, Simple很快 模板让你失望。 数据库减慢了你的速度。 复杂的库让你失望。 将模板相互分层,从数据库中检索它们并在复杂的库中解析它们 - >时间延迟相互叠加。

一旦您启动并运行了基本站点,就会进行测试以显示您在哪里花费精力。 很难看到目标位置。 通常为了加快速度,您必须解决代码的复杂性,这会使代码更大,更难维护,因此您只需要在必要时执行此操作。

根据我的经验,建立数据库连接相对昂贵。 如果您可以使用它,请不要连接到流量最大的页面上的一般访问者的数据库,例如站点的首页。 创建多个数据库连接是疯狂的,几乎没有什么好处。

===============>>#18 票数:1

有关缓存的观点是现场点; 它是构建高效应用程序中最不复杂和最重要的部分。 我想补充一点,虽然memcached很棒,但如果您的应用程序位于单个服务器上,APC的速度要快5倍。

MySQL性能博客上的“缓存性能比较”帖子有一些有趣的基准 - http://www.mysqlperformanceblog.com/2006/08/09/cache-performance-comparison/

===============>>#19 票数:1

我无法相信没有人已经提到这一点:模块化和抽象。 如果您认为您的网站必须要扩展到许多机器,那么您必须将其设计为可以! 这意味着愚蠢的事情就是不要假设数据库在localhost上。 它也意味着一开始会很烦人的事情,比如写一个数据库抽象层(比如PDO,但更轻,因为它只做你需要它做的事情)。

这意味着像使用框架一样。 您将需要对代码进行分层,以便稍后通过重构数据抽象层来获得性能,例如,通过教导某些对象位于不同的数据库中 - 并且代码不必知道或关心

最后,请注意内存密集型操作,例如,不必要的字符串复制。 如果你可以减少PHP的内存使用量,那么你将从你的网络服务器中获得更多的性能,这是你在使用负载平衡解决方案时可以扩展的。

===============>>#20 票数:1

@ Gary

不要使用MySQLi - PDO是“现代”的OO数据库访问层。 要使用的最重要的功能是查询中的占位符。 它足够聪明,可以为您使用服务器端准备和其他优化。

我现在正在讨论PDO,看起来你是对的 - 不过我知道MySQL正在开发PHP的MySQLd扩展 - 我认为要成功MySQL或MySQLi - 你怎么看?


@ RyanErictj9991

感谢您对PHP缓存扩展的建议 - 您能解释一个使用另一个的原因吗? 我通过IRC听说过有关memcached的好消息,但从未听说过APC - 你对它们的看法是什么? 我假设使用多个缓存系统非常有效。

我一定会整理一些剖析测试人员 - 非常感谢您对这些测试人员的建议。

===============>>#21 票数:1

我不认为自己很快会从MySQL切换 - 所以我想我不需要PDO的抽象功能。 感谢DavidM的那些文章,他们给了我很多帮助。

===============>>#22 票数:1

查看mod_cache ,Apache Web服务器的输出缓存,与ASP.NET中的输出缓存相似

是的,我可以看到它仍然是实验性的,但有一天它将是最终的。

===============>>#23 票数:1

如果您正在处理大量数据,并且缓存没有削减它,请查看Sphinx。 我们使用SphinxSearch获得了很好的结果,不仅可以用于更好的文本搜索,还可以在处理更大的表时作为MySQL的数据检索替代品。 如果你使用SphinxSE(MySQL插件),它超过了我们从缓存多次获得的性能提升,并且应用程序实现是一个难题。

  ask by Ross translate from so

未解决问题?本站智能推荐:

1回复

将PHP与全栈框架一起用于高负载项目是一个坏主意吗? [关闭]

我知道PHP代码会编译为字节码,并在每次运行时(即在每个页面请求中)重新执行。 因此,引擎应在每次请求时重新定义所有使用的类,函数,变量等。 当使用Laravel或CakePHP等全栈框架时,这也意味着在每个请求上,一次又一次地执行相同的引导工作,例如解析配置文件,注册路由,自动加载类等
2回复

如何使用同一个PHP运行实例处理多个请求?

众所周知,PHP的原理是“不共享”。 因此,它受到严重的性能限制。 虽然可以通过某些缓存扩展来加速已编译的脚本,但我们无法避免进行非常繁琐的初始化(例如,我们拥有Web服务,并且每次调用至少都需要解析和引导DTO模式,设置数据绑定,连接数据库(永久mysql从这个角度来看,连接确实是肮脏
1回复

LEMP Nginx + php-fpm高负载超时然后正常

我对所有这些都还很陌生,但是我对OCD进行优化。 我正在尝试优化运行Wordpress LEMP设置的Web服务器。 我使用的是WP Hypercache,而不是w3的总缓存,因为与我的设置相比,它似乎表现出色 我正在使用blitz.io从整个450开始测试并向该域中抛出450
2回复

APC User-Cache是​​否适合高负载环境?

我们尝试在高负载环境中将APC用户缓存部署为每台服务器上用于中央缓存服务(redis)的本地第二层缓存,以缓存结果很少更改的数据库查询和配置。 我们基本上看了一下Facebook(几年前)的情况: http://www.slideshare.net/guoqing75/4069180-c
3回复

digg(或其他高负载类别网站)如何存储用户会话?

digg或任何其他高流量网站如何存储用户会话? 他们用什么来存储用户会话? 文件系统,DB(哪一个?),memcache或两者兼而有之? 让我们想象一个简单的情况。 登录用户在登录期间设置了“记住我”标记。 我们设置了一个会话cookie,其截止日期为1年。 例如,我们将会话保留
1回复

缓存失效导致高负载

假设我们每秒有10K个请求到我们的php脚本。 每个请求都会检查memcached(或任何其他缓存存储)中的缓存。 如果找到了缓存,则一切正常,并返回缓存值。 如果找不到缓存,我们将执行缓慢的SQL查询以填充缓存。 这是最常见和最简单的缓存方案: 在我们没有太多请求之前,此方
5回复

对于高流量的ajax密集型网站,您会推荐什么?

对于像reddit这样的网站,有很多上/下投票和每个主题的很多评论,我该怎么办? Lighttpd / Php或Lighttpd / CherryPy / Genshi / SQLAlchemy? 对于数据库,什么会扩展更好/最快的MySQL(4.1或5?)或PostgreSQL?
1回复

与PHP + Redis并发连接

是否存在某种机制以高并发性处理数据? 首先,我们使用了mongodb,它具有解决问题的原子更新。 但是更新频率大约为1000秒,我们设置Redis来帮助mongo并在它们之间编写同步。 它运作良好,但是redis存在一致性问题。 例如: 第一个请求在0.01毫秒到达-进
2回复

需要加快这个PHP脚本

我的mysql表中目前有40万条记录。 结构如下: 我正在使用的功能: function cron_hour_counts() { $subids = get_subids(); array_push($subids, ''); $from = '2011-1
1回复

等待远程入站时释放资源(PHP,Apache,Nginx)

我的PHP脚本等待远程门响应,通常需要20秒钟左右。 它会导致apache httpd线程通过打开的MySQL连接驻留在内存中,并最终超过MaxClients值。 如何管理它以释放空闲资源,直到远程闸门响应为止。 一种解决方案是:1)运行远程门请求,然后将用户重定向到刷新到某些URL测