详情:这是一个 L/A/M/PHP 堆栈,使用一个内部开发的 MVC 框架。目前在一个服务器上进行启动,其中 Apache 和 MySQL 都在上面,但如果需要,我们可以将其分开。
我们已经安装了 Memcached 并尽可能地进行了 PHP 级别的缓存。一些页面需要较多的查询,我们使用 Smarty 作为模板引擎。请记住,没有时间更改任何这些主要方面--这只是设置。我们应该注意哪些事项?
先衡量,再进行优化。你进行过任何负载测试吗?瓶颈在哪里?
一旦确定了瓶颈,就可以理智地决定是否需要增加数据库或Web服务器。现在你只能猜测。
此外,你的负载测试结果与预期流量相比如何?你能处理两倍的预期流量吗?五倍?你能多快地获取和释放额外的硬件资源? 我确信业务需求是在启动时不要失败,因此请确保有大量的可用容量。当负载稳定并且你知道自己需要什么时,总是可以在之后释放它。
在正式上线之前,建议您进行一个测试期,尽可能地让更多的用户使用您的网站,测试其性能并解决问题。
您可以通过私人测试或者类似Google的半公开测试方式来控制用户数量。在半公开测试中,每个用户可以邀请一定数量的朋友参与测试。
加强网站以应对高流量的基本第一步。
使用低成本工具,如https://browsermob.com/来进行负载测试。最少应该考虑每小时100K个独立访客。如果你从MSN首页获取广告,则需要考虑每小时500K个独立访客。
将所有静态图形/视频内容移至CDN。Edgecast和Amazon是两个优秀的选择。
使用Jet Profiler来分析MySQL服务器中任何慢查询的性能。微小的更改可以带来巨大的好处。
为了准备或处理高峰期的性能,我首先会通过一些简单的性能测试来确定你是否准备好,可以使用类似 jmeter 的工具。
这很容易设置和开始,并且会提供早期指标,以确定你是否能够应对预期的高负载。
然而,考虑到你的时间限制,其他需要采取的步骤包括准备内容的静态版本,以吸引最高关注度(例如,如果是发布日,则是新闻稿)。此外,确保你充分利用客户端缓存(少一个请求发送至服务器可能会产生重大影响)。网络已经被设计成极高可扩展性,并且在这些情况下,有效地使用内容缓存是你最好的朋友。
当一切平静下来时,有一段关于高可扩展性的优秀播客,讲述了 Software Engineering Radio 上的新 Guardian 网站设计。
祝你的发布顺利。
个人而言,我会做几件事情:
1)安装某种负载均衡器/数据库复制系统
这意味着您可以将服务分布在多台服务器上。无法永久拥有多台服务器?使用 Amazon E3 - 它适用于类似于此类的事情(打开更多的服务器以处理负载)
2)编写一些“高负载”限制的代码
例如,如果您的搜索不够高效,则在负载达到某个水平时关闭它。“对不起,我们很忙,请稍后再试搜索”
3)进行负载测试... 使用类似 ApacheBench 的东西来压力测试您的服务器。
4)个人认为关闭“Keep-Alive”连接更好。它可能会略微降低总体性能,但是这意味着站点对于少数人有效,其他人则超时,每个人都得到不一致的服务,如果达到那个级别。
Linux Format杂志曾经发表过一篇关于“如何应对Slashdot效应”的好文章,我在过去中也从中受益匪浅。它可以在线获取PDF格式